Created
June 9, 2014 16:27
-
-
Save anonymous/75ee0f8fb58c23f8ae02 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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&>(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