Skip to content

Instantly share code, notes, and snippets.

Created June 9, 2014 16:27
Show Gist options
  • Save anonymous/75ee0f8fb58c23f8ae02 to your computer and use it in GitHub Desktop.
Save anonymous/75ee0f8fb58c23f8ae02 to your computer and use it in GitHub Desktop.
/* Comment Generated by Combres - Resource '/sup/js/lib/jquery-1.9.1.min.js' (Mode: Static) */
/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery.min.map
*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.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 contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);;
/* Comment Generated by Combres - Resource '/sup/js/adrma.js' (Mode: Static) */
/*
BSD
adrma API - Jan 2012
*/
//Global adrma Object
window.adrma = window.adrma || {}; // safeguard old pages that manually call in adrma.js via older combress.;
/* Comment Generated by Combres - Resource '/sup/js/adrma.log.js' (Mode: Static) */
// safe logging
if (typeof console === "undefined") {
console = {};
console.log = function(arg) {
//return adrma.log.call(window, arg);
};
}
adrma.log = function(args) {
if (!window.console) return;
console.log(args);
};;
/* Comment Generated by Combres - Resource '/sup/js/polyfills/objectKeys.js' (Mode: Static) */
Object.keys = Object.keys || function(
o, // object
k, // key
r // result array
) {
// initialize object and result
r = [];
// iterate over object keys
for (k in o) {
// fill result array with non-prototypical keys
r.hasOwnProperty.call(o, k) && r.push(k);
}
// return result
return r;
};;
/* Comment Generated by Combres - Resource '/sup/js/polyfills/raf.js' (Mode: Static) */
window.requestAnimFrame = (function() {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) {
window.setTimeout(callback, 1000 / 60);
};
})();;
/* Comment Generated by Combres - Resource '/sup/js/adrma.utils.js' (Mode: Static) */
adrma = window.adrma || {};
//If needed arrays (like "m1.People[1].Numbers[2]") then update with http://stackoverflow.com/a/19048967/56449
adrma.getDescendantProp = function getDescendantProp(desc, obj) {
obj = obj || window;
if (typeof desc !== "string") {
return desc;
}
var arr = desc.split(".");
while (arr.length && (obj = obj[arr.shift()]));
return obj;
};
//
//
//
//http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string
adrma.executeDescendantFn = function executeDescendantFn(functionName, context, args) {
var fn = adrma.getDescendantProp(functionName);
context = context || window;
args = args || []; // assume the args is a array, otherwise need to check if Array.
return fn.apply(context, args);
};
//
//
//
//
//
// attach the .compare method to Array's prototype to call it on any array - http://stackoverflow.com/a/14853974/56449
if (typeof Array.prototype.compare !== "function") {
Array.prototype.compare = function(array) {
// if the other array is a falsy value, return
if (!array) return false;
// compare lengths - can save a lot of time
if (this.length != array.length) return false;
for (var i = 0; i < this.length; i++) {
// Check if we have nested arrays
if (this[i] instanceof Array && array[i] instanceof Array) {
// recurse into the nested arrays
if (!this[i].compare(array[i])) return false;
} else if (this[i] != array[i]) {
// Warning - two different object instances will never be equal: {x:20} != {x:20}
return false;
}
}
return true;
};
}
// batch renaming keys
adrma.renameObjKeys = function(obj, fn) {
var result = {};
for (var i in obj) if (obj.hasOwnProperty(i)) result[fn(i)] = obj[i];
return result;
};
// polyfill location.origin
if (!window.location.origin) {
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
}
// takes ?key=value&key2=value and return json...
adrma.searchParamToJSON = function searchParamToJSON(search) {
search = search || location.search.substring(1);
return JSON.parse('{"' + decodeURI(search.replace(/&/g, "\",\"").replace(/=/g, "\":\"")) + '"}');
};
// calculates correct client time
adrma.getTimezoneStamp = function () {
var d = new Date();
return (d.getTime() - (d.getTimezoneOffset() * 60000));
};
//
//
// object size
if (typeof Object.prototype.size !== "function") {
Object.size = function(obj) {
var size = 0,
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
}
adrma.undupForm = function undupForm(form, options) {
// TODO: extend options for timeout, and disabled class
var defaults = {
className: "disabled",
timeout: 2000
};
options = $.extend(defaults, options);
if (form.hasClass(options.className)) return false;
form.addClass(options.className);
setTimeout(function() {
form.removeClass(options.className);
}, options.timeout);
return true;
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.initFunc.js' (Mode: Static) */
adrma.init = function() {
var prop;
adrma.init.initilized = true;
// app start time
adrma.appStarted = $.now();
for (prop in this.init.queue) {
adrma.init.processInit(prop);
// consider cleaning up..
//adrma.init.processed[prop] = prop;
//delete adrma.init.queue[prop]; //removed for lint
}
// calling window load explicitly (it simply didnt fire sometimes)
adrma.init.triggerLoad = function() {
if (!adrma.init.initilizedDeferred) {
//adrma.log("window.loadEvent explict");
adrma.init.processDeferredInit();
}
};
// setting the timeout
adrma.init.loadTimeout = window.setTimeout(function() {
adrma.init.triggerLoad();
}, 4000);
//todo: check why window load didnt fire sometimes.
// set up deffered init. (in case more cb's where bound in ready init)
$(window).load(function() {
adrma.init.processDeferredInit();
});
adrma.init.dfd.resolve("loaded");
};
// Added Dec 11 2012
adrma.init.dfd = $.Deferred();
// process the deffered onLoad inits
adrma.init.processDeferredInit = function() {
//adrma.log("window.loadEvent");
window.clearTimeout(adrma.init.loadTimeout);
adrma.init.initilizedDeferred = true;
for (var prop in adrma.init.deferredQueue) {
adrma.init.processInit(prop);
}
};
adrma.init.require = function(dependencies) {
if (!$.isArray(dependencies)) {
$.error("...adrma.init.require, wrong dependencies");
}
// split the array into the "test" and resource
// all dependencies start out at /sup/
// first check if got the dependency
// then build the array of needed
// TODO: Change, require name and resource logic...
var arr = $.map(dependencies, function(e, i) {
return adrma.getDescendantProp(e.name) ? true : $.getScript("/sup/js/" + e.resource, function() {});
});
return $.when.apply($, arr);
};
adrma.init.processInit = function processInit(init) {
/*
// when config is implimented
if (adrma.config[init] !== undefined && adrma.config[init] === false) {
return;
}*/
var adrmaInit = adrma.init,
callback = adrmaInit.queue[init] || adrma.init.deferredQueue[init],
currentInit,
prepearContext = function(callback) {
return {
cb: adrma.getDescendantProp(callback.cb),
context: callback.context,
args: callback.args
};
},
dfd;
if (callback.require && callback.require.length) {
dfd = adrma.init.require(callback.require);
} else {
dfd = $.Deferred();
dfd.resolve();
}
dfd.done(function processInitDfdDone() {
setTimeout(function() {
currentInit = prepearContext(callback);
currentInit.cb.apply(adrma.getDescendantProp(currentInit.context), [currentInit.args]);
callback.done = true;
}, callback.delay || 0);
});
};
adrma.init.queue = {};
adrma.init.processed = {};
adrma.init.deferredQueue = {};
adrma.init.anonymousCount = 0;
adrma.init.add = function(options) {
if (!options) {
return;
}
if ($.isFunction(options)) {
// add directly to queue
}
var stage = {
name: options.name ? options.name : "anonymous-" + (adrma.init.anonymousCount++),
cb: options.cb,
context: options.context ? options.context : adrma,
args: options.args,
require: options.require,
delay: options.delay
};
if (!options.defer) {
this.queue[stage.name] = stage;
} else {
this.deferredQueue[stage.name] = stage;
}
// if calling init after init has run...
if (adrma.init.initilized) {
// send to initilizer
if (!options.defer || adrma.init.initilizedDeferred) {
adrma.init.processInit(stage.name);
} else {
//adrma.log("is deferred and reached else");
//adrma.log(stage.name);
// it will run like a mentch in the deferred queue
//adrma.init.processInit(stage.name);
//adrma.log(stage.name,"added after init started but before it finished")
}
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.init.js' (Mode: Static) */
$(document).ready(function(){
adrma.init();
}) ;
/* Comment Generated by Combres - Resource '/sup/js/adrma.ajax.js' (Mode: Static) */
$.ajaxSetup({
cache: true
}); // NEWWEB-8304
// all xhr, script Injection and JSON
adrma.fetchData = function(options) {
// convert do promise
// manage cache with promise.
var promise, data, self = this.fetchData,
cacheDfd;
adrma.fetchData.defualts = { // like ajaxSetup
returnPromise: false,
beforeSend: function() {},
data: "",
dataType: "",
type: "GET",
cacheURL: false,
timeout: 50000,
cacheResponse: false,
resolveWithCache: true,
ifCachedStillCallback: false,
passParams: true,
error: function(err) {
if (options.returnPromise) {}
adrma.log(err);
},
contentType: ""
};
options = $.extend(this.fetchData.defualts, options);
if (options.contentType === "json") {
options.contentType = "application/json; charset=utf-8";
}
if (options.type.toLowerCase() === "post" && !options.preserveContentType) {
// LP-7934 ASP MS stupidity
// LP-10253 - fix the adorama LoadBalancer issue..
options.contentType = "application/x-www-form-urlencoded; charset=UTF-8";
}
// LP-7506 suggested change by @igor - LP-7506
options.fullURL = options.url + (options.data ? $.param(options.data) : '');
// since we put the cacheResponse as true, make sure not to double cache...
if (options.cacheURL) {
options.cacheResponse = false;
}
cacheDfd = this.fetchData.cache.checkIfCached(options);
if (cacheDfd) {
return cacheDfd;
}
if (options.type !== "POST" && options.dataType === "script" || options.dataType === "JSON") {
var scriptData;
// TODO:
//need to figure out why "script" didnt get excuted and i needed to use $.getScript. march 19, maybe consider using evalScript in the sucsess.
// also, why JSON made problems (like with loadDispatcher) that i needed to change to "json" lowercase...
// if your requesting a script, then behave like $.getScript (see above comment...)
return $["get" + (options.dataType === "script" ? "Script" : "JSON")](options.url, function(data) {
adrma.noop = $.isFunction(options.callback) && options.callback(data);
});
}
// TODO: allow more configurations...
promise = $.ajax({
url: options.url,
beforeSend: options.beforeSend,
data: options.data,
type: options.type,
timeout: options.type,
dataType: options.dataType,
contentType: options.contentType,
success: function(response, statusText, jQxhr) {
self.cache.cacheResponse(response, this, jQxhr, options);
adrma.noop = $.isFunction(options.callback) && options.callback(response);
},
error: options.error
});
// TODO: return data
// if(options.returnPromise) {}
return promise;
};
// caching url's ajax responses..
adrma.fetchData.cache = {
checkIfCached: function(options) {
// check if url is chached
if (options.cacheURL && this.cachedURLs[options.fullURL]) {
return this.resolveWithCache("url", options);
}
// if the response is cached
if (options.cacheResponse && this.cachedResponses[options.fullURL]) {
return this.resolveWithCache("response", options);
}
// otherwise
return false;
},
resolveWithCache: function(data, options) {
if (data === "url") {
if (options.ifCachedStillCallback) {
adrma.noop = $.isFunction(options.callback) && options.callback();
}
return $.Deferred().resolve("cachedURL");
} else { // has chached response..
setTimeout(function() {
if (options.ifCachedStillCallback) {
adrma.noop = $.isFunction(options.callback) && options.callback(this.cache.cachedResponses[options.fullURL]); // dono why need to pass in the response..
}
}, 100);
return $.Deferred().resolve(this.cachedResponses[options.fullURL].response);
}
},
cacheResponse: function(response, xhr, jQxhr, options) {
if (options.cacheURL) {
this.add({
type: "url",
url: options.fullURL
});
}
if (options.cacheResponse) {
this.add({
type: "response",
url: options.fullURL,
response: response
});
}
},
add: function(options) {
if (options.type === "response") {
return this.cachedResponses[options.url] = {
response: options.response
};
} else {
this.cachedURLs[options.url] = {};
}
},
remove: function(options) {
if (options.response) {
return this.cachedResponses[options.url] = null;
}
// maybe delete...
this.cachedURLs[options.url] = false;
},
cachedURLs: {},
// contains the chached url's (used for the tabs)
cachedResponses: {} // contains the cached data. (will be used for fetched tooltips)
};;
/* Comment Generated by Combres - Resource '/sup/js/lib/microTemplating.js' (Mode: Static) */
// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function() {
var cache = {};
this.tmpl = function tmpl(str, data) {
// Figure out if we're getting a template, or if we need to
// load the template - and be sure to cache the result.
var fn = !/\W/.test(str) ? cache[str] = cache[str] || tmpl(document.getElementById(str).innerHTML) :
// Generate a reusable function that will serve as a template
// generator (and which will be cached).
new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" +
// Introduce the data as local variables using with(){}
"with(obj){p.push('" +
// Convert the template into pure JavaScript
str.replace(/[\r\t\n]/g, " ").replace(/'(?=[^%]*%>)/g, "\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g, "',$1,'").split("<%").join("');").split("%>").join("p.push('") + "');}return p.join('');");
// Provide some basic currying to the user
return data ? fn(data) : fn;
};
})();;
/* Comment Generated by Combres - Resource '/sup/js/adrma.template.js' (Mode: Static) */
//takes care of fetching the template...
adrma.template = {
get: function(template, options) {
var self = this,
dfd = $.Deferred(),
templateEle = document.getElementById(template);
if (templateEle) {
dfd.resolve();
} else {
self.fetch(template).done(function templateFetched() {
setTimeout(dfd.resolve, 1);
}).fail(dfd.reject);
}
return dfd;
},
fetch: function(template) {
return adrma.fetchData({
url: "/sup/views/" + template + ".html",
cacheResponse: true
}).done(function(data) {
$("body").append(data);
});
},
render: function(template, data) {
return tmpl(template, data);
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.session.js' (Mode: Static) */
// requests and store the session
// TODO: change the saving of data from adrma.pageInfo to adrma.sessionData
// Save to cookie (will be used in AJAX calls);
adrma.session = {
init: function(type) {
var self = this,
session;
if (type !== "new") {
session = adrma.storage.get("local", "session");
if (session) {
self.gotSession({
data: session
}, "stored");
return;
}
}
adrma.fetchData({
url: "/api/GetSession",
type: "POST",
data: {
referrer: document.referrer
},
dataType: "json"
}).done(self.gotSession);
},
getSession: $.Deferred(),
gotSession: function(data, stored) {
var session = adrma.session;
if (data.status !== "success") {
session.restartSession();
}
session.session = data.data;
session.getSession.resolve(session.session); //maybe resolve with data.data
if (stored === "stored") {
return;
}
session.storeSession(session.session);
$.publish("session/gotSession", session.session);
},
storeSession: function(session) {
return adrma.storage.set("local", "session", session);
},
clearStoredSession: function() {
adrma.storage["delete"]("local", "session");
},
attempts: 0,
maxAttempts: 4,
restartSession: function() {
//console.log("restartSession");
var self = this;
self.attempts++;
self.getSession = $.Deferred();
if (self.attempts >= self.maxAttempts) {
self.getSession.reject();
return;
}
self.init("new");
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.actionBind.js' (Mode: Static) */
//TODO: WIP - refactor, issues with multiple actions and actionTypes, and focusin https://gist.github.com/adardesign/4a19fd1c6b634dc7b6ca
adrma.actions = {
init: function() {
var self = this;
$(document).on("click submit change focusin focus blur", ".action", function(e) {
var jThis = $(this),
action = jThis.attr("data-action") || "",
actionType = jThis.attr("data-action-type") || "click",
preventDefault = (jThis.attr("data-prevent-default") === "false") ? false : true,
runAction = function(actionData) {
var action = (actionData.action) ? self[actionData.action] : "",
actionType = actionData.actionType;
if (actionType && eventType !== actionType) {
return;
}
if (action && $.isFunction(action)) {
action.apply(self, [e, jThis]);
}
if (preventDefault) {
e.preventDefault();
}
};
action = action.split(",");
actionType = actionType.split(",");
eventType = e.type;
if (jThis.hasClass("disable")) {
e.preventDefault();
return; //LP-10756 - LP-10896
}
if (eventType === "submit") {
// avoid double submitting..
// LP-10896
jThis.addClass("disable");
setTimeout(function removeDisableSubmit() {
jThis.removeClass("disable");
}, 300);
} else {
}
for (var i = 0, actionLength = action.length; i < actionLength; i++) {
runAction({
action: action[(actionLength > 1) ? i : 0],
actionType: actionType[i],
preventDefault: preventDefault // if prevent defualt, then do all..
});
}
});
},
add: function(actions) {
// for now only expects a obj
$.extend(this, actions);
},
remove: function(action) {
try {
delete this[action];
} catch (e) {}
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.query.js' (Mode: Static) */
(function() {
function traverse(o, func) {
for (var i in o) {
func.apply(this, [i, o[i]]);
if (typeof(o[i]) == "object") {
//going on step down in the object tree!!
traverse(o[i], func);
}
}
}
adrma.query = {
json: function(haystack, key, needle) {
if ($.isArray(haystack)) {
for (var prop in haystack) {
if (haystack.hasOwnProperty(prop)) {
if (haystack[prop][key] === needle) {
return [haystack[prop], prop]; // returns an array of 1) the obj, 2) the index
}
}
}
}
}
};
})();;
/* Comment Generated by Combres - Resource '/sup/js/adrma.cookie.js' (Mode: Static) */
window.adrma = adrma || {};
(function() {
var pluses = /\+/g;
function raw(s) {
return s;
}
function extend() {
// if($){$.extend();}
for (var i = 1; i < arguments.length; i++) {
for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key)) {
arguments[0][key] = arguments[i][key];
}
}
}
return arguments[0];
}
function decoded(s) {
return decodeURIComponent(s.replace(pluses, ' '));
}
function converted(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape
s = s.slice(1, - 1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
return config.json ? JSON.parse(s) : s;
} catch (er) {}
}
var config = adrma.cookie = function(key, value, options) {
if (value === null) { // https://github.com/carhartl/jquery-cookie/pull/189
adrma.removeCookie(key, options);
return;
}
// write
if (value !== undefined) {
options = extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires,
t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
value = config.json ? JSON.stringify(value) : String(value);
return (document.cookie = [config.raw ? key : encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join(''));
}
// read
var decode = config.raw ? raw : decoded;
var cookies = document.cookie.split('; ');
var result = key ? undefined : {};
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = decode(parts.shift());
var cookie = decode(parts.join('='));
if (key && key === name) {
result = converted(cookie);
break;
}
if (!key) {
result[name] = converted(cookie);
}
}
return result;
};
config.defaults = {};
adrma.removeCookie = function(key, options) {
if (adrma.cookie(key) !== undefined) {
// Must not alter options, thus extending a fresh object...
adrma.cookie(key, '', extend({}, options, {
expires: -1
}));
return true;
}
return false;
};
})();;
/* Comment Generated by Combres - Resource '/sup/js/adrma.storage.js' (Mode: Static) */
// TEMP messed up
// test (storePageVisit) before merging
adrma = window.adrma || {};
adrma.storage = {
supported: function() {
try {
return 'localStorage' in window && window['localStorage'] !== null;
} catch (e) {
return false;
}
},
toType: function(obj) {
return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
},
get: function(type, key, obj) {
if (!this.isSupported) {
return;
}
var item = window[type + "Storage"].getItem(key);
try {
item = JSON.parse(item);
} catch (e) {}
return item;
},
set: function(type, key, val) {
if (!this.isSupported) {
return;
}
var valType = this.toType(val);
if (/object|array/.test(valType)) {
val = JSON.stringify(val);
}
try {
window[type + "Storage"].setItem(key, val);
return true;
} catch (err) {
//Handle errors here
return false;
}
},
add: function(options) { // need to add sopport for string concat
if (!this.isSupported) {
return;
}
if (typeof options === "string") {
options = {
key: options,
value: arguments[1]
};
}
var defualts = {
type: "local",
key: "",
val: "",
propsAreObjs: false, // can be removed.. not checking anymore...
wrapperType: "array", // only tmp, to not break "pageVisitLog"
comparePropName: "",
limit: null,
addDirection: "push" // or unshift
};
options = $.extend({}, defualts, options);
var storageedKey = adrma.storage.get(options.type, options.key),
storedType = $.type(storageedKey),
valType = $.type(options.val),
handleArray = function handleArray() {
if (!storageedKey) {
//options.val = [options.val];
storageedKey = [];
}
// tmp fix for unknown switch to objects..
if ($.type(storageedKey) === "object") {
storageedKey = [storageedKey];
}
if (valType === "object") {
var matchedArray = $.grep(storageedKey, function(ele) {
return (options.val[options.comparePropName] === ele[options.comparePropName]);
});
if (matchedArray.length) {
return false;
}
} else {
isInArray = $.inArray(options.val, storageedKey);
if (isInArray !== -1) {
storageedKey.push(options.val);
}
}
if (options.limit && storageedKey.length >= options.limit) {
// just do the opposite of addDirection
storageedKey[options.addDirection === "push" ? "shift" : "pop"]();
}
storageedKey[options.addDirection](options.val);
options.val = storageedKey;
},
handleObj = function handleObj() {
//
storageedKey = storageedKey || {};
storageedKey = $.extend(storageedKey, options.val);
options.val = storageedKey;
},
handleString = function handleString() {
//
};
if (storageedKey) {
if (options.wrapperType === "array") {
handleArray();
} else {
switch (storedType) {
case "object":
handleObj();
break;
case "array":
handleArray();
break;
case "string":
handleString();
break;
}
}
} else {
if (options.wrapperType === "array") {
handleArray();
} else {
switch (valType) {
case "object":
handleObj();
break;
case "array":
handleArray();
break;
case "string":
handleString();
break;
}
}
}
// either way add/update
return adrma.storage.set(options.type, options.key, options.val, options.isObj);
},
remove: function(type, key, val) {
if (!this.isSupported) {
return;
}
var storageedKey = adrma.storage.get(type, key),
isInArray;
if (storageedKey) {
if ($.isArray(storageedKey)) {
// check if its already there.
//isInArray returns the index of the found result in the aaray.
isInArray = $.inArray(val, storageedKey);
adrma.noop = isInArray !== -1 && storageedKey.splice(isInArray, 1);
val = storageedKey;
//console.log(storageedKey);
adrma.storage.set(key, val);
}
}
// either way add/update
},
"delete": function(type, key) {
if (!this.isSupported) {
return;
}
window[type + "Storage"].removeItem(key);
},
sync: function(key, url, direction) {
// sync key, and optional direction...
//adrma.fetchData({});
},
compare: function(key, url) {},
getAll: function(type, format) {
if (!this.isSupported) {
return;
}
var storage = window[type + "Storage"];
if (format === "string") {
return JSON.stringify(storage);
}
return storage;
},
clearAll: function(type) {
if (!this.isSupported) {
return;
}
window[type + "Storage"].clear();
}
};
adrma.storage.isSupported = (function() { // since the supported() is already used, needed a new method..
return adrma.storage.supported();
})();;
/* Comment Generated by Combres - Resource '/sup/js/adrma.eventIntent.js' (Mode: Static) */
adrma.EventIntent = function() {
if (!this instanceof adrma.EventIntent) {
return new adrma.EventIntent();
}
return this;
};
adrma.EventIntent.prototype = {
init: function(options) {
var self = this;
$.extend(self, options);
self.ele = (typeof options.ele === "string") ? $(options.ele) : options.ele;
var eventNamespace = self.eventNamespace || "eventIntent",
isiPad = navigator.userAgent.match(/iPad/i) !== null,
offEvent = isiPad ? "touchend" : "mouseleave";
self.ele.on("mouseenter" + "." + eventNamespace + " mouseleave" + "." + eventNamespace, function(e) { // //ben-Nadel http://bit.ly/8HW7zw
var eType = e.type,
jThis = $(this),
inIntentTimeout = jThis.data("inIntentTimeout"), // optimize to have one call.
outIntentTimeout = jThis.data("outIntentTimeout");
if (eType === "mouseenter") {
/*if (self.intentActiveFn) {
self.intentActiveFn();
}*/
self.clearTimeout(inIntentTimeout, jThis, "in", e);
self.clearTimeout(outIntentTimeout, jThis, "out", e);
self.setTimeout(jThis, "in", e);
} else {
self.clearTimeout(inIntentTimeout, jThis, "in", e);
self.clearTimeout(outIntentTimeout, jThis, "out", e);
self.setTimeout(jThis, "out", e);
}
});
},
sensitivity: 250,
activeClass: "hover",
setTimeout: function(ele, dir, e) {
var self = this,
timeoutFn = function() { // test without params
self.onTimeout.apply(self, [ele, dir, e]);
},
delay = ele.attr('data-sensitivity-' + dir) ? ele.attr('data-sensitivity-' + dir) : this.sensitivity,
id = setTimeout(timeoutFn, delay);
ele.data(dir + "IntentTimeout", id);
if (dir === "out") {
this.intentActiveFn = timeoutFn;
}
},
clearTimeout: function(id, ele, dir) {
if (!id) {
return;
}
clearTimeout(id);
$.removeData(ele, dir + "IntentTimeout");
if (dir === "out") {
self.intentActiveFn = null;
}
},
onTimeout: function(ele, dir, e) {
if (dir === "in") {
ele.addClass(this.activeClass);
this.inIntentCallback(ele, e);
} else {
ele.removeClass(this.activeClass);
this.outIntentCallback(ele, e);
this.intentActiveFn = null;
}
},
intentActiveFn: null,
inIntentCallback: $.noop,
outIntentCallback: $.noop
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.popup.js' (Mode: Static) */
adrma.popup = {
init: function() {
var self = this;
$(document).on("click", ".popup", function(e) {
var jThis = $(this),
options = jThis.attr("data-popup-options");
if (jThis.closest(".popupContent").length) {
self.nested(jThis);
return false;
}
self.eleData = {
jThis: jThis,
href: jThis.attr("href"),
title: jThis.attr("title"),
popupClass: (jThis.attr("data-popup-class") || jThis.attr("rel")), // LP-10992 - support fallback use of rel
callback: jThis.attr("data-callback"),
callbackArgs: jThis.attr("data-callback-arguments") || "",
callbackContext: adrma.getDescendantProp(jThis.attr("data-callback-context")) || window,
cacheResponse: jThis.attr("data-cache-response") || true, // this might change..
options: options ? JSON.parse(options) : "",
pubId: jThis.attr("data-popup-pubId")
};
self.buildFrags();
return false;
});
adrma.actions.add({
"closePopup": function closePopup(e, jThis) {
self.triggerClose();
}
});
},
properties: {
popupPageFill: "popupPageFill",
popupBorder: "popupBorder",
popupContainer: "popupContainer",
popupExit: "popupExit",
popupHeader: "popupHeader",
popupContent: "popupContent",
nestedContainer: "nestedPopupContainer",
nestedTitle: "nestedPopupTitle",
nestedClose: "nestedPopupClose",
nestedContent: "nestedPopupContent"
},
buildFrags: function() {
var self = this;
if (this.cachedFrags) {
this.customize();
return;
}
this.popupPageFill = $("<div class='" + this.properties.popupPageFill + "'>").on("click", $.proxy(self.close, self));
this.popupBorder = $("<div/>");
this.popupContainer = $("<div/>").addClass(this.properties.popupContainer);
this.popupHeader = $("<h2/>").addClass(this.properties.popupHeader);
this.popupExit = $("<div/>").addClass(this.properties.popupExit);
this.popupContent = $("<div/>").addClass(this.properties.popupContent);
this.popupPageFill.append(this.popupBorder);
this.popupBorder.append(this.popupContainer);
this.popupBorder.append(this.popupExit);
this.popupContainer.append(this.popupHeader);
this.popupContainer.append(this.popupContent);
this.cachedFrags = true;
this.customize();
},
isImage: function(url) {
return (/(?:jpg|gif|png)/.test(url));
},
handleImage: function() {
var self = this;
return "<div class='imageWrapper'><img src='" + self.eleData.href + "'/></div>";
},
customize: function() {
this.popupPageFill.removeAttr("class").addClass(this.properties.popupPageFill + " " + (this.eleData.popupClass || ""));
this.popupBorder.removeAttr("class").addClass(this.properties.popupBorder);
this.popupHeader.text(this.eleData.title || "");
this.popupContent.removeClass("loaded");
this.addToPage();
this.fixPosition();
this.show();
},
addToPage: function() {
if ($("." + this.properties.popupPageFill).length) {
return;
}
$("body").append(this.popupPageFill);
},
fixPosition: function() {
var viewPortHeight = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
if (viewPortHeight < 650) {
this.popupBorder.addClass("viewPortLessThen650");
return;
}
if (viewPortHeight < 800) {
this.popupBorder.addClass("viewPortLessThen800");
return;
}
},
show: function() {
var self = this;
self.popupPageFill.fadeIn(300, function() {
self.load();
});
$(document).on("keydown.adrmaPop", function(e) {
adrma.noop = ((e.keyCode ? e.keyCode : e.which) === 27) && self.close(e);
});
if (adrma.getScrollWidth) {
$("body").addClass("overflow-hidden").css("paddingRight", adrma.getScrollWidth());
}
},
load: function(nested) {
var self = this,
loadDfd = $.Deferred(),
staticHtml = self.eleData.jThis.attr("data-html");
if (staticHtml) {
loadDfd.resolve(staticHtml);
} else if (self.isImage(self.eleData.href)) {
// todo handle nested image
loadDfd.resolve(self.handleImage());
} else {
var url = !nested ? this.eleData.href : this.nested.eleData.href;
if (!url) {
loadDfd.reject();
}
adrma.fetchData({
url: url,
cacheResponse: this.eleData.cacheResponse
}).done(function(html) {
loadDfd.resolve(html);
});
}
loadDfd.done(function(html) {
if (nested) {
self.nested.content.html(html).addClass("loaded");
self.nestedCallback(self.nested.eleData);
return false;
}
self.popupContent.html(html).addClass("loaded");
self.callback(self.eleData);
if (self.eleData.pubId) {
$.publish(self.eleData.pubId + "/popupLoded");
}
}).fail(function() {
self.popupContent.html("<div class='errorLoadingPopup'> Sorry! The content of this popup failed to load</div>").addClass("loaded");
if (self.eleData.pubId) {
$.publish(self.eleData.pubId + "/popupFailed");
}
});
},
close: function(e) {
var target = $(e.target),
self = this,
options = this.eleData.options
// check if disable close
if (options && options.disableClose && !target.hasClass("force-enable-close")) {
return;
}
if (self.hasNested) {
if (e.type !== "keydown" && target.closest("." + this.properties.nestedContainer).length && !target.is("." + this.properties.nestedClose)) {
return;
}
self.nested.container.fadeOut(300, function() {
self.nested.container.remove();
self.hasNested = false;
self.closeNested();
});
if (!target.is("." + this.properties.popupExit)) {
return;
}
}
if (e.type !== "keydown" && target.closest("." + this.properties.popupBorder).length && !target.is("." + this.properties.popupExit)) {
return;
}
this.popupPageFill.fadeOut(300, function() {
self.popupContent.empty();
$(document).off("keydown.adrmaPop");
$("body").removeClass("overflow-hidden").css("paddingRight", 0);
self.hasNested = false;
this.eleData = null;
});
},
callback: function(eleData) {
var self = this;
setTimeout(function() {
var callback = eleData.callback,
callbackFn;
if (!callback) {
return;
}
// determines which callback is called.. and if ommitted init... (becuase we didnt have yet adrma.getDescendantProp to set a string and then drill)
var stringPath = adrma.getDescendantProp(callback);
callback = stringPath ? stringPath : callback;
callbackFn = $.isFunction(callback) ? callback : adrma[callback];
callbackFn = $.isFunction(callbackFn) ? callbackFn : callbackFn.init;
adrma.noop = $.isFunction(callbackFn) && callbackFn.apply(eleData.callbackContext, [eleData.callbackArgs]);
}, 1);
},
logToAnalytics: function(eventType) {},
hasNested: false,
nested: function(ele) {
this.hasNested = true;
this.nested.eleData = {
jThis: ele,
href: ele.attr("href"),
title: ele.attr("title"),
popupClass: ele.attr("data-popup-class"), // I see no need to support "rel" fallback - LP-10992
callback: ele.attr("data-callback"),
callbackArgs: ele.attr("data-callback-arguments") || "",
options: ele.attr("data-popup-options")
};
this.buildNested();
},
buildNested: function() {
var self = this;
self.nested.container = $("<div/>").addClass(self.properties.nestedContainer + " " + self.nested.eleData.popupClass);
self.nested.content = $("<div/>").addClass(self.properties.nestedContent).css({
maxHeight: $("." + self.properties.popupContent).css("maxHeight"),
minHeight: $("." + self.properties.popupContent).css("height")
});
self.nested.close = $("<div/>").addClass(self.properties.nestedClose + " button button-gray").text("Back").on("click", $.proxy(self.close, self));
self.nested.title = $("<h2/>").addClass(self.properties.nestedTitle).html(self.nested.eleData.title);
self.nested.title.append(self.nested.close);
self.nested.container.append(self.nested.title);
self.nested.container.append(self.nested.content);
self.popupContent.after(self.nested.container);
self.nested.container.fadeIn(100);
self.load("nested");
},
nestedCallback: function() {
var self = this;
setTimeout(function() {
var callback = adrma[self.nested.eleData.callback] ? adrma[self.nested.eleData.callback].init : "";
adrma.noop = $.isFunction(callback) && callback.apply(self.nested.eleData.callbackContext, [self.nested.eleData.callbackArgs]);
}, 1); // really temporery......
},
closeNested: function() {},
trigger: function triggerPop(config) {
var href = config.href ? "href='" + config.href + "' " : "",
content = config.html ? "data-html='" + config.html + "'" : "",
popupClass = config.popupClass ? "data-popup-class='" + config.popupClass + "' " : "",
dataCallback = config.callback ? "data-callback='" + config.callback + "' " : "",
callbackArguments = config.callbackArguments ? "data-callback-arguments='" + config.callbackArguments + "' " : "",
callbackContext = config.callbackContext ? "data-callback-context='" + config.callbackContext + "' " : "",
title = config.title ? "title='" + config.title + "' " : "",
triggerEleClass = "class='popup' ",
options = config.options ? "data-popup-options='" + JSON.stringify(config.options) + "'" : "",
pubId = config.pubId ? "data-popup-pubId='" + config.pubId + "'" : "",
attr = triggerEleClass + href + popupClass + dataCallback + callbackArguments + callbackContext + title + content + options + pubId;
$("<a " + attr + "> </a>").appendTo("body").trigger("click").remove(); // :( best way for now to trigger popup on the fly
},
triggerClose: function triggerClose() {
$(".popupPageFill").find(".popupExit").trigger("click");
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.scrollWidth.js' (Mode: Static) */
// simply get the OS scrollbar width, credits:http://davidwalsh.name/detect-scrollbar-width
adrma.getScrollWidth = function () {
var getScrollWidth = adrma.getScrollWidth;
if(getScrollWidth.width){
return getScrollWidth.width;
}
// Create the measurement node
var scrollDiv = document.createElement("div");
scrollDiv.className = "getScrollWidth";
document.body.appendChild(scrollDiv);
// Get the scrollbar width
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
// Delete the DIV
document.body.removeChild(scrollDiv);
adrma.getScrollWidth.width = scrollbarWidth;
return scrollbarWidth;
};;
/* Comment Generated by Combres - Resource '/sup/js/plugins/jQuery.pubSub.js' (Mode: Static) */
/* jQuery Tiny Pub/Sub - v0.7 - 10/27/2011
* http://benalman.com/
* Copyright (c) 2011 "Cowboy" Ben Alman; Licensed MIT, GPL */
(function($) {
var o = $({});
$.subscribe = function() {
o.on.apply(o, arguments);
};
$.unsubscribe = function() {
o.off.apply(o, arguments);
};
$.publish = function() {
o.trigger.apply(o, arguments);
};
}(jQuery));;
/* Comment Generated by Combres - Resource '/sup/js/plugins/jQuery.hashChange.js' (Mode: Static) */
//Taken form a pul request https://github.com/fujiy/jquery-hashchange/commit/ca0f501ed0045b367e2674d5e2a65b68a0cfdd72
/*!
* jQuery hashchange event - v1.3 - 7/21/2010
* http://benalman.com/projects/jquery-hashchange-plugin/
*
* Copyright (c) 2010 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
// Script: jQuery hashchange event
//
// *Version: 1.3, Last updated: 7/21/2010*
//
// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
// GitHub - http://github.com/cowboy/jquery-hashchange/
// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
//
// About: License
//
// Copyright (c) 2010 "Cowboy" Ben Alman,
// Dual licensed under the MIT and GPL licenses.
// http://benalman.com/about/license/
//
// About: Examples
//
// These working examples, complete with fully commented code, illustrate a few
// ways in which this plugin can be used.
//
// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
//
// About: Support and Testing
//
// Information about what version or versions of jQuery this plugin has been
// tested with, what browsers it has been tested in, and where the unit tests
// reside (so you can test it yourself).
//
// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/
//
// About: Known issues
//
// While this jQuery hashchange event implementation is quite stable and
// robust, there are a few unfortunate browser bugs surrounding expected
// hashchange event-based behaviors, independent of any JavaScript
// window.onhashchange abstraction. See the following examples for more
// information:
//
// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
//
// Also note that should a browser natively support the window.onhashchange
// event, but not report that it does, the fallback polling loop will be used.
//
// About: Release History
//
// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
// "removable" for mobile-only development. Added IE6/7 document.title
// support. Attempted to make Iframe as hidden as possible by using
// techniques from http://www.paciellogroup.com/blog/?p=604. Added
// support for the "shortcut" format $(window).hashchange( fn ) and
// $(window).hashchange() like jQuery provides for built-in events.
// Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
// lowered its default value to 50. Added <jQuery.fn.hashchange.domain>
// and <jQuery.fn.hashchange.src> properties plus document-domain.html
// file to address access denied issues when setting document.domain in
// IE6/7.
// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin
// from a page on another domain would cause an error in Safari 4. Also,
// IE6/7 Iframe is now inserted after the body (this actually works),
// which prevents the page from scrolling when the event is first bound.
// Event can also now be bound before DOM ready, but it won't be usable
// before then in IE6/7.
// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
// where browser version is incorrectly reported as 8.0, despite
// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
// window.onhashchange functionality into a separate plugin for users
// who want just the basic event & back button support, without all the
// extra awesomeness that BBQ provides. This plugin will be included as
// part of jQuery BBQ, but also be available separately.
(function($, window, undefined) {
'$:nomunge'; // Used by YUI compressor.
// Reused string.
var str_hashchange = 'hashchange',
// Method / object references.
doc = document,
fake_onhashchange,
special = $.event.special,
// Does the browser support window.onhashchange? Note that IE8 running in
// IE7 compatibility mode reports true for 'onhashchange' in window, even
// though the event isn't supported, so also test document.documentMode.
doc_mode = doc.documentMode,
supports_onhashchange = 'on' + str_hashchange in window && (doc_mode === undefined || doc_mode > 7);
// Get location.hash (or what you'd expect location.hash to be) sans any
// leading #. Thanks for making this necessary, Firefox!
function get_fragment(url) {
url = url || location.href;
return '#' + url.replace(/^[^#]*#?(.*)$/, '$1');
};
// Method: jQuery.fn.hashchange
//
// Bind a handler to the window.onhashchange event or trigger all bound
// window.onhashchange event handlers. This behavior is consistent with
// jQuery's built-in event handlers.
//
// Usage:
//
// > jQuery(window).hashchange( [ handler ] );
//
// Arguments:
//
// handler - (Function) Optional handler to be bound to the hashchange
// event. This is a "shortcut" for the more verbose form:
// jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
// all bound window.onhashchange event handlers will be triggered. This
// is a shortcut for the more verbose
// jQuery(window).trigger( 'hashchange' ). These forms are described in
// the <hashchange event> section.
//
// Returns:
//
// (jQuery) The initial jQuery collection of elements.
// Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
// $(elem).hashchange() for triggering, like jQuery does for built-in events.
$.fn[str_hashchange] = function(fn) {
return fn ? this.bind(str_hashchange, fn) : this.trigger(str_hashchange);
};
// Property: jQuery.fn.hashchange.delay
//
// The numeric interval (in milliseconds) at which the <hashchange event>
// polling loop executes. Defaults to 50.
// Property: jQuery.fn.hashchange.domain
//
// If you're setting document.domain in your JavaScript, and you want hash
// history to work in IE6/7, not only must this property be set, but you must
// also set document.domain BEFORE jQuery is loaded into the page. This
// property is only applicable if you are supporting IE6/7 (or IE8 operating
// in "IE7 compatibility" mode).
//
// In addition, the <jQuery.fn.hashchange.src> property must be set to the
// path of the included "document-domain.html" file, which can be renamed or
// modified if necessary (note that the document.domain specified must be the
// same in both your main JavaScript as well as in this file).
//
// Usage:
//
// jQuery.fn.hashchange.domain = document.domain;
// Property: jQuery.fn.hashchange.src
//
// If, for some reason, you need to specify an Iframe src file (for example,
// when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
// do so using this property. Note that when using this property, history
// won't be recorded in IE6/7 until the Iframe src file loads. This property
// is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
// compatibility" mode).
//
// Usage:
//
// jQuery.fn.hashchange.src = 'path/to/file.html';
$.fn[str_hashchange].delay = 50;
/*
$.fn[ str_hashchange ].domain = null;
$.fn[ str_hashchange ].src = null;
*/
// Event: hashchange event
//
// Fired when location.hash changes. In browsers that support it, the native
// HTML5 window.onhashchange event is used, otherwise a polling loop is
// initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
// see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
// compatibility" mode), a hidden Iframe is created to allow the back button
// and hash-based history to work.
//
// Usage as described in <jQuery.fn.hashchange>:
//
// > // Bind an event handler.
// > jQuery(window).hashchange( function(e) {
// > var hash = location.hash;
// > ...
// > });
// >
// > // Manually trigger the event handler.
// > jQuery(window).hashchange();
//
// A more verbose usage that allows for event namespacing:
//
// > // Bind an event handler.
// > jQuery(window).bind( 'hashchange', function(e) {
// > var hash = location.hash;
// > ...
// > });
// >
// > // Manually trigger the event handler.
// > jQuery(window).trigger( 'hashchange' );
//
// Additional Notes:
//
// * The polling loop and Iframe are not created until at least one handler
// is actually bound to the 'hashchange' event.
// * If you need the bound handler(s) to execute immediately, in cases where
// a location.hash exists on page load, via bookmark or page refresh for
// example, use jQuery(window).hashchange() or the more verbose
// jQuery(window).trigger( 'hashchange' ).
// * The event can be bound before DOM ready, but since it won't be usable
// before then in IE6/7 (due to the necessary Iframe), recommended usage is
// to bind it inside a DOM ready handler.
// Override existing $.event.special.hashchange methods (allowing this plugin
// to be defined after jQuery BBQ in BBQ's source code).
special[str_hashchange] = $.extend(special[str_hashchange], {
// Called only when the first 'hashchange' event is bound to window.
setup: function() {
// If window.onhashchange is supported natively, there's nothing to do..
if (supports_onhashchange) {
return false;
}
// Otherwise, we need to create our own. And we don't want to call this
// until the user binds to the event, just in case they never do, since it
// will create a polling loop and possibly even a hidden Iframe.
$(fake_onhashchange.start);
},
// Called only when the last 'hashchange' event is unbound from window.
teardown: function() {
// If window.onhashchange is supported natively, there's nothing to do..
if (supports_onhashchange) {
return false;
}
// Otherwise, we need to stop ours (if possible).
$(fake_onhashchange.stop);
}
});
// fake_onhashchange does all the work of triggering the window.onhashchange
// event for browsers that don't natively support it, including creating a
// polling loop to watch for hash changes and in IE 6/7 creating a hidden
// Iframe to enable back and forward.
fake_onhashchange = (function() {
var self = {},
timeout_id,
// Remember the initial hash so it doesn't get triggered immediately.
last_hash = get_fragment(),
fn_retval = function(val) {
return val;
},
history_set = fn_retval,
history_get = fn_retval;
// Start the polling loop.
self.start = function() {
timeout_id || poll();
};
// Stop the polling loop.
self.stop = function() {
timeout_id && clearTimeout(timeout_id);
timeout_id = undefined;
};
// This polling loop checks every $.fn.hashchange.delay milliseconds to see
// if location.hash has changed, and triggers the 'hashchange' event on
// window when necessary.
function poll() {
var hash = get_fragment(),
history_hash = history_get(last_hash);
if (hash !== last_hash) {
history_set(last_hash = hash, history_hash);
$(window).trigger(str_hashchange);
} else if (history_hash !== last_hash) {
location.href = location.href.replace(/#.*/, '') + history_hash;
}
timeout_id = setTimeout(poll, $.fn[str_hashchange].delay);
};
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
(navigator.appName === 'Microsoft Internet Explorer') && !supports_onhashchange && (function() {
// Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
// when running in "IE7 compatibility" mode.
var iframe,
iframe_src;
// When the event is bound and polling starts in IE 6/7, create a hidden
// Iframe for history handling.
self.start = function() {
if (!iframe) {
iframe_src = $.fn[str_hashchange].src;
iframe_src = iframe_src && iframe_src + get_fragment();
// Create hidden Iframe. Attempt to make Iframe as hidden as possible
// by using techniques from http://www.paciellogroup.com/blog/?p=604.
iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
// When Iframe has completely loaded, initialize the history and
// start polling.
.one('load', function() {
iframe_src || history_set(get_fragment());
poll();
})
// Load Iframe src if specified, otherwise nothing.
.attr('src', iframe_src || 'javascript:0')
// Append Iframe after the end of the body to prevent unnecessary
// initial page scrolling (yes, this works).
.insertAfter('body')[0].contentWindow;
// Whenever `document.title` changes, update the Iframe's title to
// prettify the back/next history menu entries. Since IE sometimes
// errors with "Unspecified error" the very first time this is set
// (yes, very useful) wrap this with a try/catch block.
doc.onpropertychange = function() {
try {
if (event.propertyName === 'title') {
iframe.document.title = doc.title;
}
} catch (e) {}
};
}
};
// Override the "stop" method since an IE6/7 Iframe was created. Even
// if there are no longer any bound event handlers, the polling loop
// is still necessary for back/next to work at all!
self.stop = fn_retval;
// Get history by looking at the hidden Iframe's location.hash.
history_get = function() {
return get_fragment(iframe.location.href);
};
// Set a new history item by opening and then closing the Iframe
// document, *then* setting its location.hash. If document.domain has
// been set, update that as well.
history_set = function(hash, history_hash) {
var iframe_doc = iframe.document,
domain = $.fn[str_hashchange].domain;
if (hash !== history_hash) {
// Update Iframe with any initial `document.title` that might be set.
iframe_doc.title = doc.title;
// Opening the Iframe's document after it has been closed is what
// actually adds a history entry.
iframe_doc.open();
// Set document.domain for the Iframe document as well, if necessary.
domain && iframe_doc.write('<script>document.domain="' + domain + '"</script>');
iframe_doc.close();
// Update the Iframe's hash, for great justice.
iframe.location.hash = hash;
}
};
})();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
return self;
})();
})(jQuery, this);;
/* Comment Generated by Combres - Resource '/sup/js/adrma.router.js' (Mode: Static) */
// Last change - Dec 20 2012
// should extend basic router (popups... campaignes)
adrma.router = {
init: function(options) {
if (adrma.router.initialized) {
//adrma.log("attempting to init router after its already init'ed");
return;
}
this.initialized = true;
var self = this,
hash = adrma.router.cleanHash(),
defaultRoute, alwaysFire;
if (options && options.settings) {
this.settings = $.extend(this.settings, options.settings);
}
if (this.settings.silentRoutes) {
$(document).on("click", "a", function(e) {
var jThis = $(this);
if (!self.settings.silentRoutes || jThis.attr("data-hashRoute") === "false") { // if the routes.settings where changed later...
return;
}
var href = jThis.attr("href") || "",
isHash = href.indexOf("#") === 0 ? true : false;
if (isHash && self.isRoute(self.cleanHash(href), "split")) {
adrma.router.triggerRoute(adrma.router.cleanHash(href));
e.preventDefault();
//return false;
}
if (route === "noop") return false;
});
}
if (options && options.defaultRoute) {
defaultRoute = options.defaultRoute,
alwaysFire = options.alwaysFire || false;
}
if (hash === "") {
// if a defulat parameter was passed, check if it is a route function and call it. and alwaysFire is false;
}
var route = defaultRoute && this.triggerRoute(defaultRoute);
$(window).hashchange(this.onHashChange).trigger("hashchange");
},
settings: {
silentRoutes: true
},
changeHash: function(e, hash) {
location.hash = hash;
return false;
},
cleanUrl: function(url) {
if (url) {
return url.toString().replace(/\#/, "");
}
return location.origin + location.pathname; // might require more cleaning...
},
cleanHash: function(link) {
if (link) {
return link.toString().replace(/\#/, "");
}
return location.hash.toString().replace(/\#/, "");
},
splitRoute: function(route) {
return route.split("/");
},
hasSubRoute: function() {
return !!adrma.router.currentSubRoute;
},
routes: {
// object that contains the routes
},
isRoute: function(route, split) {
if (split) {
route = this.splitRoute(route)[0]; // check for fisrt part of route..
}
route = route.toLowerCase();
return (route in this.routes);
},
add: function(route, overwrite) {
var self = adrma.router;
if (route in self.routes && !overwrite) {
return;
}
route.name = route.name.toLowerCase();
self.routes[route.name] = route;
},
remove: function(route) {
if (typeof route === "object") {
route = route.name;
}
route = route.toLowerCase();
route = adrma.router.routes[route];
if (route) {
// maybe = delete route ?? good JS question.. no time to figure out
delete adrma.router.routes[route.name];
}
},
addRoute: function(route, overwrite) {
this.add(route, overwrite);
//backwards compatibility..
},
removeRoute: function(route, overwrite) {
this.remove(route, overwrite);
//backwards compatibility..
},
currentRoute: "default",
currentSubRoute: null,
triggerRoute: function(route) {
//triggers route without visable hash
// set currentRoute
// unify isRoute()
if (!route) {
return;
}
if (route === "noop") return;
route = route.toLowerCase();
var routeArray = adrma.router.splitRoute(route),
routeLength = routeArray.length,
routeCB, isAction = function(route) {
return route.indexOf("\\?") === -1 ? false : true;
},
isRoute = adrma.router.isRoute(routeArray[0]);
// if route is already active..
if (isRoute && adrma.router.currentRoute === adrma.router.routes[routeArray[0]].name) {
// maybe always get the actual object to begin with (rather then just the string) so its cached in the begining and always reffreing to this..
//TODO: need to civer split routes...
if (!routeLength || adrma.router.currentSubRoute === routeArray[1]) {
if (!adrma.router.routes[routeArray[0]].alwaysFire) {
return "isActiveRoute";
}
}
}
adrma.router.currentRoute = route;
adrma.router.currentSubRoute = null;
if (routeArray[0] === "") { // dono why needed
return false;
}
if (routeLength === 1) {
routeCB = isRoute && adrma.router.routes[routeArray[0]].callback;
adrma.noop = $.isFunction(routeCB) && routeCB();
return;
} else {
//if the route is longer then 1.
if (routeLength === 2) {
// check if there such a route that includes a /
if (adrma.router.isRoute(route)) {
// handle explicit long route
routeCB = adrma.router.routes[route].callback;
adrma.noop = $.isFunction(routeCB) && routeCB();
return; //for now
}
// check if the first is a route at all..
if (!isRoute) {
return;
}
adrma.router.currentRoute = routeArray[0];
adrma.router.currentSubRoute = routeArray[1];
routeCB = adrma.router.routes[routeArray[0]].callback;
adrma.noop = $.isFunction(routeCB) && routeCB(routeArray[1]);
} else {
// second route is a action.
}
}
},
cleanUp: function() {
// if cleanUp callback passed in route obj
},
scrollToSubRoute: function() {
adrma.scrollTo($("#" + adrma.router.currentSubRoute), - 20);
},
scrollToHash: function(e, options) {
var jThis = $(e.target),
href = jThis.attr("href"),
cleanHref = adrma.router.cleanHash(href),
target = $("#" + cleanHref);
target.removeAttr("id");
//location.hash = cleanHref;
adrma.scrollTo(target, - 20, 200, null, function() {
target.attr("id", cleanHref);
});
// maybe check if its not a route..
},
// disable router,
disable: function(timeout) {
var self = this;
self.disabled = true;
var timer;
if (timeout) {
timer = setTimeout(function() {
self.disabled = false;
}, timeout);
}
},
// todo: change to "onRouteChange" and change onHashChange to trigger
onHashChange: function(e) {
if (adrma.router.disabled) {
return;
}
var route = adrma.router.cleanHash();
if (!route) {
return;
}
$.publish("router/hashChange", [e, route]);
adrma.router.triggerRoute(route);
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.invisibleParams.js' (Mode: Static) */
adrma.invisibleParams = {
get: function() {
return adrma.cookie("invisibleParams");
},
set: function(newVal) {
adrma.cookie("invisibleParams", newVal);
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.getAsyncData.js' (Mode: Static) */
// require(adrma);
// require(adrma.ajax);
adrma.getAsyncData = {
init: function() {
this.get();
},
getData: $.Deferred(),
get: function() {
var self = this,
dfd = $.Deferred(),
pageInfo = adrma.pageInfo,
pageType = pageInfo.pageType,
productVersion = pageInfo.productVersion,
data = {
pageType: pageType,
clientTimeStamp: pageInfo.timestamp
},
settings = adrma.storage.get("local", "settings");
if (pageType === "productPage") { // LP-8785
data.sku = pageInfo.id;
}
// LP-8785 - Show Actual Shipping Charge
// TODO: Instead of accessing the storage often, rather ask for it once and store in memory and keep it synced with storage if changed..
// perhaps even register this retrieving as a a common init.. (??)
if (settings && (settings.country || settings.zip)) {
data.shipToCountry = settings.country;
data.shipToZip = settings.zip;
}
adrma.fetchData({
url: "/api/GetAsyncData",
type: "POST",
data: data,
dataType: "json"
}).done(function(response) {
$.publish("gotAsyncData", response);
if (response.status === "success") {
data = response.data;
} else {
// handle error
// report error and go on at least to turn on productConfig
adrma.iterateProducts(null, ["configure"]);
self.getData.reject(response);
return;
}
if (data.referrerPhoneNumber) { // LP-7592
//TODO: check if phone in geberal is diffrent from the original
// delete toll free and update
$(".tel-tollfree").remove();
$(".tel-local").html(data.referrerPhoneNumber);
}
// overwirte site settings..
var siteSettings = data.siteSettings;
if (siteSettings) {
adrma.siteSettings = siteSettings;
}
var pageInfo = adrma.pageInfo,
actions = [],
repaintNeeded = false;
if (!adrma.productData) {
self.getData.resolve(data);
return; // is not a page containing products
}
if (pageInfo.pageGroup === "product" && (data.priceMode !== pageInfo.priceMode) || productVersion !== data.productVersion) {
dfd = adrma.getProductData(Object.keys(adrma.productData).join(","), adrma.invisibleParams.get()).done(function() {
dfd.resolve();
});
repaintNeeded = true;
actions.push("repaint");
pageInfo.priceMode = data.priceMode;
} else {
dfd.resolve();
}
dfd.done(function() {
//need to repaint prices..
actions.push("configure");
if (!adrma.iterateProducts) return; // if the adrma.iterateProducts file isn't present , just dont repaint..
adrma.iterateProducts(null, actions).done(function() {
data.repaintNeeded = repaintNeeded;
self.getData.resolve(data);
});
});
});
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.commonInit.js' (Mode: Static) */
// TODO: consider unwarpping the init.add for each task that runs..
/*#LP-6959
adrma.init.add({
name: "siteSettings",
cb: adrma.siteSettings.init,
context: adrma.siteSettings
});
*/
adrma.init.add({
name: "setTimestamp",
cb: function() {
adrma.pageInfo.timestamp = adrma.getTimezoneStamp();
}
});
adrma.init.add({
name: "storageManager",
cb: function() {
var storedTimestamp = adrma.storage.get("local", "storeTimestamp"),
isHttps = location.protocol === "https:",
timestampIsStored = storedTimestamp || false,
appTimestamp = adrma.pageInfo.timestamp,
invalidateStorageCookie = adrma.cookie("invalidateStorage"),
expireTimeout = 300000, // 5 minutes
isExpired = (function () {
if(!timestampIsStored) return false;
return (storedTimestamp + expireTimeout) < appTimestamp;
})();
//
if (isHttps) {
// LP-11222
adrma.cookie("invalidateStorage", 1);
return;
// no need to continue..
}
if (isExpired || invalidateStorageCookie) {
adrma.storage["delete"]("local", "miniCart");
adrma.storage["delete"]("local", "session");
adrma.removeCookie("invalidateStorage");
adrma.storage.set("local", "storeTimestamp", appTimestamp);
}
if (!timestampIsStored) {
adrma.storage.set("local", "storeTimestamp", appTimestamp);
}
}
});
adrma.init.add({
name: "actionBind",
cb: adrma.actions.init,
context: adrma.actions
});
adrma.init.add({
name: "session",
cb: adrma.session.init,
context: adrma.session
});
adrma.init.add({
name: "popups",
cb: "adrma.popup.init",
context: adrma.popup,
require: [{
name: "adrma.popup",
resource: "adrma.popup.js"
}]
});
adrma.init.add({
name: "router",
cb: adrma.router.init,
context: adrma.router
});
adrma.init.add({
name: "asyncData",
cb: adrma.getAsyncData.init,
context: adrma.getAsyncData
});
adrma.init.add({
name: "hoverTip",
cb: function() {
$(".hoverInfo").hoverTip();
},
defer: true
});
adrma.init.add({
name: "navTabData",
cb: function() {
adrma.navTabData.init();
},
defer: true,
delay: 1500
});
adrma.init.add({
name: "evaluateScriptStrings",
cb: function() {
adrma.scriptStrings();
},
defered: true
});;
/* Comment Generated by Combres - Resource '/sup/js/adrma.positionPortals.js' (Mode: Static) */
// scrollPosition..
// Depends on jQuery.throttle.js
//
//
// TODO: allow scroll ele scope (and init on that ele);
// TODO: Update scroll position calculator if sticky header
adrma.positionPortals = {
defualts: {
throttle: true
},
positions: {},
truthyNoop: function() {
return true;
},
stringMath: function(s) {
var total = 0,
s = s.match(/[+\-]*(\.\d+|\d+(\.\d+)?)/g) || [];
while (s.length) {
total += parseFloat(s.shift());
}
return total;
},
init: function(options) {
// TODO: allow config on ele.. not only window..
var self = this;
self.opts = $.extend({}, self.defualts, options);
var ele = $(window);
self.scrollTop = ele.scrollTop();
if (self.opts.throttle) {
ele.on("scroll", $.throttle(250, function(e) {
self.onScroll.call(self, e);
}));
} else {
requestAnimFrame(function() {
ele.on("scroll", function(e) {
self.onScroll.call(self, e);
});
});
}
//ele.trigger("scroll");
},
add: function(breakpoint) {
// TODO: check for proper properties
// Allow multiple values as breakpoints...
// maybe allow to use the same condition fn for both reach and unreach
var self = this,
targetEle = $(breakpoint.targetEle),
activeClass = breakpoint.activeClass,
breakpointEle,
offset = breakpoint.offset ? breakpoint.offset : "0",
onReachFn = breakpoint.onReach,
unReachFn = breakpoint.unReach,
scrollDirection = breakpoint.scrollDirection,
breakpointVal = (function() {
var breakpointVal = breakpoint.breakpoint;
if (isNaN(breakpointVal) && !breakpoint.reCalc) {
breakpointEle = $(breakpointVal);
if (!breakpointEle.length) {
return;
}
breakpointVal = breakpointEle.offset().top + self.stringMath(offset);
}
return breakpointVal;
})(),
onReachVal = (function() {
var onReachVal = onReachFn;
if (!onReachVal) {
return self.truthyNoop;
}
return function(scrollData) {
var breakpoint = this;
if (breakpoint.targetEle.hasClass(breakpoint.activeClass)) {
return;
}
if (breakpoint.reachCondition.apply(self, [breakpointEle, breakpointVal, targetEle, activeClass, scrollData])) {
breakpoint.targetEle.addClass(breakpoint.activeClass);
breakpoint.onReachFn.apply(self, [breakpointEle, breakpointVal, targetEle, activeClass, scrollData]);
}
};
})(),
unReachVal = (function() {
var unReachVal = unReachFn;
if (!unReachVal) {
return self.truthyNoop;
}
return function(scrollData) {
var breakpoint = this;
if (!breakpoint.targetEle.hasClass(breakpoint.activeClass)) {
return;
}
if (breakpoint.unReachCondition.apply(self, [breakpointEle, breakpointVal, targetEle, activeClass, scrollData])) {
breakpoint.targetEle.removeClass(breakpoint.activeClass);
breakpoint.unReachFn.apply(self, [breakpointEle, breakpointVal, targetEle, activeClass, scrollData]);
}
};
})();
this.positions[breakpoint.name] = {
breakpoint: breakpointVal,
breakpointEle: breakpointEle,
offset: offset,
reCalc: breakpoint.reCalc,
scrollDirection: scrollDirection,
onReach: onReachVal,
onReachFn: onReachFn,
reachCondition: breakpoint.reachCondition ? breakpoint.reachCondition : self.truthyNoop,
activeClass: activeClass,
targetEle: targetEle,
unReach: unReachVal,
unReachFn: unReachFn,
unReachCondition: breakpoint.unReachCondition ? breakpoint.unReachCondition : self.truthyNoop
};
},
remove: function(breakpointName) {
if (!this.positions[breakpointName]) {
return;
}
this.positions[breakpointName] = null;
},
onScroll: function(e) {
var self = this,
scrollTop = $(e.target).scrollTop(),
scrollDirection = scrollTop > self.scrollTop ? "down" : "up";
self.scrollTop = scrollTop;
$.each(self.positions, function(i, positionObj) {
if (positionObj == null) {
return;
}
if (positionObj.reCalc) {
return;
} //for now
if (positionObj.scrollDirection && positionObj.scrollDirection != scrollDirection) {
return;
}
if (scrollTop > positionObj.breakpoint) {
positionObj.onReach([scrollDirection, scrollTop]);
return;
}
if (scrollTop < positionObj.breakpoint) {
positionObj.unReach([scrollDirection, scrollTop]);
return;
}
});
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.format.js' (Mode: Static) */
adrma.format = {
elipses: function(str, max, elips) {
// not to confuse with adrma.trunc.js
if (!str) {
return "";
}
elips = elips || "";
var length = str.length;
if (length > max) {
return str.substr(0, length + max - length) + elips;
}
return str;
},
tel: function(tel) {
if (!tel) {
return "";
}
return tel.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
},
currency: function(number, options) {
var self = this,
defaults = {
decorator: "$",
free: false
}
options = $.extend(defaults, options);
// first replace all ","'s
var origValue = number;
if (typeof number === "string") {
number = number.replace(",", "");
}
//TODO impliment decorator..
number = new Number(number);
number = self.decimalAdjust('round', number, - 2);
number = number.toFixed(2);
if (isNaN(number)) {
return origValue; // return original value
}
if (parseFloat(number) === 0 && options.free) {
return "Free";
}
number = number.replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
return options.decorator + "" + number;
},
capitalize: function(str) {
return str.replace(/\w\S*/g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
},
uppercase: function(str) {
return str.toUpperCase();
},
lowercase: function(str) {
return str.toLowerCase();
},
decimalAdjust: function(type, value, exp) {
// If the exp is undefined or zero...
if (typeof exp === 'undefined' || +exp === 0) {
return Math[type](value);
}
value = +value;
exp = +exp;
// If the value is not a number or the exp is not an integer...
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
return NaN;
}
// Shift
value = value.toString().split('e');
value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
// Shift back
value = value.toString().split('e');
return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.bindToggleEle.js' (Mode: Static) */
(function() {
// require('actionBind');
var selectUi,
doc = $(document);
adrma.actions.add({
bindToggleEle: function(e, jThis) { // usage: data-target=".selector" or data-target=":find( > .selector)"
var toggleEle = jThis.attr("data-target"),
togglerClass = jThis.attr("data-toggler-class") || "shown",
toggleClass = jThis.attr("data-toggled-class") || "show",
expression = toggleEle.match(/^\:([^\(\)]+)\((.+)?\).*/);
jThis.toggleClass(togglerClass);
if (expression) {
jThis[expression[1]]((expression[2]) ? expression[2] : "").toggleClass(toggleClass);
return;
}
$(toggleEle).toggleClass(toggleClass);
},
selectUI: function(e, jThis) {
var self = this;
adrma.selectUi.onClick.apply(self, [e, jThis]);
},
scrollTo: function(e, jThis) {
var target = jThis.attr("data-target");
if (!target) {
return;
}
adrma.scrollTo($(target));
},
followLink: function(e, jThis) {
var href = jThis.find("a").attr("href");
location.href = href; // for now...
}
});
//
adrma.selectUi = selectUi = { //selectUi is a scoped private var (declared in this IIFE)
onClick: function selectUi_OnClick(e, jThis) {
var self = this,
eTarget = $(e.target),
openSelectEle = $(".select-open"),
options = jThis.find(".select-ui-options");
if (jThis.hasClass("disabled")) {
return;
}
if (eTarget.closest(".select-ui-options").length) {
return;
}
if (openSelectEle.length) {
selectUi.close(openSelectEle);
return;
}
selectUi.open(jThis);
options.on("click.selectUI", function(e) {
selectUi.onChange.apply(self, [{
e: e,
selectEle: jThis
}]);
});
setTimeout(function() {
doc.on("click.selectUI", function(e) {
if (e.originalEvent === "undefined" || $(e.target).closest(".select-ui-options").length) {
return;
}
selectUi.close(jThis);
});
}, 1);
},
onChange: function selectUi_onChange(config) {
var e = config.e,
eTarget = $(e ? e.target : ""),
selectEle = config.selectEle,
optionEle = eTarget.length ? eTarget.closest("[data-value]") : config.optionEle,
selectVal = selectEle.find(".select-ui-val"),
selectedClass = "selected",
onSelect = selectEle.attr("data-onSelect"),
value = config.changeValue || optionEle.attr("data-value"),
isTriggered = !eTarget.length,
isStopPropagation = eTarget.hasClass("stop-propagation");
if (optionEle.hasClass("disabled") || isStopPropagation) {
return false;
}
// fixes issue where other non-selectable elements are found inside
if (!isTriggered && !eTarget.closest("[data-value]").not(".select-ui").length) {
if (eTarget.is("a")) { // but if it is a link, make sure to close the selector, and follow the link..
selectUi.close(selectEle);
}
return;
}
if (!optionEle.length) {
//clicked on other link inside the options..
selectUi.close(selectEle);
return;
}
optionEle.closest(".select-ui-options").find("[data-value]").removeClass(selectedClass);
if (value) {
optionEle.addClass(selectedClass);
}
selectEle.removeClass("select-open").attr("data-value", value);
selectVal.html(optionEle.html());
if (onSelect && !config.silent) {
onSelect = adrma.actions[onSelect];
if ($.isFunction(onSelect)) {
onSelect.apply(self, [e, optionEle, value]);
}
}
selectUi.close(selectEle);
},
open: function selectUi_open(ele) {
ele.addClass("select-open");
},
close: function selectUi_close(ele) {
ele.removeClass("select-open");
this.unBind(ele);
},
unBind: function selectUi_unBind(ele) {
ele.find(".select-ui-options").unbind(".selectUI");
doc.unbind(".selectUI");
},
set: function selectUi_set(ele, val, silent) {
this.onChange({
selectEle: ele,
optionEle: ele.find("[data-value='" + val + "']"),
silent: silent
});
},
reset: function selectUi_reset(ele, silent) { // todo: test silent mode
selectUi.onChange({
selectEle: ele,
optionEle: ele.find(".initial-select"),
silent: silent
});
ele.attr("data-value", undefined);
}
};
})();;
/* Comment Generated by Combres - Resource '/sup/js/adrma.miniCart.js' (Mode: Static) */
//
adrma.miniCart = {
init: function init(options) {
options = options || {};
var self = this;
if (options.force) {
self.deleteStored();
}
self.cartEle = $(".head-cart");
self.onInit().done(function() {
self.get().done(function(data) {
self.data = data; // added later to expose the data via adrma.miniCart, this might also need to untie the data paramters passed around.. and rely on this.data...
// if its the direct response from the server
self.render(data);
self.store(data);
});
});
},
onInit: function onInit() {
// perhaps wait for session?
var dfd = $.Deferred(),
self = this;
if (self.initialized) {
return dfd.resolve();
}
self.bindActions();
return adrma.template.get("miniCartTmpl");
},
get: function get(uncached) {
var self = this,
dfd = $.Deferred(),
stored,
storeFn = $.noop;
stored = adrma.storage.get("local", "miniCart", true);
if (stored && !uncached) {
return dfd.resolve(stored);
}
adrma.fetchData({
url: "/api/GetCartSummary",
type: "POST",
dataType: "json"
}).done(function(reponse) {
if (reponse.status === "success") {
dfd.resolve(reponse.data);
}
});
return dfd;
},
update: function(data) {
this.data = data; // added later to expose the data via adrma.miniCart, this might also need to untie the data paramters passed around.. and rely on this.data...
this.render(data);
this.store(data);
this.toggleUpdatingState("remove");
},
render: function(data) {
var self = this;
self.updateCountView(data.cartCount);
var html = tmpl("miniCartTmpl", data); //TODO: redo now after changing adrma.template
if (html) {
$("#miniCart").html(html);
}
},
show: function() {
var self = this;
self.cartEle.addClass("hover").attr("data-sensitivity-out", 5000);
$(document).one("click.minicart", function(e) {
var target = $(e.target);
if (!target.closest(".head-cart").length && !target.hasClass("add-to-cart")) {
self.hide();
}
});
},
hide: function() {
this.cartEle.removeClass("hover");
this.removeClickOutHandler();
},
removeClickOutHandler: function() {
this.cartEle.removeAttr("data-sensitivity-out");
$(document).off("click.minicart");
},
toggleUpdatingState: function(action) {
action = action || "remove";
this.cartEle[action + "Class"]("updating");
},
store: function(data) {
adrma.storage.set("local", "miniCart", data);
},
deleteStored: function() {
adrma.storage["delete"]("local", "miniCart");
adrma.storage["delete"]("local", "session");
},
bindActions: function() {
var self = this;
$.subscribe("cart/addedItem", function addedToCart(e, response) {
// temp fix LP-8443
var isIE8 = $(".ie8").length,
closePopup = function() {
var popupExit = $(".popupExit");
if (popupExit.is(":visible")) {
popupExit.trigger("click");
}
};
// always closePopup
closePopup();
if (adrma.pageInfo.pageType === "cartPage") {
return;
}
// force show the minicart
self.show();
if (isIE8) {
document.location = location.origin + "/CartDisplay.html";
return;
}
var data = response.data;
self.update(data);
self.update(response.data);
});
$.subscribe("cart/removedItem", function addedToCart(e, response) {
var data = response.data;
if (response.params.type === "cartPage") {
return;
}
self.update(data);
});
$.subscribe("cart/beforeAddingItem", function cartBeforeAddingItem(e, data) {
if (adrma.pageInfo.pageType === "cartPage") {
return;
}
self.show();
self.toggleUpdatingState("add");
});
$.subscribe("cart/active", function cartActive(e, data) {
self.toggleUpdatingState("add");
});
adrma.actions.add({
removeCartItem: function(e, jThis) {
// where to keep the logic?
var cartID = jThis.attr("data-cart-id");
//?? ask how to go about it..
adrma.cart.removeFromCart(cartID);
},
closeMinicart: function closeMinicart(e, jThis) {
//e.stopImmediatePropagation();
//e.preventDefault();
//miniCart = $("#miniCart");
//miniCart.hide();
//setTimeout(function() {
// miniCart.removeAttr("style");
//}, 1000);
self.hide();
}
});
},
updateCountView: function(count) {
var cartCountEle = $("#cartCount").text(count ? count : ""),
dataIcon = count ? "c" : "C";
cartCountEle.removeClass("multi-digits");
if (count > 9) {
cartCountEle.addClass("multi-digits");
}
cartCountEle.attr("data-icon", dataIcon);
}
};;
/* Comment Generated by Combres - Resource '/sup/js/plugins/jQuery.beltRotate.js' (Mode: Static) */
// beltRotat
// updated on Feb 3 2013
// including building wrapping the subject
// added addControlsTo
// use only for product page and….???
// instaetize this plugin
// move all dimenstion and state chacking from before animateng to the stat (so only check if acive or not)
(function ($) {
$.fn.beltRotate = function (options) {
var defaults = {
speed:1000,
moveBy:1,
autoRotate:false,
autoRotateIntervalTime:8000,
wrapWith:"<div class='belt'>",
addControlsTo:"beltContainer",
beforeSetupCallback:function(){},
afterSetupCallback:function(){},
moveCallback:function(){},
substarctLastMarginPadding:false
};
options = $.extend(defaults, options);
return this.each(function (i, el) {
var beltContainer = $(el).addClass("beltRotateContainer"),
beltUL = beltContainer.find("ul").length ? beltContainer.find("ul"):beltContainer.wrapInner(options.wrapWith).find(".belt"),
beltLI = beltUL.children(),
beltLength = beltLI.length,
eleWidth = beltLI.outerWidth(true),
moveBy = eleWidth * options.moveBy,
beltTotalWidth = (beltLength * eleWidth),
curPos = 0,
rightArrow = (function(){
if(beltContainer.closest(".beltRotateContainer").parent().find(".thumbRightArrow").length){
return beltContainer.closest(".beltRotateContainer").parent().find(".thumbRightArrow");
}else{
if(options.addControlsTo === "beltContainer"){
return beltContainer.append("<a href='#' class='thumbRightArrow'></a>").find(".thumbRightArrow");
}else{
return $(options.addControlsTo).append("<a href='#' class='thumbRightArrow'></a>").find(".thumbRightArrow");
}
}
})(),
leftArrow = (function(){
if(beltContainer.closest(".beltRotateContainer").parent().find(".thumbLeftArrow").length){
return beltContainer.closest(".beltRotateContainer").parent().find(".thumbLeftArrow");
}else{
if(options.addControlsTo === "beltContainer"){
return beltContainer.append("<a href='#' class='thumbLeftArrow'></a>").find(".thumbLeftArrow");
}else{
return $(options.addControlsTo).prepend("<a href='#' class='thumbLeftArrow'></a>").find(".thumbLeftArrow");
}
}
})(),
beltsOuterWidth = parseFloat(beltContainer.width()),
maxLeft = (-beltTotalWidth + beltsOuterWidth),
currAbs, maxAbs,timeout,
isMaxRight = false,
isMaxLeft = true,
reachedRight = false;
var beltRotateObj = {
setUpBelt: function () {
beltUL.width(beltTotalWidth);
options.beltUL = beltUL;
rightArrow.bind("moveRight", function (e, trigger) {
if (trigger === "clicked") {
clearInterval(timeout);
}
if (curPos > maxLeft && !beltUL.is(":animated")) {
beltUL.animate({
left: "-=" + moveBy + "px"
}, options.speed, function () {
curPos = parseFloat(beltUL.css("left"));
beltRotateObj.updateArrowsState();
options.moveCallback();
});
}
return false;
}).bind("click", function () {
$(this).trigger("moveRight", ["clicked"]);
return false;
});
if (beltTotalWidth < beltsOuterWidth) {
rightArrow.addClass("inActive");
}
leftArrow.addClass("inActive").bind("moveLeft", function (e, trigger) {
if (trigger === "clicked") {
clearInterval(timeout);
}
if (curPos < 0 && !beltUL.is(":animated")) {
beltUL.animate({
left: "+=" + moveBy + "px"
}, options.speed, function () {
curPos = parseFloat(beltUL.css("left"));
beltRotateObj.updateArrowsState();
options.moveCallback();
});
}
return false;
}).bind("click", function () {
$(this).trigger("moveLeft", ["clicked"]);
return false;
});
},
updateArrowsState: function () {
currAbs = Math.abs(curPos);
maxAbs = Math.abs(maxLeft);
beltContainer.data("beltData").curPos = curPos;
if (currAbs >= maxAbs) {
leftArrow.removeClass("inActive");
rightArrow.addClass("inActive");
isMaxLeft = false;
isMaxRight = true;
}
if (curPos >= 0) {
rightArrow.removeClass("inActive");
leftArrow.addClass("inActive");
isMaxRight = false;
isMaxLeft = true;
}
if (curPos > maxLeft && curPos < 0) {
leftArrow.removeClass("inActive");
rightArrow.removeClass("inActive");
isMaxRight = false;
isMaxLeft = false;
}
},
simulateClick: function () {
if(!reachedRight){
rightArrow.trigger("moveRight", ["triggered"]);
reachedRight = isMaxRight?true:false;
if(reachedRight){
leftArrow.trigger("moveLeft", ["triggered"]);
}
}
else{
leftArrow.trigger("moveLeft", ["triggered"]);
reachedRight = isMaxLeft?false:true;
if(!reachedRight){
rightArrow.trigger("moveRight", ["triggered"]);
}
}
}
};
beltRotateObj.setUpBelt();
beltContainer.data("beltData",{
beltUL:beltUL,
eleWidth:eleWidth,
beltLength:beltLength
});
noop = options.autoRotate && (options.autoRotateInterval = setInterval(beltRotateObj.simulateClick, options.autoRotateIntervalTime));
});
};
})(jQuery);
;
/* Comment Generated by Combres - Resource '/sup/js/adrma.thumbsViewer.js' (Mode: Static) */
adrma.ThumbsViewer = function() {
return this;
};
adrma.ThumbsViewer.prototype = {
defaults: {
container: "",
largeImage: ".largeImage",
thumbsContainer: ".thumbsContainer",
imgTitle: ".img-title",
activeClass: "active",
thumbSource: /Thumb/,
largeSource: "Large",
videoDimentions: {
width: "400",
height: "400"
},
videoWidth: "400",
beforeInit: $.noop,
afterInit: $.noop,
toggleActiveClass: function(ele) {
ele.addClass(this.activeClass).siblings().removeClass(this.activeClass);
},
onHover: function(e, jThis) {
if (jThis.hasClass("thumb-video") || this.mode === "video") {
return;
}
this.toggleActiveClass(jThis);
var thumb = jThis,
tumbSrc = thumb.attr("src"),
imgTitle = thumb.attr("data-thumb-title"),
largeSrc = tumbSrc.replace(/Thumb/, this.largeSource),
thumbIndex = thumb.index() - (this.thumbsContainer.find(":first-child").hasClass("thumb-video") ? 1 : 0);
this.largeImage.attr("src", largeSrc);
this.imgTitle.html(imgTitle);
this.largeImage.parent().attr("data-callback-arguments", thumbIndex);
},
mode: "image",
onClick: function(e, jThis) {
var self = this;
// check if video
if (jThis.is(".thumb-video")) {
if (jThis.hasClass(".active")) {
return;
}
var mediaType = jThis.attr("data-media-type"),
mediaId = jThis.attr("data-media-id"),
imgTitle = jThis.attr("data-thumb-title");
self.imgTitle.html(imgTitle);
self.toggleActiveClass(jThis);
if (!this.media) {
self.media = new adrma.Media();
self.media.init({
container: self.container,
dimentions: {
width: self.videoDimentions.width,
height: self.videoDimentions.height
}
});
}
self.mode = "video";
self.media.play(mediaType, mediaId);
return;
} else {
if (self.mode === "video") {
self.mode = "image";
jThis.trigger("mouseenter");
self.media.remove();
return;
}
self.largeImage.trigger("click");
}
}
},
init: function(config) {
var self = this;
$.extend(self, this.defaults, config);
self.container = $(self.container); // covers string, DOM or jQuery object;
if (!self.container.length) {
return;
}
self.largeImage = self.container.find(self.largeImage);
self.beforeInit();
self.thumbsContainer = self.container.find(self.thumbsContainer);
self.imgTitle = self.container.find(self.imgTitle);
if (self.shouldBelt && self.beltIf()) {
self.belt();
}
self.bindActions();
self.afterInit();
// fixes LP-8547 (wanted to avoid having adrma.media by defualt)
if ($(".thumb-video").length && !adrma.Media) {
adrma.fetchData({
url: "/sup/js/adrma.media.js",
dataType: "script"
});
}
},
bindActions: function() {
var self = this;
self.thumbsContainer.on("mouseenter click", "img", function(e) {
var jThis = $(this),
eType = e.type;
if (eType === "mouseenter") {
self.onHover.apply(self, [e, jThis]);
} else {
self.onClick.apply(self, [e, jThis]);
}
});
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.notify.js' (Mode: Static) */
adrma.actions.add({
closeNotify: function(e, jThis) {
var notify = jThis.closest(".alert-box");
notify.fadeOut(300, function() {
notify.remove();
});
}
});
// LP-11098
adrma.router.add({
name: "notify",
callback: function(message) {
adrma.notify.add({
html: message,
autoClose: false
});
}
});
adrma.notify = {
defaults: {
placeholder: ".alert-placeholder",
closeEle: "<a class='close-alert action' data-action='closeNotify' data-icon='x' title='Hide Message'></a>",
html: "",
defaultClass: "alert-box",
type: "default",
autoClose: true,
delay: 10000
},
add: function add(config) {
config = $.extend({}, this.defaults, config);
var self = this,
notify = $("<div>", {
"class": config.defaultClass + " " + config.type,
html: config.closeEle + "" + config.html
}).appendTo(config.placeholder).on("mouseenter mouseleave", function(e) {
if (e.type === "mouseenter") {
clearTimeout(timeout);
} else {
setTheTimeout(1000);
}
}),
timeout,
setTheTimeout = function(delay) {
if (!config.autoClose) {
return;
}
timeout = setTimeout(function() {
self.remove(notify);
}, delay || config.delay);
};
setTheTimeout();
},
remove: function remove(notification) {
notification.find(".close-alert").trigger("click");
},
renderApiMessages: function renderApiMessages(response) {
var self = adrma.notify, // since this is passed directly from the ajax done method, the easiest way was to redefine this..
messages = response.messages || [],
messageField,
type;
$.each(messages, function loopMessages(i, e) {
// type
type = e.type ? e.type : "default";
self.add({
html: "<p>" + e.text + "</p>",
type: type,
autoClose: false
});
});
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.scriptsStrings.js' (Mode: Static) */
// evaluate scriptsStrings (checks for <div class="scriptString"> and eval's its html())
adrma.scriptStrings = function() {
var scriptString = $(".scriptString").not(".processedScript");
if(scriptString.length) {
scriptString.each(function() {
var jThis = $(this).addClass("processedScript"),
thisScript = jThis.html();
if(!thisScript) {
return;
}
try {
eval(thisScript);
} catch(err) {}
});
}
};
;
/* Comment Generated by Combres - Resource '/sup/js/adrma.hoverTip.js' (Mode: Static) */
// toolTip, Version 3.0
// extended from jQuery.hoverTip.js poerted to adrma object…..
// Copyright (c) Feb 14, 2012 adardesign.com
// toolTip is freely distributable under the terms of an MIT-style license
// This means you are free to use the code, but please leave this copyright notice intact
// everything inside the "defaults" is configurable.
// Code passes jsLint.com Code Quality Tool!!! (with some common jQuery errors!).
//Cleaned up alot.......
//http://jsfiddle.net/adardesign/8uUMH/
// Todo: extend passing arg via data attr..
// Delegate, (to work on new elements….
// Keep dataLocations separate…. (maybe fetch as needed);
// js_7 BU is here --- https://gist.github.com/934ca45f27bbc60568e1
(function($) {
$.fn.hoverTip = function(options) {
if ($.fn.hoverTip.inilized) {
return this;
}
$.fn.hoverTip.inilized = true;
var defaults = {
defualtClassName: "hoverTips",
seconderyClassName: "",
defualtTriggerer: "hoverInfo",
hasTooltip: false,
allowMouseIn: true,
prefferedPosition: "auto",
centerPosition: "true",
buildFragment: function(data) {
this.frag = $("<div>", {
"class": options.defualtClassName,
mouseleave: function(evt) {
if ($(evt.relatedTarget).hasClass(options.defualtTriggerer)) {
return false;
}
options.fadeOut(data.e);
}
}).appendTo("body");
this.hasTooltip = true;
},
createToolTip: function(data) { // configurable object
var self = this,
url, params,
dataLocations;
if (!self.hasTooltip) {
self.buildFragment(data);
}
self.frag = $("body > ." + options.defualtClassName).attr("class", options.defualtClassName + " loading " + data.relClass).removeAttr("style").html(function() {
return options.allowMouseIn ? "<div class='linkHelper'></div>" : "";
});
// in case we need a other class (why add rel to everyone);
if (options.seconderyClassName) {
$(self.frag).addClass(options.seconderyClassName);
}
if (data.isStaticData) {
$(self.frag).append(data.data);
options.postiotionTip(data);
return;
}
if (data.isSourceGlobal || data.isDirectUrlSource) { // edited erev rosha hashana 5773 ... (to allow explicit direct URL's buy to save more tooltip)
url = data.isDirectUrlSource ? data.data : "/api/some/api/" + data.data;
params = data.isDirectUrlSource ? data.data : {};
} else {
if (dataLocations = $.fn.hoverTip.dataLocations) {
url = dataLocations[data.data];
if (!url) return;
} else {
return;
}
}
adrma.fetchData({
url: url,
cacheResponse: true,
data: params
}).done(function(result) {
$(self.frag).append(result);
options.postiotionTip(data);
return;
});
},
postiotionTip: function(data) {
var currenTip = $("body > ." + options.defualtClassName),
tipDimentions = {
width: currenTip.outerWidth(true),
height: currenTip.outerHeight(true)
},
currenTipWidth = currenTip.outerWidth(true),
currenTipHeight = currenTip.outerHeight(true),
scrollPos = {
left: $(window).scrollLeft(),
top: $(window).scrollTop()
},
viewportDimentions = {
x: $(window).width(),
y: $(window).height()
},
arrowHeight = 18,
triggererEle = $(data.e.target),
triggererDimentions = {
width: triggererEle.outerWidth(),
height: triggererEle.outerHeight()
},
triggererCenters = {
x: triggererDimentions.width / 2,
y: triggererDimentions.height / 2
},
triggererPosition = {
x: triggererEle.offset().left,
y: triggererEle.offset().top
},
evtX = data.e.pageX,
evtY = data.e.pageY,
toggleClasses = function(action, className) {
return currenTip[action + "Class"](className);
},
doesCollide = function(endPoint, dir) {
switch (dir) {
case "right":
return (endPoint > viewportDimentions.x + scrollPos.left);
case "left":
return (endPoint < 0 + scrollPos.left);
case "top":
return (endPoint < 0 + scrollPos.top);
case "bottom":
return (endPoint > viewportDimentions.y + scrollPos.top);
}
},
sideYPosition = function() {
tipY = (function() {
if (doesCollide((triggererPosition.y + tipDimentions.height), "bottom")) {
toggleClasses("add", "tipSideBottom");
return (triggererPosition.y - tipDimentions.height) + 40;
} else {
toggleClasses("add", "tipSideTop");
return triggererPosition.y - 20;
}
})();
},
prefferedPosition = triggererEle.attr("data-tooltipPrefferedPosition") || data.prefferedPosition;
switch (prefferedPosition) {
case "auto":
tipX = (function() {
if (doesCollide((triggererPosition.x + triggererCenters.x + tipDimentions.width / 2), "right")) {
toggleClasses("add", "tipRight");
return triggererPosition.x + triggererDimentions.width - tipDimentions.width;
} else if (doesCollide((triggererPosition.x + triggererCenters.x - tipDimentions.width / 2), "left")) {
toggleClasses("add", "tipLeft");
return triggererPosition.x;
} else {
//toggleClasses("remove","tipTopRight");
return ((triggererPosition.x + triggererCenters.x) - tipDimentions.width / 2);
}
})(),
tipY = (function() {
if (doesCollide((triggererPosition.y + tipDimentions.height), "bottom")) {
toggleClasses("add", "tipBottom");
return triggererPosition.y - (tipDimentions.height + triggererDimentions.height);
} else {
toggleClasses("add", "tipIsTop");
return triggererPosition.y + triggererDimentions.height + 12;
}
})();
break;
case "top":
tipX = (function() {
if (doesCollide((triggererPosition.x + triggererCenters.x + tipDimentions.width / 2), "right")) {
toggleClasses("add", "tipRight");
return triggererPosition.x + triggererDimentions.width - tipDimentions.width;
} else if (doesCollide((triggererPosition.x + triggererCenters.x + tipDimentions.width / 2), "left")) {
toggleClasses("add", "tipLeft");
return triggererPosition.x;
} else {
return ((triggererPosition.x + triggererCenters.x) - currenTipWidth / 2);
}
})(),
tipY = (function() {
if (doesCollide((triggererPosition.y - tipDimentions.height), "top")) {
toggleClasses("add", "tipIsTop");
return triggererPosition.y + triggererDimentions.height + 12;
} else {
toggleClasses("add", "tipBottom");
return triggererPosition.y - (tipDimentions.height + 12);
}
})();
break;
case "right":
tipX = (function() {
if (doesCollide((triggererPosition.x + triggererDimentions.width + tipDimentions.width), "right")) {
toggleClasses("add", "tipSideRight");
return (triggererPosition.x - tipDimentions.width - 12);
} else {
toggleClasses("add", "tipSideLeft");
return (triggererPosition.x + triggererDimentions.width) + 12;
}
})();
sideYPosition();
break;
case "bottom":
break;
case "left":
tipX = (function() {
if (doesCollide((triggererPosition.x - tipDimentions.width), "left")) {
toggleClasses("add", "tipSideLeft");
return (triggererPosition.x + triggererDimentions.width) + 12;
} else {
toggleClasses("add", "tipSideRight");
return (triggererPosition.x - tipDimentions.width - 12);
}
})(),
sideYPosition();
break;
}
currenTip.css({
top: tipY,
left: tipX
}).fadeTo(300, 1).addClass("hoverShow");
this.frag.removeClass("loading");
},
stopAll: function() {
$("." + options.defualtClassName).stop(true, true);
},
fadeOut: function(e) {
$("body > ." + options.defualtClassName).fadeTo(0, 0, function() {
$(this).removeClass("hoverShow");
$(e.target).removeClass("hoverActive");
});
}
};
options = $.extend(defaults, options),
triggerSelector = this.selector;
$(document).on("mouseover mouseout", triggerSelector, function(e) {
var eTarget = $(e.target),
staticData, sourceType, prefferedPosition, elRel, data, isStaticData, isSourceGlobal, isDirectUrlSource;
if (eTarget.closest(triggerSelector).find("." + options.defualtClassName).length) {
return false;
}
if (e.type === "mouseover") {
//Aug 27 temp solution for calling twice.. we need to make sure it gets calledon a page only ONCE!
//temp solution for calling twice..
if (eTarget.hasClass("hoverActive")) {
return;
}
eTarget.addClass("hoverActive");
staticData = eTarget.attr("data-tooltip-content"),
directUrlSource = eTarget.attr("data-tooltip-source-url"),
sourceType = eTarget.attr("data-tooltip-source-type"),
prefferedPosition = eTarget.attr("data-tooltip-preffered-position") || "auto";
// http://bit.ly/18Jv5LE
elRel = eTarget.attr("data-tooltip-class");
elRel = elRel || "";
if (staticData) {
data = staticData;
isStaticData = true;
}
if (sourceType) {
data = sourceType;
isSourceGlobal = true;
}
if (directUrlSource) {
data = directUrlSource;
isDirectUrlSource = true;
}
if (!staticData && !sourceType && !directUrlSource) {
if (eTarget.attr("title")) { // not recommended..
eTarget.data("elTitle", eTarget.attr("title"));
}
data = $.data(eTarget[0], "elTitle");
eTarget.removeAttr("title");
}
options.stopAll();
options.createToolTip({
data: data,
relClass: elRel,
e: e,
isStaticData: isStaticData,
isSourceGlobal: isSourceGlobal,
prefferedPosition: prefferedPosition,
isDirectUrlSource: isDirectUrlSource
});
return false;
} else if (e.type === "mouseout") {
if (!$(e.relatedTarget).closest("." + options.defualtClassName).length) {
options.stopAll();
options.fadeOut(e);
return false;
}
}
});
return this;
};
}(jQuery));;
/* Comment Generated by Combres - Resource '/sup/js/adrma.scrollTo.js' (Mode: Static) */
// scrollTo takes a elements (jQuery) and a offset and speed (optional) and container (optional - in case of popup)
// consider making [params] and object
adrma.scrollTo = function(ele, offset, speed, container) {
ele = $(ele);
if (!ele.length) {
return;
}
// from where to offset(need to proof that position works)
var eleOffset = container ? ele.position().top : ele.offset().top,
dfd = $.Deferred();
container = container || $("html, body");
container.stop(true, true).animate({
scrollTop: (eleOffset) + (offset || - 90)
}, speed || 300, function() {
dfd.resolve();
});
return dfd;
};;
/* Comment Generated by Combres - Resource '/sup/js/plugins/jQuery.serializeObject.js' (Mode: Static) */
// http://codereview.stackexchange.com/questions/23491/how-can-i-make-this-small-jquery-serializeobject-util-any-better
$.fn.serializeObject = function(decorator) {
var source = this.serializeArray(),
serialized = {},
i, l, object;
for (i = 0, l = source.length; i < l; i++) {
object = source[i];
if (typeof decorator === 'function') {
decorator(object);
}
if (serialized.hasOwnProperty(object.name)) {
if (!(serialized[object.name] instanceof Array)) {
serialized[object.name] = [serialized[object.name]];
}
serialized[object.name].push(object.value);
} else {
serialized[object.name] = object.value;
}
}
return serialized;
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.cart.js' (Mode: Static) */
// require(adrma);
// require(adrma.ajax);
//
// if value has "config" as value then it will not validate..
// TODO: make sure to add the actual price
// Items other then the product detail page dont need to be a form... all we need is the SKU
adrma.cart = {
defaults: {},
serializeForm: function(ele) {
// TODO: setup proper JSON, take in mind configurables and package's
var self = this,
form = ele.closest("form"),
regProduct = ele.closest("[data-sku]"),
data = {},
sku,
qty,
input,
parentSku = self.resolveConfigSku(regProduct.attr("data-sku")),
itemDataInputs,
validQty = true;
// set the wrapping obj
data[parentSku] = data[parentSku] || {};
if (form.length) {
itemDataInputs = form.find("input.itemData");
$.each(itemDataInputs, function(i, e) {
input = $(e);
sku = self.resolveConfigSku(e.name);
qty = e.value;
// handling errors
input.removeClass("error");
if (isNaN(qty) || qty < 1 || qty.indexOf(".") > -1) {
validQty = false;
self.tempDisable = true;
setTimeout(function function_name() {
self.tempDisable = false;
}, 2000);
adrma.notify.add({
html: "<p>Please change the quantity to a valid number</p>",
type: "error"
});
input.addClass("error");
}
if (input.hasClass("component")) { // should be changed to look for data only, and not rely on data...
// create component obj
data[parentSku].components = data[parentSku].components || [];
data[parentSku].components.push({
id: sku,
qty: qty
});
} else {
// is not a componant
//data[parentSku] = data[parentSku] || {};
data[parentSku].qty = qty;
}
});
} else {
// no form length, its a single add-to-cart button, cant be a configuration...
sku = self.resolveConfigSku(regProduct.attr("data-sku"));
data[sku] = {
qty: 1
};
}
if (!validQty) {
data = {};
}
return data;
// if it finds a "config" its gonna return false..
// serializeObject
},
resolveConfigSku: function resolveConfigSku(sku) {
if (!sku) return;
if (!adrma.productData) return sku; // for a instance that no adrma.productData just add it to cart AS is..
var productData = adrma.productData[sku];
if (productData && productData.type && (productData.type === "configurable") && productData.config && productData.id) {
sku = productData.config.id;
}
return sku;
},
getProductData: function(sku) {
// not needed for now since the configure for list will be a form..
var data = {};
sku = this.resolveConfigSku(sku);
data[sku] = {
qty: 1
};
return data;
},
addToCart: function(data, options) {
// it expects either a form ele, or a data obj
var self = this;
if (self.tempDisable) {
return false;
}
options = $.extend({}, this.defaults, options);
if (data instanceof jQuery) { // a input or form ele is passed
//TODO: check if its a form ele..
var isForm = data.closest("form").length;
data = isForm ? this.serializeForm(data) : this.getProductData(data.closest("[data-sku]").attr("data-sku"));
}
if (!data || $.isEmptyObject(data)) {
//$.error("invalid or no data"); // report back error to UI...
return;
}
var type = (function determineType(pageType) {
if (pageType === "cartPage") {
return pageType;
}
return "miniCart";
})(adrma.pageInfo.pageType);
data = { // LP-6706 (comment - http://bit.ly/15Yi4LA)
clientTimeStamp: adrma.getTimezoneStamp(),
cartItems: data,
type: type
};
data = JSON.stringify(data);
var dfd = $.Deferred(),
beforeRoadBlock = self.beforeAddToCart(data, options);
if (!beforeRoadBlock) {
return dfd.reject();
}
self.updateStorage();
adrma.fetchData({
url: "/api/order/addToCart",
data: data,
type: "POST",
contentType: "json",
dataType: "json"
}).done(function(response) {
if (response.status === "success") {
dfd.resolve(response);
self.afterAddToCart(response, options);
} else {
self.failedAddToCart(response, options);
}
}).fail(function(response) {
self.failedAddToCart(response, options);
dfd.reject(response);
});
return dfd;
},
beforeAddToCart: function(data, options) {
$.publish("cart/beforeAddingItem", data);
return true; // if it returns false it just doesn't addToCart
},
afterAddToCart: function(response, options) {
$.publish("cart/addedItem", response);
var messages = response.messages;
if (messages) {
$.each(messages, function(i, e) {
adrma.notify.add({
html: "<p>" + e.text + "</p>",
autoClose: false
});
});
}
//update storage
},
failedAddToCart: function(response, options) {
$.publish("cart/addedItem/", response); // to be removed...
$.publish("cart/addItemFailed", response);
adrma.notify.renderApiMessages(response);
},
updateStorage: function() {
adrma.storage["delete"]("local", "miniCart");
adrma.storage["delete"]("local", "session");
},
//e
//
//
removeFromCart: function(cartDetailId, options) {
options = $.extend({}, this.defaults, options);
var self = this,
dfd = $.Deferred(),
type = (function determineType(pageType) {
if (pageType === "cartPage") {
return pageType;
}
return "miniCart";
})(adrma.pageInfo.pageType),
data = {
CartDetailID: cartDetailId,
type: type
},
beforeRoadBlock = self.beforeRemoveFromCart(cartDetailId, options);
self.updateStorage();
if (!beforeRoadBlock) {
return dfd.reject();
}
adrma.fetchData({
url: "/api/order/RemoveFromCart",
data: data,
type: "POST",
dataType: "json"
}).done(function(response) {
if (response.status === "success") {
self.afterRemoveFromCart(response, options);
dfd.resolve(response);
} else {
self.failedRemoveFromCart(response, options);
dfd.reject(response);
}
}).fail(function(response) {
self.failedRemoveFromCart(response, options);
dfd.reject(response);
});
return dfd;
},
beforeRemoveFromCart: function(cartDetailId, options) {
$.publish("cart/active", {});
return true;
},
afterRemoveFromCart: function(response, options) {
$.publish("cart/removedItem", response);
$.publish("cart/removedItem/", response); // temp. to support OLD cart
},
failedRemoveFromCart: function(response, options) {
adrma.notify.renderApiMessages(response);
$.publish("cart/failedRemovingItem", response);
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.iterateProducts.js' (Mode: Static) */
adrma.iterateProducts = function(container, actions) {
container = $(container || "body");
var dfd = $.Deferred(),
currContainer,
prices,
sku,
action,
noop;
this.repaint = function(skuData) {
prices = skuData.prices;
currContainer = container.find("[data-sku=" + skuData.id + "]");
currContainer.find(".itemData").not(".component").attr("data-price", prices.price);
currContainer.find(".your-price").text(adrma.format.currency(prices.price));
noop = prices.list && currContainer.find(".price-list").text(adrma.format.currency(prices.list));
noop = prices.youSave && currContainer.find(".price-you-save").text(adrma.format.currency(prices.youSave.dollar) + " (" + prices.youSave.percent + "%)");
};
this.configure = function(skuData) {
if (skuData.type !== "regular") {
var configObj = new adrma.ProductConfig();
configObj.init({
sku: sku,
container: "[data-sku=" + skuData.id + "]"
});
adrma.productData[sku].configObj = configObj;
}
};
var i = 0,
actionsLength = actions.length;
for (sku in adrma.productData) {
var skuData = adrma.productData[sku];
for (; i < actionsLength; i++) {
this[actions[i]].call(null, skuData);
}
}
dfd.resolve();
return dfd;
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.product.js' (Mode: Static) */
(function productJS() { // name for debugging purpose only
adrma.actions.add({
addToCart: function(e, jThis) {
adrma.log("addTocart action", e.type);
e.preventDefault(); //after varifying config... this is still subjected to minicart is on/off
adrma.cart.addToCart(jThis);
return false;
},
addToQuote: function addToQuote(e, jThis) {
e.preventDefault(); //after varifying config... this is still subjected to minicart is on/off
var productContainer = jThis.closest("[data-sku]"),
sku = productContainer.attr("data-sku");
window.opener.SetChosenProductID(sku);
window.close();
},
addToWish: function(e, jThis) {
var sku = jThis.closest("[data-sku]").attr("data-sku") || ""; // it must have a sku... but still safegurded
if (adrma.session.session.isLoggedIn) {
//call api and then notify
adrma.notify.add({
html: "<p>We added it to the wish list <a href='#wishlist'>See wishlist</a></p>",
autoClose: false
});
} else {
// temporary solution, inject a ele and
var tempWishListPopEle = $("<a href='/static/wishListConfirm.html?sku" + sku + "' class='popup' data-popup-class='popupAlert' title='Add to Wish List'></a>");
tempWishListPopEle.appendTo("body").trigger("click");
tempWishListPopEle.remove();
}
},
notifyStock: function(e, jThis) {
$.when(adrma.notifyStock ? true : adrma.fetchData({
url: "/sup/js/adrma.notifyStock.js",
dataType: "script"
})).then(function() {
var sku = jThis.attr("data-sku");
adrma.notifyStock.init(sku, jThis);
});
}
});
})();
// add wishlist listener
adrma.router.add({
name: "addToWishList",
callback: function(sku) {
// since the issue of router's toLowerCase .. We need to re-get the sku
sku = sku ? adrma.router.splitRoute(adrma.router.cleanHash())[1] : adrma.pageInfo.id;
$.when(adrma.session.getSession, adrma.getAsyncData.getData).then(function() {
// in reality this method (of triggering pop should of been added as a adrma.wishlist method..)
var pageType = (adrma.pageInfo.pageType !== "cartPage") ? "miniCart" : "cartPage";
adrma.popup.trigger({
href: "/sup/static/wishListConfirm.html",
title: "Add to wish list",
popupClass: "popupAlert popup-add-to-wishlist",
callback: "initAddToWishlist",
callbackArguments: sku + "," + pageType,
callbackContext: "adrma"
});
});
}
});
// price alert
adrma.router.add({
name: "pricealert",
callback: function(sku) {
// since the issue of router's toLowerCase .. We need to re-get the sku
sku = sku ? adrma.router.splitRoute(adrma.router.cleanHash())[1] : adrma.pageInfo.id;
$.when(
// session
adrma.session.getSession,
// AsyncData
adrma.getAsyncData.getData,
// adrma.validate
adrma.init.require([{
name: "adrma.Validate",
resource: "adrma.validate.js"
}])).then(function() {
// in reality this method (of triggering pop should of been added as a adrma.wishlist method..)
adrma.popup.trigger({
href: "/sup/static/priceAlertConfirm.html",
title: "Price Alert",
popupClass: "popup400",
callback: "initPriceAlert",
callbackArguments: sku,
callbackContext: "adrma"
});
});
}
});
// price notifyStock
adrma.router.add({
name: "notifyStock",
callback: function(sku) {
// since the issue of router's toLowerCase .. We need to re-get the sku
sku = sku ? adrma.router.splitRoute(adrma.router.cleanHash())[1] : adrma.pageInfo.id;
$.when(
// get session
adrma.session.getSession,
// asyncData
adrma.getAsyncData.getData,
// load notifyStock
(adrma.notifyStock ? true : adrma.fetchData({
url: "/sup/js/adrma.notifyStock.js",
dataType: "script"
}))).then(function() {
// in reality this method (of triggering pop should of been added as a adrma.wishlist method..)
adrma.notifyStock.init(sku, $(".stockNotify"));
});
}
});;
/* Comment Generated by Combres - Resource '/sup/js/adrma.productConfig.js' (Mode: Static) */
// - Documentation:
//
// A regular product has a type of "regular" and will be processed normally by submitting "add to cart" and action-data "addToCart" will pass to adrma.cart's serialize method... and will prcess the inputs/hidden-inputs and will POST to cart (ajax)..
// Then we can minicart it..
//
// A Configurable product has a type of "configurable"
// will be configured (via UI or pre-programmed) at the data level, (adrma.productData[sku])...
// the atc's action-data will be changed to "configAddToCart" which makes sure that the product is configured (via checking productData.config.status)
// when configured, a hiddenInput will be set with the chosen configured ID...
//
// when submitting:
// if configured it will send it off to adrma.cart's serialize method...
// if not it will just stop there, and will show errors
//
// A Packadge product has a type of "package"
// each product is configured at its own, in a quickView model, and its own ProductConfig (this) instance..
// each item in the package will have a hiddenInput with skuID-and-qty
// each item that requires configuration will have a data-requires-config="true" and when "configured" it will become false..
// when item is configured it will set the its hiddenInput with skuID-and-qty
// when submitting it will check if there are still data-requires-config="true" left, if yes it will stop right there.. and add error classes to items not configured yet..
// if all of them are configured then it will just continue to addToCart.. (like all of them...)
//
//
// Once item is added to cart, remeber to remove all configurations...
//
//
// - TODO:
// remove pubSub idea..
// take in mind package
// take in mind products with one config only.
// take in mind products with multi (2 for now) config.
// thumb viewer programaticly trigger a view
// ------
// You Save: $68.51 (20%) who is going to calculate these?
//
adrma.ProductConfig = function() {
if (!this instanceof adrma.ProductConfig) {
return new adrma.ProductConfig();
}
return this;
};
adrma.ProductConfig.prototype = {
defaults: {
container: "",
configContainer: ".product-options",
sku: "",
template: "productOptionsTmpl",
mode: "product"
},
init: function(config) {
var self = this,
dfd = $.Deferred();
$.extend(self, this.defaults, config);
self.bindActions();
self.container = $(self.container); // this should be the product...
self.sku = self.sku;
if (!self.container.length) {
return dfd.resolve();
}
$.when(
self.getData(self.sku),
adrma.template.get(self.template)).done(function() {
// in case there is no select construct the select element and generate id's and connect the "data-linked-select-id"
var productData = adrma.productData[self.sku];
if (productData.type === "regular") {
dfd.resolve();
return dfd.resolve();
}
self.rebindAtcAction();
if (productData.type === "package") {
return dfd.resolve();
}
productData.config = productData.config || {};
productData.config.path = productData.config.path || [];
self.initRenderOptions(); // renders the options from data...
dfd.resolve();
});
return dfd;
},
initRenderOptions: function() {
// getting data in preperation of "initial" rendering of the the options...
var self = this,
productData = adrma.productData[self.sku],
optionSelector = self.container.find(self.configContainer).find(".options-select");
if (!optionSelector.length) {
return;
}
self.renderConfigOptions(optionSelector[0].id, productData.configurations); // either way... render the first only
},
configToString: function(seperator) {
//A helper to enale render'ing the config path ["large", "black"] to show on page..
//TODO: change to a join(seperator);
var config = adrma.productData[this.sku].config,
path = config.path,
pathLength = path.length,
str = "",
i = 0,
j;
if (!config) {
return "";
}
for (; i < pathLength; i++) {
str += path[i];
j = i + 1;
if (seperator && j < pathLength) {
str += seperator;
}
}
return str;
},
getConfigData: function(sku) {
// get the data object from the config path.. (find the real data.. ["large", "black"] to the actual product data..)
sku = sku || this.sku; // to be able to call it as a method from outside
var skuData = adrma.productData[sku],
configData = skuData.config,
i = 0,
path = configData.path,
pathLength = path.length,
obj = skuData.configurations;
if (skuData.config.status === true) {
for (; i < pathLength; i++) {
obj = obj[path[i]];
}
} else {
obj = skuData;
}
return obj;
},
onConfig: function(data, e) {
var self = this;
if (adrma.inProgress === true) {
return;
}
adrma.inProgress = true;
setTimeout(function() {
adrma.inProgress = false;
}, 1000);
// A event that gets called on config and un-config
if (data.status) {
// takes care of UI/UX while updating..
$("body").addClass("updating-dom");
}
var skuData = adrma.productData[data.sku],
configData = skuData.config;
configData.status = data.status;
var itemType = skuData.type,
isConfigured = data.status,
configObj = self.getConfigData(),
finalProdData = isConfigured ? configObj : skuData,
price = (function() {
//console.log("prices > ", configData.path.join(","));
var prices = configObj.prices;
return prices.price;
})(),
priceLabel = (function() {
var str = "";
if (isConfigured) {
str = self.configToString(", ") + ":";
if (adrma.pageInfo.pageType === "listPage") {
str = "Your Price: ";
}
} else {
str = "Starting at:";
}
return str;
})(),
savingData = (function() {
var obj = {},
prices = finalProdData.prices;
if (prices.list) {
obj.list = finalProdData.prices.list;
}
if (prices.youSave) {
obj.dollar = finalProdData.prices.youSave.dollar;
obj.percent = finalProdData.prices.youSave.percent;
}
return obj;
})(),
imageName = (function() {
var imageObj;
if (isConfigured) {
if (configObj.imageId) {
imageObj = adrma.query.json(skuData.images, "id", configObj.imageId);
}
}
return imageObj || "";
})(),
itemTag = (function() {
var prices = finalProdData.prices;
if (prices.hasOwnProperty("isSale")) {
return tmpl("itemTagTmpl", {
tagType: "sale",
tagLabel: "sale"
});
}
})(),
expiration = (function() {
var prices = finalProdData.prices;
return prices.saleExp;
})(),
action = (function() {
var action;
if (isConfigured) {
action = "addToCart";
} else {
if (itemType === "configurable") {
action = "configAddToCart";
}
}
return action;
})(),
//id = isConfigured ? configObj.id : "config"; //data.sku;
id = configObj.id; // LP-10763
configData.id = id;
self.updateAddCartAction(action);
self.updateItemSkuValue(id);
self.updateStockNotification(finalProdData.stock);
if (data.status) {
self.updatePrice(price);
self.updatePriceLabel(priceLabel);
self.updatePriceSavings(savingData);
self.updateImage(imageName);
self.updateStock(finalProdData);
self.updateSummary();
self.updateTags(itemTag);
self.updateSaleExpiration(expiration);
self.updateShippingTag();
self.updateOtherOptionSelects(skuData, e);
setTimeout(function() {
$("body").removeClass("updating-dom");
}, 360);
}
},
resolveStockName: function(prodData) {
var subStatus = prodData.subStatus;
return subStatus ? subStatus.name : prodData.stock;
},
updateAddCartAction: function(action) {
// Update (Oct-9-13), change in plan, we won't change actions... it should continue to be proccesed with the original data-action
// var action = enable ? "remove" : "add";
// this.container.find(".add-to-cart").attr("data-action", action);
},
updateItemSkuValue: function(id) {
if (id === "config") return;
// just update value
// Not using this, since we relay ONLY on the productData
this.container.find(".save-item a").attr("data-callback-arguments", id);
this.container.find(".product-sku span").text(id);
},
updatePrice: function(price) {
this.container.find(".your-price").html(adrma.format.currency(price));
this.container.find(".itemData").not(".component").attr("data-price", price);
},
updatePriceSavings: function(data) {
if ($.isEmptyObject(data)) {
return;
}
this.container.find(".price-list").html(adrma.format.currency(data.list)); // maybe decorate via adrma.format.currency
this.container.find(".price-you-save").html(adrma.format.currency(data.dollar) + " (" + data.percent + "%)");
},
updatePriceLabel: function(label) {
this.container.find(".price-label").html(label);
},
updateSaleExpiration: function(expiration) {
// NOTE: it works correctly, but becuase the Demo page has a few instances... it breaks the functionality..
var expiresEle = this.container.find(".price-expires").addClass("hide"),
listPriceEle = this.container.find(".price-list");
if (expiration) {
if (!expiresEle.length) { // if there is no exp ele yet, create one.
expiresEle = $("<span class='price-expires'>Exp. <time></time></span>");
expiresEle.insertAfter(listPriceEle);
}
expiresEle.removeClass("hide").find("time").text(expiration);
}
},
updateImage: function(image) {
if (!image) {
return;
}
var label = image[0].label,
index = image[1],
thumbsContainer = this.container.find(".thumbsContainer img");
//if no thumb container.. then manualy update image source
if (!thumbsContainer.length) {
return;
}
if (thumbsContainer.eq(0).hasClass("thumb-video")) { //because of video thumbs minuses from the index;
index++;
}
thumbsContainer.eq(index).trigger("mouseover");
//console.log('updateImage');
},
updateStock: function(prodData, ele) {
var stock = adrma.stockFormatter.getStock(prodData);
ele = ele || this.container.find(".stock");
ele.attr({
"class": stock.className,
"data-tooltip-class": "stockMessage",
"data-tooltip-content": stock.subStatusMessage
}).text(stock.value);
},
updateStockNotification: function(stock) {
// only for regular products
var saveItemContainer = this.container.find(".save-item"),
sku = saveItemContainer.closest("[data-sku]").attr("data-sku"),
stockNotify = saveItemContainer.find(".stockNotify");
if (stock !== "Out") {
stockNotify.addClass("hide");
return;
}
if (!stockNotify.length) {
//TODO: pass the id?
saveItemContainer.append('<a href="#" class="action stockNotify" data-action="notifyStock" data-sku="' + sku + '">Notify Me</a>');
} else {
stockNotify.removeClass("hide").attr("data-sku", sku);
}
},
updateOtherOptionSelects: function(productData, e) {
var self = this,
configData = productData.config,
i = 0,
optionContainer = $("[data-sku =" + self.sku + "]").find(".product-options").not(".active"),
selectEle,
path;
if (configData && configData.status) {
path = configData.path;
optionContainer.each(function(i, e) {
selectEle = $(e).find(".options-select");
for (; i < path.length; i++) {
adrma.selectUi.set(selectEle.eq(i), path[i], i == (path.length - 1) ? true : false); // silent set to false..
}
});
}
},
updateSummary: function() {
//console.log('updateSummary');
},
updateTags: function(tag) {
var buySection = this.container.find(".buy-section");
buySection.find(".item-tag").remove();
if (!tag) {
return;
}
buySection.find(" > h1").prepend(tag);
// always toggle all tags
//console.log('updateTags');
},
updateShippingTag: function() {
//console.log('updateShippingTag');
},
applyPackageConfigs: function() {
//BEWARE - this is the instance of the configured sku!!!
var self = this,
configData = self.getConfigData(),
requireConfig,
atcEle,
productData = adrma.productData[this.sku],
// this applies the config of a package...
packageItem = $(".package").find(".package-item[data-sku='" + self.sku + "']"),
imageSrc = adrma.query.json(productData.images, "id", configData.imageId);
if (imageSrc) {
img = packageItem.find(".productImage").attr("src", "/image/Product/Medium/" + imageSrc[0].name);
}
var button = packageItem.find(".selectSummary, .button").hide(),
href = button.attr("href");
// update summary
packageItem.find(".pkg-details").append("<p class='selectSummary'>You selected: <strong>" + adrma.format.capitalize(self.configToString(', ')) + "</strong> <a href='" + href + "' data-popup-class='quickView viewConfigureApply' title='Update selection' class='popup'>Edit Selection</a>");
// update stock
self.updateStock(configData, (packageItem.find(".stock")));
packageItem.attr("data-requires-config", false).removeClass("error");
packageItem.find("input.itemData")[0].name = configData.id;
requireConfig = this.container.closest(".buy-section.package").find(".package-item[data-requires-config = 'true']");
atcEle = packageItem.closest(".product").find(".add-to-cart");
if (!requireConfig.length) { // if we have 0 items left to config...
atcEle.removeClass("disabled");
} else {
atcEle.addClass("disabled");
}
},
updateConfigError: function updateConfigError(container, sku) {
sku = sku || this.sku;
container = container || this.container;
var self = this,
configPath = adrma.productData[sku].config.path;
//take into account packages
var optionsWrapper = container.find(".product-options"),
options = optionsWrapper.find(".options-container"),
configLength = configPath.length,
filter;
options.filter(function(i, e) {
filter = configLength === 1 ? 0 : configLength - 1; // fixes issue by reconfiguring... where it popped
return i > filter;
}).addClass("error");
},
rebindAtcAction: function() {
// no need for this, as it is already populated by server
var productData = adrma.productData[this.sku],
productType = productData.type,
atcEle = this.container.find(".add-to-cart"),
packageItems,
configLabels;
if (productType === "configurable") {
//atcEle.attr("data-action", "configAddToCart");
return;
}
if (productType === "package") {
packageItems = this.container.find(".package-item[data-requires-config = 'true']");
if (packageItems.length) {
atcEle.attr("data-action", "packageAddToCart").addClass("disabled");
}
}
},
bindActions: function() {
var self = this;
// bind global pub/sub
$.subscribe("product/configured/" + self.sku, function(e, data) {
self.onConfig(data, e);
});
},
getData: function(id) {
//TODO: allow checking multiple skus... and fetching if needed..
var self = this,
dfd = $.Deferred();
if (adrma.productData[id]) { //optioanlly ??? feed in with cached data if already has sku data ...
return dfd.resolve(adrma.productData[id]);
} else {
return adrma.fetchData({
url: "/API/productData",
data: {
sku: self.sku
},
dataType: "json"
}).done(function() {
// make sure to save the data to adrma.productData[id] = new data
});
}
},
renderConfigOptions: function(selectID, data) {
//console.log("renderConfigOptions ", selectID, data);
data = adrma.renameObjKeys(data, function(key) {
return key.replace(/"/mg, "\u201F\u000A");
});
var self = this,
selectEle = $("#" + selectID).find(".select-ui-options ul").html(tmpl(self.template, {
data: data
})).find("[data-imageid]").off(".updateImage").on("mouseenter.updateImage", function(e) {
//TODO unify image updates
var jThis = $(this),
imageid = jThis.attr("data-imageid"),
productContainer = jThis.closest("[data-sku]"),
sku = productContainer.attr("data-sku"),
imgSrc = adrma.query.json(adrma.productData[sku].images, "id", imageid);
imgSrc = imgSrc ? imgSrc[0].name : undefined;
if (imgSrc) {
productContainer.find(".productImage").attr("src", "/image/Product/large/" + imgSrc);
}
});
return selectEle;
},
markActive: function(selectEle) {
// this is needed to avoid repainting itself again.. by this.updateOtherOptionSelects
var productOptions = selectEle.closest(".product-options");
productOptions.addClass("active");
setTimeout(function() {
productOptions.removeClass("active");
}, 1000);
},
resolveConfigSku: function resolveConfigSku(sku) {
if (!sku) return;
var productData = adrma.productData[sku];
if (productData && productData.type && (productData.type === "configurable") && productData.config && productData.config.id) {
sku = productData.config.id;
}
return sku;
}
};
//
//
//
//
//
//
//
//
//
//
//
adrma.actions.add({
configAddToCart: function(e, jThis) {
e.preventDefault(); //after varifying config... this is still subjected to minicart is on/off
//This is just a mediator before passing in the the adrma.addToCart onAddToCart
//it bubbles up to closest <form>...
jThis = jThis.closest("form");
var productContainer = jThis.closest("[data-sku]"),
sku = productContainer.attr("data-sku"),
productData = adrma.productData[sku],
config = productData.config,
configObj = adrma.productData[sku].configObj;
if (productData.configLabels.length) { // is it really a configurable item
if (config && config.status) { // is it configured? -- fixed a issue where user interacted before it was initilized...
adrma.cart.addToCart(jThis, e);
return false; // in case that in the future, actions won't be e.preventedDefualt...
} else {
configObj.updateConfigError();
}
} else {
// why is it then a configAddToCart at all???
// if it is a config then get config data and turn it into inputs..
// BUT if it is a package then just submit, as the input should be in place...
// either way, pass on to adrma.addToCart.add
adrma.cart.addToCart(jThis, e);
}
},
packageAddToCart: function(e, jThis) {
e.preventDefault(); //after varifying config... this is still subjected to minicart is on/off
//This is just a mediator before passing in the the adrma.addToCart onAddToCart
//it bubbles up to closest <form>...
// TODO: if a package itself is conigurable
jThis = jThis.closest("form");
var productContainer = jThis.closest("[data-sku]"),
sku = productContainer.attr("data-sku"),
productData = adrma.productData[sku],
config = productData.config,
configObj = adrma.productData[sku].configObj,
valid = true;
if (productData.configLabels && productData.configLabels.length) { //is this is a configurable item itself.
if (!config.status) { // if the product itself is not configured, stop right there...
configObj.updateConfigError();
return false;
}
}
// insure that all items in package are configured..
// if it is a config then get config data and turn it into inputs..
// BUT if it is a package then just submit, as the input should be in place...
// pass on to adrma.addToCart.add
if (!productData.components) {
// report error.. this is not a package!!!
return false;
}
$.each(productData.components, function(i, e) {
var data = adrma.productData[e.id];
if (data.type === "configurable" && (!data.config || !data.config.status || !data.config.isApplied)) {
valid = false;
jThis.find("[data-sku = " + e.id + "]").addClass("error");
}
});
if (!valid) {
return false;
}
adrma.cart.addToCart(jThis, e);
},
productConfigure1: function(e, jThis, value) {
value = value.replace(/\u201F\u000A/mg, '"');
var ProductConfigPrototype = adrma.ProductConfig.prototype,
selectEle = jThis.closest(".select-ui"),
linkedSelect = selectEle.attr('data-linked-select-id'),
linkedSelectEle = linkedSelect ? $("#" + linkedSelect) : "",
sku = jThis.closest("[data-sku]").attr("data-sku"),
productData = adrma.productData[sku],
configObj = productData.configObj,
configPath = adrma.productData[sku].config.path,
copyConfigPath = configPath.slice(0),
doPublish = true;
ProductConfigPrototype.markActive(jThis);
//always reset the path on the "productConfigure1" change.
configPath = [];
configPath.push(value);
adrma.productData[sku].config.path = configPath;
if (linkedSelectEle.length) { // if there is a linked "second" config ui-select
adrma.selectUi.reset(linkedSelectEle, "silent");
if (!value) {
configPath.pop();
linkedSelectEle.addClass("disabled");
} else {
configObj.renderConfigOptions(linkedSelect, productData.configurations[value]);
selectEle.closest(".options-container").removeClass("error");
linkedSelectEle.removeClass("disabled");
}
if (!doPublish) {
return;
}
$.publish("product/configured/" + sku, {
sku: sku,
status: false
});
} else { // single config
if (!value) {
configPath.pop();
$.publish("product/configured/" + sku, {
sku: sku,
status: false
});
} else {
selectEle.closest(".options-container").removeClass("error");
$.publish("product/configured/" + sku, {
sku: sku,
status: true
});
}
}
if (value) {
selectEle.closest(".options-container").removeClass("error");
}
},
productConfigure2: function(e, jThis, value) {
value = value.replace(/\u201F\u000A/mg, '"');
var ProductConfigPrototype = adrma.ProductConfig.prototype,
selectEle = jThis.closest(".select-ui"),
sku = jThis.closest("[data-sku]").attr("data-sku"),
productData = adrma.productData[sku],
configObj = productData.configObj,
configPath = adrma.productData[sku].config.path,
copyConfigPath = configPath.slice(0),
doPublish = true;
ProductConfigPrototype.markActive(jThis);
if (value) {
productData.config.path[1] = value;
$.publish("product/configured/" + sku, {
sku: sku,
status: true
});
selectEle.closest(".options-container").removeClass("error");
} else {
if (productData.config.path.length > 1) {
adrma.productData[sku].config.path.pop();
}
$.publish("product/configured/" + sku, {
sku: sku,
status: false
});
}
}
});;
/* Comment Generated by Combres - Resource '/sup/js/adrma.getProductData.js' (Mode: Static) */
// require(adrma);
// require(adrma.ajax);
// will it require the invisibleParams?
// why shouldn't this be managed by session?
adrma.getProductData = function(sku) {
var dfd = $.Deferred(), // since we want to extend adrma.productData before this is resoloved..
pageType = adrma.pageInfo.pageType || ""; // LP-10428
adrma.fetchData({
url: "/api/catalog/GetProductData",
data: {
sku: sku,
pageType: pageType
},
dataType: "json"
}).done(function(response) {
$.extend(true, adrma.productData, response.data);
dfd.resolve(response);
});
return dfd;
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.RR.js' (Mode: Static) */
// modes = https://gist.github.com/anonymous/7400036
// /// <summary>
/// RichRelevance functionlaity is fully disabled (both instrumentation JS and placements)
/// </summary>
//Disabled = 0,
/// <summary>
/// Full live mode, the RR placements are dispalyed to customers.
/// RichRelevance functionlaity is fully enabled (both instrumentation JS and placements) on our side
/// </summary>
//Live = 1,
/// <summary>
/// Live listening mode, RR listen customer activities, but don't display placements.
/// RichRelevance functionlaity is fully enabled (both instrumentation JS and placements) on our side
/// </summary>
//Listening = 2,
/// <summary>
/// Live listening mode, RR listen customer activities, but don't display placements.
/// Difference from previous mode is that instrumentation JS is enabled,
/// but placements are disabled on our side.
/// In this mode on some pages our own most popular regions are displayed.
/// </summary>
//Hidden = 3,
/// <summary>
/// Testing mode, in this mode the reference to staging (test) RR host is used
/// </summary>
//Testing = 4,
//
adrma.RR = function(options) {
return this;
};
adrma.RR.prototype = {
RRLayerUrl: "//media.richrelevance.com/rrserver/js/0.4/p13n.js",
apiKey: "",
baseUrl: "//RRMODE.richrelevance.com/rrserver/",
clickthruServer: window.location.protocol + "//" + window.location.host,
modes: ["", "recs", "recs", "integration", "integration"], // hidden mode also gets recs (untill someone complains :) ;
init: function init(options) {
var self = this,
dfd = $.Deferred(),
// assign local var
RRSettingsMode = self.RRSettingsMode = +adrma.siteSettings.RichRelevanceIntegrationMode;
if (RRSettingsMode === 0) {
return dfd.reject("disabled");
}
$.extend(self, self.defaults, options);
self.baseUrl = self.baseUrl.replace("RRMODE", self.modes[RRSettingsMode]);
$.when(
adrma.fetchData({
url: self.RRLayerUrl,
dataType: "script",
returnPromise: true
}),
adrma.session.getSession,
adrma.template.get("RRTmpl")).done(function() {
RR.jsonCallback = function() {
self.renderView(RR.data.JSON.placements);
};
R3_COMMON = new r3_common();
R3_COMMON.setApiKey(self.apiKey);
R3_COMMON.setBaseUrl(self.baseUrl);
R3_COMMON.setUserId(adrma.session.session.sid);
R3_COMMON.setSessionId(adrma.session.session.sid);
self.setPlacments();
});
return dfd.promise();
},
getPrices: function getPrices(placement) {
var self = this,
dfd = $.Deferred(),
skus = $.map((placement.data), function(e, i) {
return e.id;
}).join(",");
adrma.getProductData(skus).done(function(productDataResponse) {
dfd.resolve(self.mashData(placement, productDataResponse));
});
return dfd;
},
mashData: function mashData(placement, productDataResponse) {
if (productDataResponse.status === "success") {
var id,
thisProductData,
productData = productDataResponse.data,
placementData = $.map(placement.data, function(e, i) {
id = e.id;
thisProductData = productData[id];
if (thisProductData) {
e.prices = thisProductData.prices;
}
if (e.stock === "Discontinued") {
return;
}
return e;
});
placement.data = placementData;
return placement;
}
},
setPlacments: function setPlacments() {
var pageInfo = adrma.pageInfo,
catName;
switch (pageInfo.pageType) {
case "homePage":
R3_COMMON.addPlacementType('home_page.json');
R3_COMMON.addPlacementType('home_page.json2');
R3_HOME = new r3_home();
rr_flush_onload();
r3();
break;
case "topCategory":
R3_COMMON.addPlacementType('category_page.right_json');
R3_CATEGORY = new r3_category();
R3_CATEGORY.setId(pageInfo.id);
R3_CATEGORY.setName(pageInfo.shortTitle); // category name as it should be displayed to customers
rr_flush_onload();
r3();
break;
case "listPage":
//make sure to catch search result pages..
R3_COMMON.addPlacementType('category_page.right_json');
R3_ITEM = new r3_item();
R3_ITEM.setId(pageInfo.id);
R3_ITEM.setRecommendable(true); // false if item is no longer available
rr_flush_onload();
r3();
break;
case "productPage":
R3_ITEM = new r3_item();
R3_ITEM.setId(pageInfo.id);
R3_ITEM.setRecommendable(true); // false if item is no longer available
R3_COMMON.addPlacementType('item_page.bottom_json');
rr_flush_onload();
r3();
break;
case "cartPage":
R3_ITEM = new r3_item();
R3_ITEM.setId(pageInfo.id);
R3_ITEM.setRecommendable(true); // false if item is no longer available
R3_COMMON.addPlacementType('cart_page.json');
rr_flush_onload();
r3();
break;
}
},
renderView: function renderView(placements) {
var self = this,
i = 0,
placementsLength = placements.length,
placement,
view,
render = function render(placement) {
view = tmpl("RRTmpl", placement);
$("#" + placement.id).html(view);
$.publish("RR-rendered", placement.id);
};
if (self.RRSettingsMode === 2) {
return; // settings dictates hiddency..
}
for (; i < placementsLength; i++) {
placement = placements[i];
self.getPrices(placement).done(render);
}
}
};
// initilizing RR for good!
adrma.init.add({
name: "richRelevance",
cb: function() {
var rr = new adrma.RR();
rr.init({
apiKey: adrma.siteSettings.RichRelevanceApiKey
});
},
defer: true
});;
/* Comment Generated by Combres - Resource '/sup/js/adrma.cartPage.js' (Mode: Static) */
adrma.cartPage = {
avoidSavingShippingMethod: false,
init: function() {
var self = this;
adrma.template.get("shoppingCartTmpl").then(function() {
// store some reusable selectors
self.cartItemWrapper = $("#item-list");
self.cartSummaryWrapper = $("#cart-summary-widget");
// get the data
self.getCartSummary()
// render
.done($.proxy(self.initRender, self))
// make sure to render renderAPIMessages;
// TODO: renderAPIMessages needs to be globalized
.done(adrma.notify.renderApiMessages)
// load NL - NEWWEB-16451
.done(self.loadNewLeaf)
// if it fails
.fail(self.renderGlobalFail);
// bind actions
self.bindActions();
});
},
getCartSummary: function getCartSummary() {
var self = this;
return adrma.fetchData({
url: "/api/getCartPageSummary",
type: "POST",
data: {},
dataType: "json"
}) // then store it in memory
.done($.proxy(self.storeData, self));
},
initRender: function initRender(response) {
var self = this,
settings,
data = {};
self.renderHeader();
self.renderItems();
self.renderCartCount();
self.renderSummary();
self.renderCoupons();
self.toggleCartEmpty();
if (self.data.switches) {
// apply settings
self.applySwitches();
}
// after most important part is rendered
settings = (adrma.storage.get("local", "settings") || {});
//when customer returns on cart page from nspc should restore correct shipping address country and zip,
//which he chosen on nspc and re-extract shipping methods with right shipping address country and zip values:
if (response && response.data.shipTo && response.data.shipTo.country && (response.data.shipTo.zip || (response.data.shipTo.country !== "US" && response.data.shipTo.country !== "CA"))) {
settings.country = response.data.shipTo.country;
settings.zip = response.data.shipTo.zip;
settings.isPob = response.data.shipTo.isPob; //LP-10939
adrma.storage.set("local", "settings", settings);
}
data.country = settings.country || "";
data.zip = settings.zip || "";
data.isPob = settings.isPob || ""; //LP-10939
if (data.country && (data.zip || (data.country !== "US" && data.country !== "CA"))) {
self.getShippingData(data).done(function(repsonse) {
self.storeData(repsonse);
self.updateTotal();
self.renderShipping();
self.renderCoupons();
});
} else {
self.renderShipping("no-data");
}
$.publish("cartPage/initRender", response);
if (self.data.campaigns && self.data.campaigns.length) {
$.publish("campaigns/gotData", {
campaigns: self.data.campaigns
});
}
},
updateSummary: function updateSummary() {
var self = this;
self.initRender();
},
refreshAfterAddToWishList: function refreshAfterAddToWishList() {
// LP-10373
var self = this;
// refresh view
self.getCartSummary().done($.proxy(self.initRender, self))
},
renderHeader: function renderHeader() {
var self = this;
$(".item-list-header").html(tmpl("cartHeaderTmpl", self.data.summary));
},
renderShipping: function renderShipping(data) {
var self = this,
container = "#shipping-methods-container";
if (data === "no-data") {
self.render({
container: container,
template: "noDataShippingTmpl"
});
self.updateTotal();
return;
}
// if all is good
// refactor --- have one render method and diffrend methods/options
self.render({
container: container,
template: "shippingOptionTmpl"
});
// maybe try to get the defualt... and pass it along..
self.setDefualtShippingMethod();
},
getShippingData: function getShippingData(data) {
return adrma.fetchData({
url: "/api/getCartShippingData",
type: "POST",
data: {
"country": data.country,
"zip": data.zip,
"isPob": data.isPob //LP-10939
},
dataType: "json"
});
},
saveShipData: function saveShipData(data) {
var self = this;
return adrma.fetchData({
url: "/api/saveShipData",
type: "POST",
data: {
"sid": data.sid,
"shipMethod": data.shipMethod,
"country": data.country,
"zip": data.zip,
"isPob": data.isPob
},
dataType: "json"
}) // then store it in memory
.done($.proxy(self.storeData, self));
},
setDefualtShippingMethod: function setDefualtShippingMethod(methodId) {
var self = this,
freeMethod,
shippingData = self.data.shippingData,
methods = shippingData.shippingMethods,
storedMethod = adrma.query.json(methods, "chosen", true),
setShipping = function(id) {
self.avoidSavingShippingMethod = true;
self.avoidShippingChange = true;
adrma.selectUi.set($("#shippingMethods"), id);
};
// check for chosen method OR the cheapest one...
if (storedMethod && storedMethod[0] && storedMethod[0].id) {
return setShipping(storedMethod[0].id);
}
methodId = methodId || (function getMethodId() {
// check for chosen method OR the cheapest one...
freeMethod = $.grep(methods, function grepMethods(e, i) {
return e.price === 0;
});
if (freeMethod.length) {
return setShipping(freeMethod[0].id);
} else {
// if we should auto select the first one, then posibly we can never get to this state...
// just grab the first one
if (methods && methods.length > 0) {
setShipping(methods[0].id);
}
}
})();
},
renderItems: function render(method, id) {
// allow passing in method (defualt is .html update is append)
var self = this,
data = self.data,
cartCount = data.summary.cartCount,
checkoutButton = $("#checkout-button");
self.cartItemWrapper.html(tmpl("itemsTmpl", data.items)).removeClass("loading");
if (cartCount && data.vme && data.switches.enableVMe) { // TODO: LP-10647
adrma.vMe.init(self.data.vme);
} else if (!cartCount) {
if ($(".empty-cart-recs").lenth) return; // LP-10053
$(".item-list").after(tmpl("emptyCartRRTmpl"));
}
},
applySwitches: function applySwitches() {
// TODO: wait for LP-10647
// Have all show/hide payment methods
// See LP-9749 for explanation
var self = this,
checkoutButton = $("#checkout-button"),
checkoutMethodsAlt = $(".checkout-methods-alt"),
paypalButton = $(".paypalButton"),
switches = self.data.switches;
if (!switches.enableAltCheckout) {
checkoutMethodsAlt.hide();
}
if (!switches.enableCheckout) {
checkoutButton.addClass("disabled");
checkoutMethodsAlt.hide();
}
if (!switches.enableBml) {
$("#BML-banner").hide();
}
if (!switches.enablePaypal) {
paypalButton.hide();
}
},
renderCartCount: function renderCartCount() {
var self = this,
count = self.data.summary.cartCount;
adrma.miniCart.updateCountView(count);
$("#listHeaderCartCount").text(count);
},
renderSummary: function renderSummary() {
var self = this;
self.cartSummaryWrapper.html(tmpl("summaryTmpl", self.data.summary)).removeClass("loading");
},
render: function render(options) {
var template = options.template || "",
method = options.method || "html",
container = $(options.container),
data = options.data || {};
container[method](tmpl(template, data)).removeClass("loading");
//for later optiomization
},
storeData: function storeData(response) {
var self = this,
type = response.type,
data = response.data;
if (response.status !== "success" && $.isEmptyObject(data)) {
return;
}
self.data = self.data || {};
self.data.promosSubstraction = 0;
switch (type) {
// TODO case of removeFromCart.. remove from items...
// AddToCart... add To items
case "GetCartPageSummary":
if (data.links) {
self.data.links = data.links;
}
if (data.items) {
self.data.items = data.items;
}
if (data.summary) {
self.data.summary = data.summary;
}
if (data.productData) {
adrma.productData = data.productData || {}; // ??? re-evaluate
adrma.productData = $.extend(adrma.productData, data.productData); // perhaps change to global adrma.productData
}
if (data.switches) {
self.data.switches = data.switches;
}
if (data.vme) { // TODO: once LP-10647 is implimented delete..
self.data.vme = data.vme;
}
if (data.campaigns) {
self.data.campaigns = data.campaigns;
}
break;
case "GetCartShippingData":
self.data.shippingData = data;
self.data.summary = data.summary;
self.calculateCoupons();
break;
case "SaveShipData":
self.data.items = data.items;
self.data.shippingData = data;
self.data.summary = data.summary;
self.calculateCoupons();
break;
case "AddCouponCode":
self.data.summary = data.summary;
self.calculateCoupons();
break;
case "RemoveCouponCode":
self.data.summary = data.summary;
self.calculateCoupons();
break;
case "AddToCart":
self.data.summary = data.summary;
$.extend(self.data.items, data.items);
$.extend(adrma.productData, data.productData); // perhaps change to global adrma.productData
self.calculateCoupons();
break;
case "RemoveFromCart":
self.data.summary = data.summary;
if (data.items) {
self.data.items = data.items;
}
break;
case "AddToWishList":
self.data.summary = data.summary;
if (data.items) {
self.data.items = data.items;
}
break;
case "ChangeItemQty":
self.data = response.data;
break;
}
},
onAddToCart: function onAddToCart(sku, qty) {
// call regular add to cart which will get back 2 parts... if type cart is passed..
var self = this,
data = {};
qty = qty || 1; // falls back to 1
data[sku] = {
qty: qty
};
// call api to remove
// on callback
adrma.cart.addToCart(data, {
type: "cartPage"
})
// done function moved to pub/sub "cart/addedItem"
.fail(function addTocartFail(response) {
// body...
});
},
onRemoveFromCart: function onRemoveFromCart(cartLineId, ele) {
// call regular remove from cart which will get back 2 parts... if type cart is passed..
var self = this,
dfd = $.Deferred(),
container = $("[data-cart-lineid=" + cartLineId + "]");
if (ele) {
ele.addClass("removing-qty-msg").text("Removing...");
}
// call api to remove
// on callback
adrma.cart.removeFromCart(cartLineId, {
type: "cartPage",
ele: ele
}).done(function(response) {
if (response.status !== "success") {
dfd.reject(response);
} else {
dfd.resolve(response);
}
self.storeData(response);
container.slideUp(300, function() {
container.remove();
self.updateSummary();
});
}).fail(function(response) {
dfd.reject(response);
ele.text("Remove");
if (response) {
self.storeData(response);
container.slideUp(300, function() {
container.remove();
self.updateSummary();
});
}
});
return dfd;
},
onShippingDestChange: function onShippingDestChange(destData) {
var self = this;
self.saveShipData(destData).done(function(response) {
if (response.status !== "success") {
adrma.notify.renderApiMessages(response);
self.updateSummary();
}
self.renderShipping();
self.updateTotal();
self.renderCoupons();
});
},
onChangedShippingMethod: function onChangedShippingMethod(methodId) {
// set the data
var self = this,
methods = self.data.shippingData.shippingMethods,
selectedMethod = adrma.query.json(methods, "chosen", true),
newMethod = adrma.query.json(methods, "id", methodId);
if (selectedMethod) {
selectedMethod[0].chosen = false;
}
if (newMethod) {
newMethod[0].chosen = true;
}
var data = {
"country": self.data.shippingData.shipTo[0],
"zip": self.data.shippingData.shipTo[1],
"shipMethod": newMethod[0].id,
"isPob": self.data.shippingData.shipTo[2]
};
if (self.avoidSavingShippingMethod) { // fixed saving shipping method on server side on init render - LP-9995
self.avoidSavingShippingMethod = false;
self.updateTotal();
return;
}
self.saveShipData(data).done(function(response) {
if (response.status !== "success") {
adrma.notify.renderApiMessages(response);
self.updateSummary();
}
self.updateTotal();
self.renderCoupons();
});
},
updateTotal: function updateTotal() {
var self = this,
data = self.data,
subTotal = data.summary.subTotal ? data.summary.subTotal : 0,
shippingData = data.shippingData,
methods = shippingData ? shippingData.shippingMethods : null,
shippingMethod = adrma.query.json(methods, "chosen", true),
shippingMethodPrice = shippingMethod && shippingMethod[0].price ? shippingMethod[0].price : 0,
taxes = shippingMethod && shippingMethod[0].taxes ? shippingMethod[0].taxes : 0,
couponTotal = data.couponsTotal || 0,
grandTotal;
if ($.isNumeric(shippingMethodPrice)) {
grandTotal = subTotal + shippingMethodPrice + taxes - couponTotal;
} else {
grandTotal = "TBD"; // LP-10244, TODO: in the future add/remove a tooltip. with a server refrence..
}
// update
$("#tax-val").text(taxes && taxes > 0 ? adrma.format.currency(taxes) : "--");
$("#grand-total-val").text(adrma.format.currency(grandTotal));
},
onAddCoupon: function onAddCoupon(code, ele) {
var self = this;
return adrma.fetchData({
url: "/API/addCouponCode",
type: "POST",
data: {
code: code
},
dataType: "json"
}).done(function(response) {
if (response.status === "success") {
self.onAddCouponSucsess(response, ele);
} else {
self.onAddCouponFail(response, ele);
}
}).fail(function() {
self.onAddCouponFail(response, ele);
});
},
onAddCouponSucsess: function onAddCouponSucsess(response, ele) {
var self = this;
self.storeData(response);
self.renderCoupons();
self.updateTotal();
$(".promo-add-container").hide();
$("#coupon-code").val("");
$(".checkout-methods-alt").hide();
},
onAddCouponFail: function onAddCouponFail(response, ele) {
var self = this;
adrma.Validate.prototype.onValidationError(ele, response);
},
onRemoveCoupon: function onRemoveCoupon(code) {
var self = this;
return adrma.fetchData({
url: "/API/removeCouponCode",
type: "POST",
data: {
code: code
},
dataType: "json"
}).done(function(response) {
self.storeData(response);
self.renderCoupons();
self.updateTotal();
$(".promo-add-container").hide();
$(".checkout-methods-alt").show();
}).fail(function() {});
},
calculateCoupons: function calculateCoupons() {
var self = this,
data = self.data,
couponData = data.summary.coupons,
total = 0;
$.each(couponData, function(i, e) {
total += e.savings;
});
data.couponsTotal = total;
},
renderCoupons: function renderCoupons() {
// all data is handled via the stored data..
var self = this;
self.calculateCoupons();
self.render({
container: "#promoContainer",
template: "promoTmpl"
});
},
onMoveToWishlist: function onMoveToWishlist(sku, ele) {
var self = this,
container = $("[data-sku='" + sku + "']").closest(".item"),
itemTitle = adrma.format.elipses(adrma.productData[sku].shortTitle, 20, "..");
ele.text("Moving to wishilst...");
$.when(
adrma.addToWishlist ? true : adrma.fetchData({
url: "/sup/js/adrma.addToWishlist.js",
dataType: "script"
})).then(function() {
adrma.addToWishlist.init(sku, "cartPage", self.data.customerId).done(function(response) {
self.storeData(response);
container.slideUp(300, function() {
container.remove();
self.updateSummary();
});
// LP-10651
if (adrma.pageInfo.siteId === "AD") {
adrma.notify.add({
html: itemTitle + " was sucsessfully moved to the wishlist"
});
}
}).fail(function() {
ele.text("Move to wish list");
});
});
},
onChangeQty: function onChangeQty(jThis) {
//jThis === form
jThis.removeClass("error").find(".error").remove();
var self = this,
dfd = $.Deferred(),
qtyEle = jThis.find(".item-qty-feild"),
qty = parseInt(qtyEle.val(), 10),
minQty = qtyEle.attr("data-min-qty"),
maxQty = qtyEle.attr("data-max-qty"),
showQtyError = function showQtyError(message) {
jThis.addClass("error");
jThis.append("<p class='message error'>" + message + "</p>");
},
cartDetailId = jThis.closest(".item").attr("data-cart-lineid"),
successHandler = function successHandler(response) {
dfd.resolve(response);
},
failHandler = function failHandler(response) {
//show error message
adrma.notify.renderApiMessages(response);
dfd.reject(response);
};
if (isNaN(qty)) {
showQtyError("please enter a valid number");
return dfd;
}
if (minQty && qty < minQty && minQty > 1) {
showQtyError("Minimum Qty for this item is " + minQty);
return dfd;
}
if (maxQty && qty > maxQty && maxQty > 0) {
showQtyError("Maximum Qty for this item is " + maxQty);
return dfd;
}
adrma.fetchData({
url: "/api/changeItemQty",
type: "POST",
dataType: "json",
data: {
cartDetailId: cartDetailId,
qty: qty
}
}).done(function changeItemQtySucsess(response) {
self.storeData(response);
self.updateSummary();
if (response.status !== "success") {
return failHandler(response);
};
successHandler(response);
$.publish("cart/changedQty", response);
}).fail(function changeItemQtyFail(response) {
// handle fail
failHandler(response);
});
return dfd;
},
toggleCartEmpty: function toggleCartEmpty() {
var self = this,
isEmptyCart = $.isEmptyObject(this.data.items),
body = $("body");
if (!isEmptyCart && !self.initNonEmptyCart) { // only set once
// we use cart-not-empty so it keeps on showing RR's
body.addClass("cart-not-empty");
self.initNonEmptyCart = true;
}
$("#checkout-button").toggleClass("disabled", isEmptyCart);
body.toggleClass("cart-empty", isEmptyCart);
$("#empty-cart-continue nav").html(adrma.getPageVisits(true));
},
proceedToCheckout: function proceedToCheckout(e, jThis) {
e.preventDefault();
if (jThis.hasClass("disabled")) return;
var self = this,
visibleButtons = $('form.item-qty').find('[type="submit"]:visible'),
dfds = [],
redirect = function redirect(promise) {
window.location = jThis.attr("href");
};
for (var i = 0; i < visibleButtons.length; i++) {
var button = visibleButtons[i],
input = $(button).closest('form').find('.item-qty-feild'),
inputValue = input.val();
if (inputValue > 0) {
dfds.push(self.onChangeQty(visibleButtons.eq(i).closest("form")));
} else {
var container = input.closest(".item"),
cartLineID = container.attr("data-cart-lineID"),
removingLink = container.find('a[data-action="removeFromCart"]');
dfds.push(self.onRemoveFromCart(cartLineID, removingLink));
}
}
if (dfds.length) {
// do redirect only when all requests are ended
$.when.apply($, dfds).always(function() { // we want to always redirect to checkout, even if these actions fail
redirect();
});
} else {
redirect();
}
},
bindActions: function bindActions() {
var self = this;
// sticky checkout box - LP-9610
// TODO: add breakpoint / meadia query exclusion... Exclude action from viewport < 768px
adrma.positionPortals.add({
name: "stickyCartCheckout",
breakpoint: ".cart-checkout",
activeClass: "cart-sticky",
targetEle: "body",
onReach: function(breakpointEle, breakpointVal, targetEle, activeClass) {
if (true) { // check stick header and if true add 68 to the calc
console.log(breakpointVal);
}
var cartSummary = $(".cart-summary"),
outerHeight = cartSummary.outerHeight(),
paddingCalc = outerHeight + 25,
topCalc = outerHeight - $(".cart-checkout").outerHeight();
cartSummary.css("top", "-" + topCalc).closest(".col2").css("paddingTop", paddingCalc);
targetEle.addClass(activeClass);
},
unReach: function(breakpointEle, breakpointVal, targetEle, activeClass) {
targetEle.removeClass(activeClass);
var cartSummary = $(".cart-summary").closest(".col2").css("paddingTop", 0);
}
});
$.extend(adrma.actions, {
oldPopup: function oldPopup() {
// grab the href and open the old window.open
// optional params (settings and position)
},
cartItemQtyInputInteraction: function cartItemQtyInputInteraction(e, jThis) {
//console.log(e.type);
console.log("cartItemQtyInputInteraction");
},
cartItemQtyChange: function cartItemQtyChange(e, jThis) {
//
console.log("cartItemQtyChange");
},
removeFromCart: function removeCartLine(e, jThis) {
// get cartLineID
var container = jThis.closest("[data-cart-lineID]");
cartLineID = container.attr("data-cart-lineID");
self.onRemoveFromCart(cartLineID, jThis);
},
toggleCoupon: function toggleCoupon(e, jThis) {
$(".promo-add-container").toggle();
jThis.toggleClass("open");
},
addCoupon: function addCoupon(e, jThis) {
var code = $("#coupon-code").val();
if (!code) {
return false;
}
self.onAddCoupon(code, jThis);
},
removeCoupon: function removeCoupon(e, jThis) {
var code = jThis.attr("data-code");
self.onRemoveCoupon(code, jThis);
},
setShippingMethod: function setShippingMethod(e, jThis, value) {
console.log(value);
self.onChangedShippingMethod(value);
},
moveToWishlist: function moveToWishlist(e, jThis) {
var sku = jThis.attr("data-sku");
self.onMoveToWishlist(sku, jThis);
},
pagePrint: function pagePrint() {
window.print();
},
addCoralDonation: function addCoralDonation(e, jThis) {
var sku = $("#CRASku").val();
if (!sku) return;
self.onAddToCart(sku);
},
addToCart: function addToCart(e, jThis) {
// overwriting addToCart
var sku = jThis.closest("[data-sku]").attr("data-sku"),
isPopup = jThis.closest(".popupPageFill");
self.onAddToCart(sku);
if (isPopup.length) {
isPopup.find(".popupExit").trigger("click");
}
},
changeItemQty: function changeItemQty(e, jThis) {
jThis.addClass("disabled"); // LP-10756
self.onChangeQty(jThis).always(function onChangeQty() {
// in reality only needed for the reject phase.
jThis.removeClass("disabled");
});
e.preventDefault();
},
loadAccessories: function loadAccessories(e, jThis) {
if (!self.loadedAccessories) {
$('<link rel="stylesheet" href="/sup/css/LP/listingMini.css"/>').appendTo("body");
$('<link rel="stylesheet" href="/sup/css/LP/cartAccessoriesPopup.css"/>').appendTo("body");
self.loadedAccessories = true;
}
},
cartLoadConfigView: function cartLoadConfigView(e, jThis) {
//adrma.actions.configAddToCart.apply(self, [e, jThis]);
},
proceedToCheckout: function proceedToCheckout(e, jThis) {
self.proceedToCheckout(e, jThis);
}
});
$("#item-list").on("keydown keyup focus blur", ".item-qty-feild", function(e) {
var type = e.type,
jThis = $(this),
qtyValue = jThis.val(),
code;
if (type === "keydown") {
code = e.keyCode ? e.keyCode : e.which;
if (code === 13) {
if (qtyValue == 0) {
var container = jThis.closest(".item"),
cartLineID = container.attr("data-cart-lineID"),
removingLink = container.find('a[data-action="removeFromCart"]');
self.onRemoveFromCart.apply(self, [cartLineID, removingLink]);
} else {
self.onChangeQty.apply(self, [jThis.closest("form")]);
}
e.preventDefault();
return false;
}
}
if (type === "keyup") {
if (qtyValue && (!$.isNumeric(qtyValue) || qtyValue < 0)) jThis.val(1);
if (qtyValue == 0) {
jThis.prev(".button").val("Remove");
jThis.closest("form").attr("data-action", "removeFromCart");
} else {
jThis.prev(".button").val("Update");
jThis.closest("form").attr("data-action", "changeItemQty");
}
}
if (type === "focusin") {
if (!jThis.attr("data-orig-value")) {
jThis.attr("data-orig-value", jThis.val());
}
jThis.prev(".button").show();
}
if (type === "focusout") {
if (jThis.attr("data-orig-value") == qtyValue) {
jThis.prev(".button").hide();
}
}
});
$.subscribe("setShippingDest", function(e, data) {
self.onShippingDestChange(data);
});
$.subscribe("cart/addedItem", function(e, response) {
self.storeData(response);
self.updateSummary();
});
$.subscribe("cart/addItemFailed", function(e, response) {
self.storeData(response);
self.updateSummary();
});
}
};
adrma.init.add({
name: "init-cart",
cb: function() {
adrma.cartPage.init();
}
});;
/* Comment Generated by Combres - Resource '/sup/js/adrma.campaigns.js' (Mode: Static) */
// LP-10501 campaigns
// Since this is triggered via a pub/sub event it must not run via adrma.init
$.subscribe("campaigns/gotData", function(e, data) {
$("#campaignsPlaceholder").html(tmpl("campaignsTmpl", {
campaigns: data.campaigns
})).show();
});;
/* Comment Generated by Combres - Resource '/sup/js/adrma.stockFormatter.js' (Mode: Static) */
adrma.stockFormatter = {
getStock: function (productData) {
if (productData) {
var result = {},
subStatus = productData.subStatus,
stock = productData.stock;
if (stock) {
result.className = "stock stock-" + (subStatus ? "special stock hoverInfo" : stock.toLowerCase());
result.value = subStatus ? subStatus.name : stock + ((stock.toLowerCase() === "out") ? " of" : " ") + " Stock";
result.subStatus = subStatus ? subStatus.name : "";
result.subStatusMessage = subStatus ? subStatus.description : "";
return result;
}
}
return null;
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.validate.js' (Mode: Static) */
//Validator
adrma.Validate = function() {
if (this instanceof adrma.Validate) {
return this;
} else {
return new adrma.Validate();
}
};
adrma.Validate.prototype = {
defaults: {
errorClass: "error",
fieldContainer: "label",
formEle: ""
},
init: function(config) {
var self = this;
$.extend(this, this.defaults, config);
self.formEle = $(self.formEle);
if (self.hasFormValidation()) {
// still need to decide what to do.. (perhaps allow config to bypass or pass adrma.Validate)
};
self.formEle.on("submit", function() {
return self.validate(self.formEle);
});
return this;
},
validate: function(formEle) {
var self = this,
inputs = formEle.find(":input"),
input,
inputValid,
valid = true;
inputs.each(function(i, e) {
inputValid = self.validateInput(e);
if (!inputValid) {
valid = false;
}
});
return valid;
},
clearValidationErrors: function(formEle) {
formEle = formEle || this.formEle;
formEle.find(":input").removeClass("error");
formEle.find(".message.error").remove();
},
validateInput: function(fieldEle) {
var self = this,
input = $(fieldEle),
val = input.val(),
type = input.attr("type"),
pattern = input.attr("pattern"),
maxLength = input.attr("data-max-length"),
required = input.attr("required"),
validateErrorMessage = input.attr("data-validate-error") || (required ? "required" : "invalid value"),
valid = true,
regExpRefAttr = input.attr("data-regexp-ref"),
regExpRef = regExpRefAttr,
regExp,
regExpMap = adrma.regExp,
fieldContainer = input.closest(self.fieldContainer);
fieldContainer = fieldContainer.length ? fieldContainer : input;
if ((required || val) && (regExpMap[type] || pattern || regExpRef)) {
regExpRef = regExpMap[regExpRef] || pattern || regExpMap[type];
if (type === "zip" && !regExpRefAttr) {
// temp fix for zip validation (defualts to US)
regExpRef = regExpMap.usZip;
}
if (regExpRef && regExpRef.test) {
valid = regExpRef.test(val);
}
} else {
valid = required ? val : true;
}
if (valid && maxLength) {
valid = val.length <= maxLength;
validateErrorMessage = "Value shouldn't be longer than " + maxLength + " chars";
}
fieldContainer.find(".message.error").remove();
if (!valid) {
fieldContainer.append("<span class='message error'>" + validateErrorMessage + "</span>");
}
fieldContainer[(valid ? "remove" : "add") + "Class"](self.errorClass);
return valid;
},
hasFormValidation: function() { // has built in form validation http://bit.ly/19MuXLX
return (typeof document.createElement('input').checkValidity == 'function');
},
onValidationError: function(formEle, response) {
var self = this,
ele;
formEle = $(formEle); // wrap in jQuery in case its a selector string.
formEle.find(".message.error").remove();
formEle.find(".error").removeClass("error");
$.each(response.messages, function(i, e) {
if (e.field === "general") {
ele = formEle;
} else {
ele = formEle.find("[name='" + e.field + "']");
}
ele.closest("label").addClass("error");
ele.after("<p class='message error'>" + e.text + "</p>");
});
}
};
// All regexes that can be tested against.
// http://bit.ly/10bQnBF
adrma.regExp = {
url: /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/,
cc: /^[0-9]{16}$/,
datetime: /^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/,
email: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
tel: /^(?:\+\d{3}\s?)?\d{3}[ ]?[-]?[ ]?\d{4}$/,
zip: {
'us': /^(\d{5}([\-]\d{4})?)$/ // should be removed once tested...
},
usZip: /^\d{5}$/,
caZip: /^[A-Z][0-9][A-Z][\s]?[0-9][A-Z][0-9]$/i,
usCurrency: /^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{1,2})?$/
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.countries.js' (Mode: Static) */
adrma.countries = {
list: [],
get: function get() {
var self = this,
dfd = $.Deferred(),
countryList = adrma.storage.get("session", "countryList");
if (countryList) {
self.list = countryList;
return dfd.resolve();
}
adrma.fetchData({
url: "/api/getCountries",
dataType: "JSON"
}).done(function(response) {
self.list = response.data;
adrma.storage.set("session", "countryList", self.list);
dfd.resolve();
});
return dfd;
},
render: function render(selectedCountry, callback) {
var self = this,
dfd = $.Deferred(),
countriesStatesTemplate = "countriesStateSelectTmpl",
template = adrma.template,
renderedTmpl;
$.when(
self.get(),
template.get(countriesStatesTemplate)).done(function() {
var selected = self.getCountry(selectedCountry),
data = {};
data.selected = selected;
data.list = self.list;
renderedTmpl = template.render(countriesStatesTemplate, data);
callback = $.isFunction(callback) ? callback(renderedTmpl) : "";
dfd.resolve(renderedTmpl);
});
return dfd;
},
getCountry: function getCountry(selectedCountry) {
var self = this;
return $.grep(self.list, function(el){
return el[0] == selectedCountry || el[1] == selectedCountry;
})[0];
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.vMe.js' (Mode: Static) */
adrma.vMe = {
dispatcher: null,
eventHandlers: {},
getModelUrl: "",
nspcUrl: "",
dispatcherEventHandler: null,
init: function(options) {
//need initialize <v:init>, <v:buy>, <div id="v-root"> elements only one time at page
if ( $("#vmeInit").length === 0)
{
//first V.me payment method initialization
adrma.vMe.setDispatcher();
adrma.vMe.nspcUrl = options.vmeNspcRedirectUrl;
var vMeInitSection = "<v:init id='vmeInit' logo-url='" + options.vmeInitLogoImg + "' apikey='" + options.vMeApiKey + "' locale='en_US' country='US'></v:init>",
vMeButton = "<v:buy id='vmeVBuy' token='" + options.token + "' amount='" + options.amount + "' product-id='" + options.productId + "' merch-trans='" + options.merchantTransactionId + "' callback='adrma.vMe.dispatchEvent' collect-shipping='true' button-style='payment-link-0' currency='USD' process='validate'></v:buy>";
//Recomendation: <v:init> section should be first section after <body> tag:
$('body').prepend(vMeInitSection);
$("#vMeContainer").first().html(vMeButton);
//Add v.me v-root section. It must be the last section in <body> tag:
$('body').append('<div id="v-root"></div>');
//Displaying V.me button on the page(request to widget which create V.me button HTML content and place it on the page):
adrma.fetchData({
url: options.vmeScriptSource,
dataType: "script"
});
}
},
setEventDispatcherHandler: function()
{
adrma.vMe.dispatcherEventHandler = this;
},
dispatchBeforeSummary: function(data, resume)
{
if (adrma.vMe.dispatcherEventHandler)
{
dispatcherEventHandler.handleBeforeSummary(data, resume);
}
},
dispatchEvent: function (evtType, evtData)
{
if (adrma.vMe.dispatcherEventHandler)
{
adrma.vMe.dispatcherEventHandler.handleEvent(evtType, evtData);
}
},
setBuyButtonValues: function (buyButton)
{
var buyButton = $("v\\:buy");
buyButton.attr("merch-trans", buyButton.merchantTransactionId);
buyButton.attr("product-id", buyButton.productId);
buyButton.attr("amount", buyButton.amount);
buyButton.attr("token", buyButton.token);
},
initializeEventHandlers: function()
{
adrma.vMe.eventHandlers["purchase.init"] = adrma.vMe.purchaseInit;
adrma.vMe.eventHandlers["purchase.success"] = adrma.vMe.purchaseSuccess;
adrma.vMe.eventHandlers["purchase.cancel"] = adrma.vMe.purchaseCancel;
adrma.vMe.eventHandlers["purchase.pending"] = adrma.vMe.purchasePending;
},
purchaseInit: function(data)
{
},
updateUIForSuccess: function()
{
},
purchaseSuccess: function(data)
{
$.ajax({
url: adrma.vMe.nspcUrl + "/Checkout/ProceedToCheckoutForVMe",
type: "get",
data:
{
callId: data.callId,
amount: data.subTotal.amount,
collectShipping: true
},
success: function (response) {
window.location.href = response.Data.redirectUrl;
}
}); //RM: Alex Poddubko
},
purchaseCancel: function(data)
{
},
purchasePending: function(data)
{
},
setDispatcher: function()
{
adrma.vMe.setEventDispatcherHandler();
adrma.vMe.dispatcher = this;
adrma.vMe.initializeEventHandlers();
},
handleBeforeSummary: function(data, resume)
{
resume(data);
},
handleEvent: function (evtType, evtData)
{
if (adrma.vMe.eventHandlers[evtType])
{
adrma.vMe.eventHandlers[evtType](evtData);
}
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.setShippingDest.js' (Mode: Static) */
//TODO: bring in the tmpl in the /sup/static/shippingInfo.html
adrma.setShippingDest = {
init: function() {
var self = this;
adrma.countries.render().done(function(data) {
countriesOptions = data;
setTimeout(function() {
self.render({
container: ".setShippingDest .popupContent",
method: "html",
template: "setShippingDestinationTmpl",
data: data
});
self.setUserSettings();
self.bindActions();
}, 100);
});
},
storeSettings: function(prop, val) {
adrma.storage.set("local", "settings", (function() {
var storedSettings = adrma.storage.get("local", "settings"),
data = storedSettings || {};
data[prop] = val;
return data;
})());
},
bindActions: function() {
var self = this;
// validate
validator = new adrma.Validate()
validator.init({
formEle: ".setShippingDestinationForm"
});
adrma.actions.add({
setShippingDest: function(e, jThis) {
setTimeout(function() {
jThis.find("label").removeClass("error");
var data = jThis.serializeObject();
data.isPob = jThis.find("#pob").prop("checked");
$.publish("setShippingDest", data);
$(".popupExit").trigger("click");
self.storeSettings("country", data.country);
self.storeSettings("zip", data.zip);
self.storeSettings("isPob", data.isPob);
}, 10);
e.preventDefault();
},
shippingCountryChange: function shippingCountryChange(e, jThis) {
var val = jThis.val() || "",
country = val.toLowerCase(),
zip = $("#shippingDestZip"),
zipEle = $("#shippingDestZip").find("input"),
settings = adrma.storage.get("local", "settings");
if (country === "us" || country === "ca") {
zipEle.attr("data-regexp-ref", country + "Zip");
zipEle.attr("required", "required");
if (settings && settings.zip) {
zipEle.val(settings.zip);
}
zip.show();
} else {
zipEle.removeAttr("data-regexp-ref required");
zipEle.val("");
zip.hide();
}
}
});
},
setUserSettings: function setUserSettings(argument) {
var settings = adrma.storage.get("local", "settings"),
popupShipping = $(".setShippingDestinationForm"),
countryEle = popupShipping.find("[name=country]");
if (settings && settings.country) {
countryEle.val(settings.country);
setTimeout(function() {
adrma.actions.shippingCountryChange(null, countryEle);
}, 1);
}
if (settings && settings.zip) {
popupShipping.find("[name=zip]").val(settings.zip);
}
if (settings) {
popupShipping.find("[name=pob]").prop("checked", settings.isPob);
}
},
render: function(options) {
$(options.container)[options.method](tmpl(options.template, options.data || {}));
}
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.getPageVisits.js' (Mode: Static) */
adrma.getPageVisits = function(asLinks) {
var visitLog = adrma.storage.get("local", "pageVisitLog", true) || [],
visitLogLength = visitLog.length,
i = 0,
visitLogArray = [];
for (; i < visitLogLength; i++) {
visitLogArray.push("<a href='" + visitLog[i].url + "'>" + visitLog[i].title + "</a>");
}
if (asLinks) {
return visitLogArray.join("");
}
return visitLog;
};;
/* Comment Generated by Combres - Resource '/sup/js/adrma.populateContinueShopping.js' (Mode: Static) */
adrma.init.add({
name: "populateContinueShopping",
cb: function() {
$(".continueShopCntnr").append(adrma.getPageVisits("true"));
},
defer: true
});;
/* Comment Generated by Combres - Resource '/sup/js/adrma.ado-cartPage.js' (Mode: Static) */
// adorama specific cart page JS
adrma.init.add({
name: "positionPortals",
cb: function() {
var positions = adrma.positionPortals;
positions.init({
throttle: false
});
}
});
// LP-10606
(function() {
var onCartChange = function onCartChange() {
adrma.userSessionizePage.init();
adrma.storage["delete"]("session", "cartSummery");
},
onAdoramaGotSession = function onAdoramaGotSession(e, data) {
// TODO: make sure to to only once.. (since the session is called on every cart change...)
var sessionPhone = data.Display_Phone_Number_Array;
$(".tel-tollfree").text(sessionPhone[0]);
};
$.subscribe("userSession", onAdoramaGotSession); // still "also" calling legacy adorama session..
$.subscribe("cartPage/addedItem", onCartChange);
$.subscribe("cart/removedItem", onCartChange);
$.subscribe("cart/changedQty", onCartChange);
var mode = $("#mode").val();
if (mode === "fed" || mode === "state") {
adrma.fetchData({
url: "/sup/js/adrma.eQuote.js",
dataType: "script"
});
}
var origBeforeRemoveFromCart = adrma.cart.beforeRemoveFromCart; // ensures that the default check is also checked "before"
adrma.cart.beforeRemoveFromCart = function beforeRemoveFromCart(cartDetailId, options) {
if (!origBeforeRemoveFromCart(cartDetailId, options)) {
return false;
}
var item = options.ele ? options.ele.closest(".item") : "",
isPackage = item && item.attr("data-is-package");
if (isPackage) {
adrma.popup.trigger({
title: "Please confirm",
popupClass: "popup500 complex-rebates-confirm",
html: "When removing the main item from the bundle, all remaining items will be removed as well. Do you want to continue removing? <div class=\"confirm-action-container\" data-cart-lineID=\"" + cartDetailId + "\"><a class=\"action button small secondary\" data-action=\"closePopup\">Cancel</a> <a class=\"action button small primary\" data-action=\"removeFromCart,closePopup\" href=\"#\">Remove Item</a></div>"
});
return false;
}
return true;
};
})();;
/* Comment Generated by Combres - Resource '/sup/js/adrma.3rdParty-newLeaf.js' (Mode: Static) */
adrma.newLeaf = {
init: function(e, response) {
if ($(".ie8").length) return;
var siteSettings = adrma.siteSettings,
abFlag = adrma.config && adrma.config.NLC;
if (!siteSettings.isNewLeafActive || !abFlag) return;
adrma.fetchData({
url: siteSettings.newLeafResource,
dataType: "script"
});
}
};
// newLeaf LP-10215
$.subscribe("cartPage/initRender", adrma.newLeaf.init);
// LP-10448
// $.subscribe("cartPage/addedItem", adrma.newLeaf.init); // currently does a complete refresh.
// $.subscribe("cart/removedItem", adrma.newLeaf.init); // currently does a complete refresh.
// $.subscribe("cart/changedQty", adrma.newLeaf.init); // currently does a complete refresh.
// TODO: newLeaf to check if warrenty exsits before injecting...;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.urlParams.js' (Mode: Dynamic) */
// parse the url
//http://stackoverflow.com/a/9402569/56449
adrma.url_args_decode = function (url) {
var args_enc, el, i, nameval, ret;
ret = {};
// use the DOM to parse the URL via an 'a' element
el = document.createElement("a");
el.href = url;
// strip off initial ? on search and split
args_enc = el.search.substring(1).split('&');
if(args_enc[0] === "") {
return ret;
}
for(i = 0; i < args_enc.length; i++) {
// convert + into space, split on =, and then decode
args_enc[i].replace(/\+/g, ' ');
nameval = args_enc[i].split('=', 2);
ret[decodeURIComponent(nameval[0])] = decodeURIComponent(nameval[1]);
}
return ret;
};
;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/plugins/hoverIntent.min.js' (Mode: Dynamic) */
/**
* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
*
* @param f onMouseOver function || An object with configuration options
* @param g onMouseOut function || Nothing (use configuration options object)
* @author Brian Cherne brian(at)cherne(dot)net
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev])}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev])};var handleHover=function(e){var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t)}if(e.type=="mouseenter"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob)},cfg.timeout)}}};return this.bind('mouseenter',handleHover).bind('mouseleave',handleHover)}})(jQuery);;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.hoverTip-dataSources.js' (Mode: Dynamic) */
// configure "dataLocations" object by adding names and URL'sss to load....
$.fn.hoverTip.dataLocations = { // pass in url and width and height
"bml-over250": "/searchsite/popups/global.aspx?type=bml-over250",
"bml-under250": "/searchsite/popups/global.aspx?type=bml-under250",
freeShipping: "/searchsite/popups/global.aspx?type=freeshipping",
freeONshipping: "/searchsite/popups/global.aspx?type=freeONshipping",
free2dayshipping: "/searchsite/popups/global.aspx?type=free2dayshipping",
recommendedAccessories: "/searchsite/popups/global.aspx?type=recommendedAccessories",
requiredAccessories: "/searchsite/popups/global.aspx?type=requiredAccessories",
used: "/searchsite/popups/global.aspx?type=used",
valuePrivacy: "/searchsite/popups/global.aspx?type=valuePrivacy",
greyMarket: "/searchsite/popups/greymarket.aspx",
refurbished: "/searchsite/popups/global.aspx?type=refurbished",
openBox: "/searchsite/popups/openbox.aspx",
whiteGlove: "/searchsite/popups/global.aspx?type=whiteGlove",
InStoreOnlyapple_NotLoggedIn: "/searchsite/popups/InStoreRestriction.aspx?brand=apple",
InStoreOnlyapple_LoggedIn: "/searchsite/popups/InStoreRestriction.aspx?loggedin=t&brand=apple",
InStoreOnlysamsung_NotLoggedIn: "/searchsite/popups/InStoreRestriction.aspx?brand=samsung",
InStoreOnlysamsung_LoggedIn: "/searchsite/popups/InStoreRestriction.aspx?loggedin=t&brand=samsung",
AddToCart: "/searchsite/popups/AddToCart.aspx",
freeShipping_byui: "/searchsite/popups/global.aspx?type=freeShipping_byui", //NEWWEB-11743
freeShipping_fed: "/searchsite/popups/global.aspx?type=freeShipping_fed" //NEWWEB-11743
};;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/config/adrma.config.js' (Mode: Dynamic) */
// global config.
adrma.config = {
turnTo: true,
googleRetargeting: true,
contextin: true,
socialLinks: true
};
//The total combined length of any custom variable name and value may not exceed 128 characters.
adrma.config.ab = {
needleChat: {
threshold: 10 // NEWWEB-17247 show for 80 hide for 20
},
// typeAhead: {
// threshold: 50
// },
// hideVipBanner: {
// threshold: 90,
// callback: function() {
// $("body").addClass("hideVipBanner");
// }
// },
// hideClickBy8: {
// threshold: 90,
// callback: function() {
// $("body").addClass("hideClickBy8");
// }
// },
miniCart: {
threshold: 10 /*NEWWEB-12097 - NEWWEB-13556 - NEWWEB-13630 - NEWWEB-16273*/
},
navTabData: {
threshold: 100 /*30% NEWWEB-16965 NEWWEB-12477 - NEWWEB-16273*/
},
RR: {
threshold: 20 // As per Eli
},
showStock: {
threshold: 80,
callback: function() {
$("body").addClass("showStock");
}
},
NLP: {
threshold: 50,
callback: function() {
$("body").addClass("showNewLeafProductPage");
}
},
NLC: {
threshold: 20, // LP-11078
callback: function() {
if (document.getElementById("mainBody2012")) {
$("body").addClass("showNewLeafCartPage");
}
}
},
SM: {
// NEWWEB-11636 - dynamic shipping message
threshold: 50
},
c: {
// NEWWEB-17193 - new cart AB
threshold: 10
}
};
adrma.config.cacheSettings = {
navTabData: {
v: "1.0",
svfor: "1day"
},
getProducts: { /*NEWWEB-11252*/
v: "1.0",
svfor: "1day"
}
};
if (console) {
console.log("trigger change");
};
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.headerFooter.js' (Mode: Dynamic) */
// header and footer
// modified may 8th 2012
$(function() {
var tabSwitch = function(e) {
var jTarget = $(e.target),
tabData = jTarget.data("tab");
jTarget.addClass("active").siblings().removeClass("active");
$("#" + tabData).show().siblings().hide();
};
$("#tabsContainer li").hoverIntent(tabSwitch, tabSwitch);
return;
//IE6 only needs hover support.
var dropContainer = function(e) {
var jTarget = $(e.target),
dropContainer = jTarget.find(".dropContainer");
if (e.type === "mouseenter") {
dropContainer.show();
}
if (e.type === "mouseleave") {
dropContainer.hide();
}
};
$(".triggerDrop").hoverIntent(dropContainer, dropContainer);
});
// NEWWEB-17261 - All departments - bust combress..
$.subscribe("userSession", function gotUserSession() {
$("#phoneContact span").html("<a href='/help/DepartmentsAndServices'>All departments</a>");
});
// init facebook etc..
$(window).load(function() {
$('#fbFooter').attr("src", "//www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2FAdorama&send=false&layout=button_count&width=150&show_faces=false&font&colorscheme=light&action=like&height=25&appId=220021344703215");
$('#scanalert').attr("src", "//images.scanalert.com/meter/www.adorama.com/23.gif");
$('#bizrate').attr("src", "//medals.bizrate.com/medals/dynamic/22495_medal.gif");
var twitterScript = ! function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (!d.getElementById(id)) {
js = d.createElement(s);
js.id = id;
js.src = "//platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
}
}(document, "script", "twitter-wjs");
$("#stelaBadge").attr("src", "//seal.stellaservice.com/seals/stellaservice_elite.png?c=adorama");
$.getScript("//apis.google.com/js/plusone.js");
$.getScript("//assets.pinterest.com/js/pinit.js");
});;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.ABalytics.js' (Mode: Dynamic) */
// the name "ABalytics" was coined by https://github.com/danmaz74
adrma.ABalytics = function() {
return this;
};
adrma.ABalytics.prototype = {
init: function() {
var dfd = $.Deferred(),
self = this,
storedData = this.getStorage(),
abKeys = Object.keys(adrma.config.ab),
missingKeys,
isHttps = location.protocol === "https:";
if (!storedData) {
storedData = self.generateData(abKeys);
self.setStorage(storedData);
} else {
// check for all data... in case new flags where added...
// TODO: Need to change this to acomandate total diffrent flags...
missingKeys = $.grep(abKeys, function(key) {
// good place to delete old AB tests...
if (!storedData.hasOwnProperty(key)) {
return key;
}
});
if (missingKeys.length) {
storedData = $.extend(storedData, (function() {
var obj = {};
$.each(missingKeys, function(i, e) {
obj[e] = self.randomNumber(0, 99);
});
return obj;
})());
self.setStorage(storedData);
}
}
// for debug only ??
self.rawData = storedData;
dfd.resolve(self.setConfig());
self.applyFlags();
return dfd.promise();
},
generateData: function(keys) {
var obj = {}, lngth = keys.length,
i = 0;
obj.group = this.generateGroup();
for (; i < lngth; i++) {
obj[keys[i]] = this.randomNumber(0, 99);
}
return obj;
},
generateGroup: function() {
var groups = ["A", "B"];
return groups[this.randomNumber(0, 1)];
},
randomNumber: function(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
generateNumber: function() {
return this.randomNumber(0, 99);
},
syncSecureStorage: function syncSecureStorage(abFlags) {
if (abFlags) {
abFlags = JSON.stringify(abFlags);
}
$("<iframe id='storageFrame' src='https://www.adorama.com/col/static/storageFrame.htm?abFlags=" + abFlags + "'></iframe>").appendTo("body");
},
setStorage: function(data) {
if (this.isHttps) {
return;
}
this.syncSecureStorage(data);
return adrma.storage.set("local", "abFlags", data);
},
getStorage: function() {
return adrma.storage.get("local", "abFlags", true);
},
setConfig: function() {
var self = this;
self.rawConfig = adrma.config;
self.gaString = "group:" + self.rawData.group + "|";
adrma.config = $.extend(adrma.config, (function() {
var obj = {}, key, abFlags = self.rawConfig.ab;
for (key in abFlags) {
obj[key] = (self.rawData[key] > abFlags[key].threshold);
// if anyway looping, concat for ga string;
self.gaString += key + ":" + (obj[key] ? 1 : 0) + "|";
}
self.gaString = self.gaString.slice(0, - 1); // remove last "|"
return obj;
})());
self.setGAVar();
return adrma.config;
},
setGAVar: function() {
if (this.isHttps) {
return;
}
adrma.analytics.add({
type: "setCustomVar",
slot: 4,
name: "abFlags",
value: this.gaString,
scope: 2
});
adrma.log(this.gaString);
},
applyFlags: function() {
// apply classes... etc.
var flags = adrma.config.ab,
flag,
callback;
if ($.isEmptyObject(flags)) {
return;
}
for (flag in flags) {
if (adrma.config[flag]) {
callback = flags[flag].callback;
if ($.isFunction(callback)) {
callback.call();
}
}
}
}
};;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.ABalytics.init.js' (Mode: Dynamic) */
adrma.init.add({
name: "ABalytics",
cb: function() {
var ab = new adrma.ABalytics(); // used class, maybe will need more instances...
ab.init().done(function() {
adrma.analytics.init();
_gaq.push(['_setAccount', adrma.pageInfo.gaID]);
var HumanSrch = adrma.cookie("HumanSrch");
if (HumanSrch) {
adrma.analytics.add({
type: "pageView",
path: location.pathname + location.search + "&HumanSrch=" + HumanSrch
});
adrma.cookie("HumanSrch", null);
} else {
adrma.analytics.add({
type: "pageView"
});
}
});
}
});;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.eventAlytics.js' (Mode: Dynamic) */
// attaches GA event tracking - NEWWEB-7889
// Dependant on adrma.analytics.js
adrma.eventAlytics = {
init: function() {
var self = this;
$(document).on("click", ".trackEvent", function(e) {
var jThis = $(this),
data = jThis.attr("data-trackData").split(","),
dataLength = data.length;
//based on _trackEvent(category, action, opt_label, opt_value, opt_noninteraction)
self.sendData(data);
});
},
sendData: function sendData(data) {
data.length = 4; // to fill optional non filled..
adrma.analytics.add({
type: "trackEvent",
category: data[0],
action: data[1],
label: data[2],
value: data[3],
noninteraction: data[4]
});
},
trackView: function trackView() {
var self = this,
data,
delay = 1000;
$("[data-track-view]").each(function(i, e) {
delay = delay + 1001;
data = $(e).attr("data-track-view");
if (data) {
(function(data) {
setTimeout(function() {
self.sendData(data.split(","));
}, delay);
})(data);
}
});
}
};;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.templateManager.js' (Mode: Dynamic) */
//takes care of fetching the template...
adrma.templateManager = {
hasTemplate: function(template) {
if (template) {
var suffix = /Tmpl$/.test(template) ? "" : "Tmpl";
return !!document.getElementById(template + suffix);
}
if ("tmpl" in window) {
return true;
} else {
return false;
}
},
getTemplate: function(template, options) {
var self = this,
dfd = new $.Deferred(),
fetch = function(template) {
options = options || {};
var dataType = template ? "" : "script",
cacheParam = options.cache ? "svfor=" + options.cache : "",
versionParam = options.version ? (options.cache ? "&" : "") + "v=" + options.version : "",
paramPrefix = cacheParam || versionParam ? "?" : "";
return adrma.fetchData({
url: template ? "/col/views/" + template + ".htm" + paramPrefix + cacheParam + versionParam : "/col/js/lib/microTemplating.js",
dataType: dataType,
returnPromise: true
}).done(function(data) {
if (template) {
$("body").append(data);
}
});
};
if (!template && !this.hasTemplate()) {
// maybe allow returning the innerHTML of the template...
return fetch();
}
if (this.hasTemplate() && (!template || template && this.hasTemplate(template))) {
// maybe allow returning the innerHTML of the template...
return dfd.resolve();
}
if (this.hasTemplate() && (template && !this.hasTemplate(template))) {
return fetch(template);
}
return fetch().pipe(function() {
return fetch(template);
});
}
};;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.navTabData.js' (Mode: Dynamic) */
adrma.navTabData = {
init: function() {
adrma.log("init adrma.navTabData " + adrma.config.navTabData);
if (!adrma.config.navTabData) {
return;
}
this.headerNav = $("#headerLevel4");
var self = this,
catIds = $.map(this.headerNav.find("li[data-id]"), function(e, i) {
return $(e).attr("data-id").slice(4);
});
if (!catIds.length) {
return false;
}
$.when(
adrma.templateManager.getTemplate("navTab"),
self.getdata(catIds)).then($.proxy(self.render, self));
self.attachHandlers();
},
attachHandlers: function() {
$("#headerLevel4").on("mouseenter", ".catagoryNav > li", function(e) {
var jThis = $(this),
tab = jThis.closest(".catagoryNav").attr("id"),
linkText = jThis.find("> a").text();
tab = tab ? tab.replace("Nav", "") : "";
_gaq.push(['_trackEvent', 'Global Navigation|Navigation Level 4', '' + tab + '|' + linkText, 'Open Flyout']);
});
},
getdata: function(catIds) {
var dfd = $.Deferred(),
mode = adrma.pageInfo.urlParams.mode,
modeParam = mode ? "&mode=" + mode : "",
storedData = adrma.storage.get("session", "navTab", true),
cacheSettings = adrma.config.cacheSettings.navTabData;
if (storedData) {
return dfd.resolve(storedData);
}
adrma.fetchData({
url: "/searchsite/newdesign/MegaDropDowns/MegaDropDowns.aspx",
data: "op=GetData&catIds=" + catIds.join(",") + "&v=" + cacheSettings.v + "&svfor=" + cacheSettings.svfor + "&pageCacheVersion=" + adrma.pageInfo.cacheVersion + modeParam,
dataType: "json"
}).done(function(response) {
if (response.status === "success") {
adrma.storage.set("session", "navTab", response.data);
dfd.resolve(response.data);
} else {
dfd.reject(response);
}
});
return dfd;
},
addMetaInfo: function(tabData, passedIndex, iteratorIndex, iteratedObj) {
iteratedObj.catName = tabData.name;
iteratedObj.col = passedIndex;
},
render: function(tmplData, data) {
var self = this;
if (data[1] === "success") { // came from server
data = data[0];
}
var tabData;
for (tabData in data) {
var currData = data[tabData],
cat = currData.categories,
tabEle = self.headerNav.find("[data-id = " + tabData + "]"),
tabLink = tabEle.find("> a");
currData.tabLink = tabLink.attr("href");
if (cat.length > 4) {
var halfLength = Math.ceil(cat.length / 2),
part1 = cat.splice(0, halfLength);
currData.categories = [part1, cat];
$.each(part1, $.proxy(self.addMetaInfo, self, currData, 1)); // NEWWEB-12586
$.each(cat, $.proxy(self.addMetaInfo, self, currData, 2));
currData.catSplit = true;
} else {
currData.catSplit = false;
}
tabEle.append("<div class='dropContainer tempMegaDrop'> " + tmpl("navTabTmpl", currData) + "</div>");
}
}
};
// init for now.
adrma.init.add({
name: "navTabData",
cb: adrma.navTabData.init,
context: adrma.navTabData,
defered: true
});;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.global3rdParty.js' (Mode: Dynamic) */
// responsible to inject and init 3rd party services globally
//declaring it here fixes - NEWWEB-8893
var needleParam;
(function() {
adrma.init.dfd.done(function() {
var pageInfo = adrma.pageInfo,
pageId = pageInfo.pageId,
pageType = pageInfo.pageType,
docProtocol = document.location.protocol === "http:" ? "http://" : "https://",
getCats = function(separator) {
if (!separator) {
return "";
}
var catString = "",
urlParams = pageInfo.urlParams,
cat;
if (urlParams.cat1) {
for (cat in urlParams) {
if (cat.match(/^cat/)) {
catString += urlParams[cat] + separator;
}
}
}
return catString.substr(0, catString.length - separator.length);
},
noop;
// Google Conversion - NEWWEB-8218
noop = adrma.config.googleRetargeting && adrma.init.add({
name: "googleRetargeting",
cb: function() {
document.write = function(node) {
$("body").append(node);
};
var pageTypes = {
homePage: "home",
categoryLevel1Page: "category",
ProductListingPage: "category",
productDetail: "product",
cartPage: "cartPage"
},
conversionId = 983097775,
conversionLabel = "hZroCOmsywQQr8Pj1AM",
track = function(obj) {
window.google_trackConversion(obj);
};
adrma.fetchData({
url: "//www.googleadservices.com/pagead/conversion_async.js",
dataType: "script"
}).done(function() {
// cartPage
$.subscribe("cartPage/initRender", function remarketingCartTrack(e, response) {
if (!response || !response.type !== "GetCartPageSummary") return; // avoids running more then once..
track({
google_conversion_id: conversionId,
google_conversion_label: conversionLabel,
google_remarketing_only: true,
google_custom_params: {
prodid: "",
pagetype: "cartPage",
value: response.data.summary.subTotal
}
});
});
if (pageType === "cartPage") {
return;
};
track({
google_conversion_id: conversionId,
google_conversion_label: conversionLabel,
google_remarketing_only: true,
google_custom_params: {
prodid: pageId,
pagetype: pageTypes[pageType] || "",
value: ""
}
});
//add to cart - NEWWEB-16493
$.subscribe("addToCart", function addedToCart(e, response) {
var data = response,
firstItemsAdded = data.itemsAdded[0] || {};
track({
google_conversion_id: 983097775,
google_conversion_label: "hZroCOmsywQQr8Pj1AM",
google_remarketing_only: true,
google_custom_params: {
prodid: firstItemsAdded.sku,
pagetype: "cart",
value: firstItemsAdded.cartPrice
}
});
});
});
},
defered: true
});
// Needle - NEWWEB-8177
noop = adrma.config.needleChat && adrma.init.add({
name: "NeedleService",
cb: function() {
if (pageType === "myAccountPage") {
return;
} //NEWWEB-9212
var cat1 = (pageInfo.urlParams && pageInfo.urlParams.cat1) ? pageInfo.urlParams.cat1 : "",
catString = decodeURIComponent(cat1),
price;
needleParam = {
productId: pageId,
categoryId: catString
};
//NEWWEB-13805
price = $("#FinalPrice").val();
if (price) {
needleParam.productPrice = price;
}
adrma.fetchData({
url: docProtocol + "adorama.needle.com/needle_service.js",
dataType: "script"
});
},
defered: true
});
});
// Contextin - NEWWEB-8374 (removed - NEWWEB-16028)
// Snapsort - NEWWEB-14307
adrma.init.add({
name: "snapsort",
cb: function() {
(function(i, s, o, g, r, a, m) {
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments);
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, 'script', '//d25xkbr68qqtcn.cloudfront.net/js/adorama/client.js', '__rtgt');
},
defered: true
});
// steelhousemedia
adrma.init.add({
name: "steelhousemedia",
cb: function() {
var e = null,
b = "4.0.0",
n = "10385",
additional = "",
t, r, i;
try {
t = top.document.referer !== "" ? encodeURIComponent(top.document.referrer.substring(0, 2048)) : "";
} catch (o) {
t = document.referrer !== null ? document.referrer.toString().substring(0, 2048) : "";
}
try {
r = window && window.top && document.location && window.top.location === document.location ? document.location : window && window.top && window.top.location && "" !== window.top.location ? window.top.location : document.location;
} catch (u) {
r = document.location;
}
try {
i = parent.location.href !== "" ? encodeURIComponent(parent.location.href.toString().substring(0, 2048)) : "";
} catch (a) {
try {
i = r !== null ? encodeURIComponent(r.toString().substring(0, 2048)) : "";
} catch (f) {
i = "";
}
}
var l, c = document.createElement("script"),
h = null,
p = document.getElementsByTagName("script"),
d = Number(p.length) - 1,
v = document.getElementsByTagName("script")[d];
if (typeof l === "undefined") {
l = Math.floor(Math.random() * 1e17);
}
h = "dx.steelhousemedia.com/spx?dxver=" + b + "&shaid=" + n + "&tdr=" + t + "&plh=" + i + "&cb=" + l + additional;
c.type = "text/javascript";
c.src = ("https:" === document.location.protocol ? "https://" : "http://") + h;
v.parentNode.insertBefore(c, v);
},
defered: true
});
//NEWWEB-13755
adrma.init.add({
name: "sidecar",
cb: function() {
window.sidecar = window.sidecar || {};
sidecar.preboot = sidecar.preboot || {};
sidecar.preboot.site_key = 'de6f3927fd09826f222a783b4dfca39f';
if (adrma.pageInfo.pageType === "productDetail") {
sidecar.product_info = {
product_id: adrma.pageInfo.pageId
};
}
adrma.fetchData({
url: "https://d3v27wwd40f0xu.cloudfront.net/js/bootstrap.js",
dataType: "script"
});
}
});
//Convertro Tag - NEWWEB-14967 - NEWWEB-14672
adrma.init.add({
name: "converto",
cb: function() {
$CVO = window.$CVO || [];
adrma.fetchData({
url: "//d1ivexoxmp59q7.cloudfront.net/adorama/live.js",
dataType: "script"
});
// addToCart - NEWWEB-15789
$.subscribe("addToCart", function(e, data) {
$CVO.push(['trackEvent', {
type: 'cart',
id: null,
amount: '1'
}]);
});
//wishlist - NEWWEB-15789
$.subscribe("addTowishList", function(e, data) {
$CVO.push(['trackEvent', {
type: 'wishlist',
id: null,
amount: '1'
}]);
});
// newsletter - NEWWEB-15789
$.subscribe("subscribedToEmail", function(e, data) {
$CVO.push(['trackEvent', {
type: 'newsletter',
id: null,
amount: '1'
}]);
});
}
});
//Impact Radius
noop = adrma.config.evyy && adrma.init.add({
name: "evyy",
cb: function() {
// *******************************
// add the div and this script tag inside the body element on any landing page that your current media partners can land on.
// if you want to serve this javascript from a file create a file and reference the script src inside the body element
// *******************************
/* (function(w, d) {
var irMIGMigParam = 'utm_source'; // your param that has the media partner identifier
var irMIGSubIdParam = 'sub'; // your subid param name
var irMIGAdvertiserId = '28763'; // IR set
var irMIGCampaignId = '1036'; // IR set
var irMIGAdId = '37879'; // IR set
var irMIGTrDomain = 'adorama.evyy.net/migpc'; // IR set no edit
function irGetParam(name) {
var match = RegExp(" [ ? & ]" + name + " = ([ ^ & ] * )", "
i ").exec(window.location.search);
return match ? decodeURIComponent(match[1].replace(/\+/g, "
")) : null;
}
var irMIGMigParamValue = irGetParam(irMIGMigParam);
var irMIGSubIdParamValue = irGetParam(irMIGSubIdParam);
// Custom filter MIGMigParamValue
irMIGMigParamValue = irMIGMigParamValue.replace(/\D/ig, "
");
irMIGMigParamValue = irMIGMigParamValue.replace(/^0+/, '');
if(irMIGMigParamValue !== null && irMIGMigParamValue !== "
") {
var irMIGsrc = '//' + irMIGTrDomain + '/' + irMIGAdvertiserId + '/' + irMIGAdId + '/' + irMIGCampaignId + '/?mmpid=' + encodeURIComponent(irMIGMigParamValue);
if(irMIGSubIdParamValue !== null && irMIGSubIdParamValue !== '') {
irMIGsrc += '&subid1=' + encodeURIComponent(irMIGSubIdParamValue);
}
var img = d.createElement('img');
img.id = 'irMigImg1';
img.height = 1;
img.width = 1;
img.border = 0;
img.src = irMIGsrc;
d.getElementById('irmig').appendChild(img);
}
})(window, document);*/
}
});
})();;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.analytics.js' (Mode: Dynamic) */
_gaq = window._gaq || []; // perhaps globelize (in this file, but out side ofadrma.analytics.init so adrma.ABalytics doesnt need to redifine.. ??)
// inject google analytics
adrma.analytics = {
init: function() {
var pluginUrl = '//www.google-analytics.com/plugins/ga/inpage_linkid.js';
_gaq.push(['_require', 'inpage_linkid', pluginUrl]);
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
_gaq.push(['_setDomainName', 'adorama.com']);
},
types: {
pageView: "_trackPageview",
trackEvent: "_trackEvent",
setCustomVar: "_setCustomVar"
},
add: function(options) {
var self = this;
if (!options.type) {
return;
}
var arr = [];
options = $.each(options, function(e, i) { // filter string null's
if (options[e] === "null") {
options[e] = null;
}
});
arr.push(self.types[options.type]);
//based on _trackEvent(category, action, opt_label, opt_value, opt_noninteraction)
//slot - setCustomVar
if (options.slot) {
arr.push(options.slot);
}
//name - setCustomVar
if (options.name) {
arr.push(options.name);
}
//page path
if (options.path) {
arr.push(options.path);
}
//categories
if (options.category) {
arr.push(options.category);
}
//actions
if (options.action) {
arr.push(options.action);
}
//labels
if (options.label) {
arr.push(options.label);
}
//values
if (options.value) {
arr.push(options.value);
}
//opt_noninteraction
if (options.noninteraction) {
arr.push(options.noninteraction);
}
//scope - setCustomVar
if (options.scope) {
arr.push(options.scope);
}
//implicit count
if (options.implicitCount) {
arr.push(options.implicitCount);
}
_gaq.push(arr);
}
};;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.userSession.js' (Mode: Dynamic) */
// load cart summery
// to be changed and augmented to localCart init. (which will inilize with a call to update the cart summery)
adrma.userSessionizePage = {
init: function() {
var self = this;
this.userSessionRequest = null;
this.userSessionRequest = this.getSession().done(function(data) {
self.userSession = data; // TODO: consider changing to "d" cause who needs the d? (but do take in account all scenarios)
self.gotSession();
self.getCartSummeryRequest = self.getCartSummery().done(self.updateUI);
});
},
getSession: function() {
var href = window.location.href.replace(/'/g, "");
return adrma.fetchData({
type: "POST",
url: "/SearchSite/HeaderUserControls/AjaxHelperService.asmx/LoadDispatcher?v=" + (new Date().getTime()),
data: "{'myWindowLocationParams': '" + location.href + "','myReferrer': '" + document.referrer + "'}",
contentType: "application/json; charset=utf-8",
preserveContentType: true,
timeout: 60000, // one minute - DESIGN-3214
cacheResponse: false,
dataType: "json"
});
},
gotSession: function() {
var self = adrma.userSessionizePage,
userSession = adrma.userSessionizePage.userSession.d; // localize for performance
if (userSession) {
// this code is executed when the page's onload event fires
if (userSession.IsLoggedIn) {
$("body").addClass("isLoggedIn");
$('.hoverInfo').attr('title', function() {
if (this.title.match(/^InStoreOnly ()/)) {
var matches_array = this.title.match(/^InStoreOnly (.*)/);
return "InStoreOnly" + matches_array[1] + "_LoggedIn";
} else return this.title;
});
} else {
$("body").removeClass("isLoggedIn");
$('.hoverInfo').attr('title', function() {
if (this.title.match(/^InStoreOnly/)) {
var matches_array = this.title.match(/^InStoreOnly (.*)/);
return "InStoreOnly" + matches_array[1] + "_NotLoggedIn";
} else return this.title;
});
}
// all this Update UI really belongs to the updateUI method, but its here, since it doesnt need to wait for the LoadCartSummary.
// need to change the hoverTip and we wont need to call it again and again
$(".hoverInfo").hoverTip();
$('#phoneContact, #PhoneNumber').html(userSession.Display_Phone_Number);
$('.Pricing > input[name$=Sid]').attr('value', userSession.SID);
if (adrma.cookie("refby") !== null) {
adrma.cookie("sub", null);
adrma.cookie("sterm", null);
adrma.cookie("refby", null);
adrma.cookie("ETjobid", null);
}
var AffiliateSrcId = adrma.cookie("AffiliateSrcId");
var AffiliateSrcSub = adrma.cookie("AffiliateSrcSub");
if (AffiliateSrcSub === null || AffiliateSrcSub === "") {
AffiliateSrcSub = "";
}
if (AffiliateSrcId) { // fixed NEWWEB-11551
$.getScript("//d3cxv97fi8q177.cloudfront.net/foundation-A28763-e0eb-4151-9a08-f7f9b21222531.js");
$('.affImage').attr('src', "https://www.myaffiliateprogram.com/u/adorama/rep.asp?id=" + AffiliateSrcId + "&sub=" + AffiliateSrcSub + "&random=" + Math.random());
adrma.cookie("AffiliateSrcId", null);
adrma.cookie("AffiliateSrcSub", null);
}
// assuming that only one thing will be logged in a page. (per SN)
var logHandler = adrma.logger["logHandler"];
if ($.isFunction(logHandler)) {
adrma.logger.add({
logHandler: logHandler,
userSession: userSession
});
}
$.publish("userSession", userSession);
}
},
getCartSummery: function() {
// wrapping all of this in adrma.adram.polyfill.test making sure JSON is supported.
var dfd,
isHttps = (location.protocol === "https:"),
inValidateStorage = adrma.cookie("invalidateStorage"); // DESIGN-4004 - this will be set via logout (in my account page)
if (adrma.storage.isSupported && !isHttps) {
adrma.storage["delete"]("local", "cartSummery"); // leave here only for a while to delete old users "local"storage
if (inValidateStorage) { // if found just delete
adrma.cookie("invalidateStorage", null);
adrma.storage["delete"]("session", "cartSummery");
}
dfd = $.Deferred();
var cartSummery = adrma.storage.get("session", "cartSummery", true);
if (cartSummery && cartSummery !== "undefined") {
if ((adrma.appStarted - cartSummery[0]) < 30000) { //if its yunger then half minute
return dfd.resolve(cartSummery[1]);
}
}
}
var JSONSession = JSON.stringify(adrma.userSessionizePage.userSession.d);
JSONSession = JSONSession.replace(/'/g, "\\'"); //NEWWEB-9589
dfd = adrma.fetchData({
type: "POST",
url: "/SearchSite/HeaderUserControls/AjaxHelperService.asmx/LoadCartSummary",
data: "{'objSession': '" + JSONSession + "'}",
contentType: "application/json; charset=utf-8",
preserveContentType: true,
timeout: 60000, // one minute - DESIGN-3214
dataType: "json",
cacheResponse: false
});
return dfd;
},
updateUI: function(data) {
var isHttps = (location.protocol === "https:"),
isDataFromStorage = (typeof data === "string");
if (isDataFromStorage) {
data = {
d: data
};
}
if (!isDataFromStorage || !isHttps) { // simply don't save in https..
var cartSummery = adrma.storage.set("session", "cartSummery", [adrma.appStarted, data.d], true);
}
$("#account_actions").html(data.d).fadeIn(500);
$('.PricingTest > input[name$=Sid]').attr('value', adrma.userSessionizePage.userSession.SID);
$('.Pricing > input[name$=Sid]').attr('value', adrma.userSessionizePage.userSession.SID);
adrma.userSessionizePage.garbageCollect();
},
garbageCollect: function() {
return;
adrma.userSessionizePage.getCartSummery = null;
adrma.userSessionizePage.getCartSummeryRequest = null;
adrma.userSessionizePage.userSessionRequest = null;
adrma.userSessionizePage.getSession = null;
}
};;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.commonInit.js' (Mode: Dynamic) */
adrma.init.add({
name: "paramsToPageInfo",
cb: function() {
if (!adrma || !adrma.pageInfo || !adrma.pageInfo.params) {
adrma = window.adrma || {};
adrma.pageInfo = adrma.pageInfo || {};
adrma.pageInfo.params = adrma.pageInfo.params || {};
}
adrma.pageInfo.params = adrma.url_args_decode(location);
adrma.pageInfo.params["sku"] = adrma.pageInfo.pageId;
adrma.pageInfo.params["parentItem"] = adrma.pageInfo.parentItem;
adrma.pageInfo.params["version"] = adrma.pageInfo.version;
}
});
adrma.init.add({
name: "evaluateScriptStrings",
cb: adrma.scriptStrings,
defered: true
});
adrma.init.add({
name: "userSessionizePage",
cb: adrma.userSessionizePage.init,
context: adrma.userSessionizePage
});
//NEWWEB-7889
adrma.init.add({
name: "eventAlytics",
cb: adrma.eventAlytics.init,
context: adrma.eventAlytics,
defered: true
});
//NEWWEB-14150
adrma.init.add({
name: "trackView",
cb: adrma.eventAlytics.trackView,
context: adrma.eventAlytics,
defered: true
});;
/* Comment Generated by Combres - Resource 'http://www.adorama.com/col/js/adrma.logger.js' (Mode: Dynamic) */
adrma.logger = {
defualts: {
defer: true,
delay: 0
},
add: function(config) {
var self = this,
options = $.extend({}, self.defualts, config);
if(options.defer) {
// TODO:handle delay via setTimeout
adrma.init.add({
name: "logger",
defered: true,
cb: self.logHandler,
args: config,
context: self.logHandler
});
} else {
//self.logHandler(config);
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment