/* Minification failed. Returning unminified contents.
(17222,11-12): run-time error JS1010: Expected identifier: .
(17222,11-12): run-time error JS1195: Expected expression: .
(17274,11-12): run-time error JS1010: Expected identifier: .
(17274,11-12): run-time error JS1195: Expected expression: .
(17480,11-12): run-time error JS1010: Expected identifier: .
(17480,11-12): run-time error JS1195: Expected expression: .
(19416,11-12): run-time error JS1010: Expected identifier: .
(19416,11-12): run-time error JS1195: Expected expression: .
(19682,11-12): run-time error JS1010: Expected identifier: .
(19682,11-12): run-time error JS1195: Expected expression: .
(19757,11-12): run-time error JS1010: Expected identifier: .
(19757,11-12): run-time error JS1195: Expected expression: .
(20024,11-12): run-time error JS1010: Expected identifier: .
(20024,11-12): run-time error JS1195: Expected expression: .
(20078,11-12): run-time error JS1010: Expected identifier: .
(20078,11-12): run-time error JS1195: Expected expression: .
(20254,11-12): run-time error JS1010: Expected identifier: .
(20254,11-12): run-time error JS1195: Expected expression: .
(20485,11-12): run-time error JS1010: Expected identifier: .
(20485,11-12): run-time error JS1195: Expected expression: .
(20804,11-12): run-time error JS1010: Expected identifier: .
(20804,11-12): run-time error JS1195: Expected expression: .
(21163,11-12): run-time error JS1010: Expected identifier: .
(21163,11-12): run-time error JS1195: Expected expression: .
(21243,11-12): run-time error JS1010: Expected identifier: .
(21243,11-12): run-time error JS1195: Expected expression: .
(21324,11-12): run-time error JS1010: Expected identifier: .
(21324,11-12): run-time error JS1195: Expected expression: .
(21581,11-12): run-time error JS1010: Expected identifier: .
(21581,11-12): run-time error JS1195: Expected expression: .
(21789,11-12): run-time error JS1010: Expected identifier: .
(21789,11-12): run-time error JS1195: Expected expression: .
(22011,11-12): run-time error JS1010: Expected identifier: .
(22011,11-12): run-time error JS1195: Expected expression: .
(22337,11-12): run-time error JS1010: Expected identifier: .
(22337,11-12): run-time error JS1195: Expected expression: .
(23058,11-12): run-time error JS1010: Expected identifier: .
(23058,11-12): run-time error JS1195: Expected expression: .
(187,501-508): run-time error JS1019: Can't have 'break' outside of loop: break a
 */
/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}: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},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?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},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.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 while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===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]||se.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]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(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){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!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,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.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"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=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):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({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)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
;
/*
 AngularJS v1.8.0
 (c) 2010-2020 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(z){'use strict';function ve(a){if(D(a))w(a.objectMaxDepth)&&(Xb.objectMaxDepth=Yb(a.objectMaxDepth)?a.objectMaxDepth:NaN),w(a.urlErrorParamsEnabled)&&Ga(a.urlErrorParamsEnabled)&&(Xb.urlErrorParamsEnabled=a.urlErrorParamsEnabled);else return Xb}function Yb(a){return X(a)&&0<a}function F(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.8.0/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var e=encodeURIComponent,
f;f=arguments[d];f="function"==typeof f?f.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof f?"undefined":"string"!=typeof f?JSON.stringify(f):f;c+=e(f)}return new b(c)}}function za(a){if(null==a||$a(a))return!1;if(H(a)||C(a)||x&&a instanceof x)return!0;var b="length"in Object(a)&&a.length;return X(b)&&(0<=b&&b-1 in a||"function"===typeof a.item)}function r(a,b,d){var c,e;if(a)if(B(a))for(c in a)"prototype"!==c&&"length"!==c&&"name"!==c&&a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else if(H(a)||
za(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==r)a.forEach(b,d,a);else if(Pc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)ta.call(a,c)&&b.call(d,a[c],c,a);return a}function Qc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function Zb(a){return function(b,d){a(d,b)}}function we(){return++qb}
function $b(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(D(g)||B(g))for(var k=Object.keys(g),h=0,l=k.length;h<l;h++){var m=k[h],p=g[m];d&&D(p)?ha(p)?a[m]=new Date(p.valueOf()):ab(p)?a[m]=new RegExp(p):p.nodeName?a[m]=p.cloneNode(!0):ac(p)?a[m]=p.clone():"__proto__"!==m&&(D(a[m])||(a[m]=H(p)?[]:{}),$b(a[m],[p],!0)):a[m]=p}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function S(a){return $b(a,Ha.call(arguments,1),!1)}function xe(a){return $b(a,Ha.call(arguments,1),!0)}function fa(a){return parseInt(a,
10)}function bc(a,b){return S(Object.create(a),b)}function E(){}function Ta(a){return a}function ia(a){return function(){return a}}function cc(a){return B(a.toString)&&a.toString!==la}function A(a){return"undefined"===typeof a}function w(a){return"undefined"!==typeof a}function D(a){return null!==a&&"object"===typeof a}function Pc(a){return null!==a&&"object"===typeof a&&!Rc(a)}function C(a){return"string"===typeof a}function X(a){return"number"===typeof a}function ha(a){return"[object Date]"===la.call(a)}
function H(a){return Array.isArray(a)||a instanceof Array}function dc(a){switch(la.call(a)){case "[object Error]":return!0;case "[object Exception]":return!0;case "[object DOMException]":return!0;default:return a instanceof Error}}function B(a){return"function"===typeof a}function ab(a){return"[object RegExp]"===la.call(a)}function $a(a){return a&&a.window===a}function bb(a){return a&&a.$evalAsync&&a.$watch}function Ga(a){return"boolean"===typeof a}function ye(a){return a&&X(a.length)&&ze.test(la.call(a))}
function ac(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function Ae(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function ua(a){return K(a.nodeName||a[0]&&a[0].nodeName)}function cb(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function Ia(a,b,d){function c(a,b,c){c--;if(0>c)return"...";var d=b.$$hashKey,f;if(H(a)){f=0;for(var g=a.length;f<g;f++)b.push(e(a[f],c))}else if(Pc(a))for(f in a)b[f]=e(a[f],c);else if(a&&"function"===typeof a.hasOwnProperty)for(f in a)a.hasOwnProperty(f)&&
(b[f]=e(a[f],c));else for(f in a)ta.call(a,f)&&(b[f]=e(a[f],c));d?b.$$hashKey=d:delete b.$$hashKey;return b}function e(a,b){if(!D(a))return a;var d=g.indexOf(a);if(-1!==d)return k[d];if($a(a)||bb(a))throw oa("cpws");var d=!1,e=f(a);void 0===e&&(e=H(a)?[]:Object.create(Rc(a)),d=!0);g.push(a);k.push(e);return d?c(a,e,b):e}function f(a){switch(la.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(e(a.buffer),
a.byteOffset,a.length);case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(B(a.cloneNode))return a.cloneNode(!0)}
var g=[],k=[];d=Yb(d)?d:NaN;if(b){if(ye(b)||"[object ArrayBuffer]"===la.call(b))throw oa("cpta");if(a===b)throw oa("cpi");H(b)?b.length=0:r(b,function(a,c){"$$hashKey"!==c&&delete b[c]});g.push(a);k.push(b);return c(a,b,d)}return e(a,d)}function ec(a,b){return a===b||a!==a&&b!==b}function va(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d===typeof b&&"object"===d)if(H(a)){if(!H(b))return!1;if((d=a.length)===b.length){for(c=0;c<d;c++)if(!va(a[c],
b[c]))return!1;return!0}}else{if(ha(a))return ha(b)?ec(a.getTime(),b.getTime()):!1;if(ab(a))return ab(b)?a.toString()===b.toString():!1;if(bb(a)||bb(b)||$a(a)||$a(b)||H(b)||ha(b)||ab(b))return!1;d=T();for(c in a)if("$"!==c.charAt(0)&&!B(a[c])){if(!va(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&w(b[c])&&!B(b[c]))return!1;return!0}return!1}function db(a,b,d){return a.concat(Ha.call(b,d))}function Va(a,b){var d=2<arguments.length?Ha.call(arguments,2):[];return!B(b)||b instanceof
RegExp?b:d.length?function(){return arguments.length?b.apply(a,db(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Sc(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:$a(b)?d="$WINDOW":b&&z.document===b?d="$DOCUMENT":bb(b)&&(d="$SCOPE");return d}function eb(a,b){if(!A(a))return X(b)||(b=b?2:null),JSON.stringify(a,Sc,b)}function Tc(a){return C(a)?JSON.parse(a):a}function fc(a,b){a=a.replace(Be,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+
a)/6E4;return Y(d)?b:d}function Uc(a,b){a=new Date(a.getTime());a.setMinutes(a.getMinutes()+b);return a}function gc(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=fc(b,c);return Uc(a,d*(b-c))}function Aa(a){a=x(a).clone().empty();var b=x("<div></div>").append(a).html();try{return a[0].nodeType===Pa?K(b):b.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+K(b)})}catch(d){return K(b)}}function Vc(a){try{return decodeURIComponent(a)}catch(b){}}function hc(a){var b={};r((a||"").split("&"),
function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=Vc(e),w(e)&&(f=w(f)?Vc(f):!0,ta.call(b,e)?H(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Ce(a){var b=[];r(a,function(a,c){H(a)?r(a,function(a){b.push(ba(c,!0)+(!0===a?"":"="+ba(a,!0)))}):b.push(ba(c,!0)+(!0===a?"":"="+ba(a,!0)))});return b.length?b.join("&"):""}function ic(a){return ba(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ba(a,
b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function De(a,b){var d,c,e=Qa.length;for(c=0;c<e;++c)if(d=Qa[c]+b,C(d=a.getAttribute(d)))return d;return null}function Ee(a,b){var d,c,e={};r(Qa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});r(Qa,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))});
d&&(Fe?(e.strictDi=null!==De(d,"strict-di"),b(d,c?[c]:[],e)):z.console.error("AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match."))}function Wc(a,b,d){D(d)||(d={});d=S({strictDi:!1},d);var c=function(){a=x(a);if(a.injector()){var c=a[0]===z.document?"document":Aa(a);throw oa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",
function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=fb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;z&&e.test(z.name)&&(d.debugInfoEnabled=!0,z.name=z.name.replace(e,""));if(z&&!f.test(z.name))return c();z.name=z.name.replace(f,"");ca.resumeBootstrap=function(a){r(a,function(a){b.push(a)});return c()};B(ca.resumeDeferredBootstrap)&&
ca.resumeDeferredBootstrap()}function Ge(){z.name="NG_ENABLE_DEBUG_INFO!"+z.name;z.location.reload()}function He(a){a=ca.element(a).injector();if(!a)throw oa("test");return a.get("$$testability")}function Xc(a,b){b=b||"_";return a.replace(Ie,function(a,c){return(c?b:"")+a.toLowerCase()})}function Je(){var a;if(!Yc){var b=rb();(sb=A(b)?z.jQuery:b?z[b]:void 0)&&sb.fn.on?(x=sb,S(sb.fn,{scope:Wa.scope,isolateScope:Wa.isolateScope,controller:Wa.controller,injector:Wa.injector,inheritedData:Wa.inheritedData})):
x=U;a=x.cleanData;x.cleanData=function(b){for(var c,e=0,f;null!=(f=b[e]);e++)(c=(x._data(f)||{}).events)&&c.$destroy&&x(f).triggerHandler("$destroy");a(b)};ca.element=x;Yc=!0}}function Ke(){U.legacyXHTMLReplacement=!0}function gb(a,b,d){if(!a)throw oa("areq",b||"?",d||"required");return a}function tb(a,b,d){d&&H(a)&&(a=a[a.length-1]);gb(B(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ja(a,b){if("hasOwnProperty"===a)throw oa("badname",
b);}function Le(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&B(a)?Va(e,a):a}function ub(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=x(Ha.call(a,0,e))),c.push(b);return c||a}function T(){return Object.create(null)}function jc(a){if(null==a)return"";switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=!cc(a)||H(a)||ha(a)?eb(a):a.toString()}return a}function Me(a){function b(a,
b,c){return a[b]||(a[b]=c())}var d=F("$injector"),c=F("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||F;return b(a,"module",function(){var a={};return function(f,g,k){var h={};if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,c,d,f){f||(f=e);return function(){f[d||"push"]([b,c,arguments]);return t}}function b(a,c,d){d||(d=e);return function(b,e){e&&B(e)&&(e.$$moduleName=f);d.push([a,c,arguments]);return t}}if(!g)throw d("nomod",
f);var e=[],n=[],s=[],G=a("$injector","invoke","push",n),t={_invokeQueue:e,_configBlocks:n,_runBlocks:s,info:function(a){if(w(a)){if(!D(a))throw c("aobj","value");h=a;return this}return h},requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator",n),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider",
"register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:G,run:function(a){s.push(a);return this}};k&&G(k);return t})}})}function ja(a,b){if(H(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(D(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function Ne(a,b){var d=[];Yb(b)&&(a=ca.copy(a,null,b));return JSON.stringify(a,function(a,b){b=Sc(a,b);if(D(b)){if(0<=d.indexOf(b))return"...";d.push(b)}return b})}
function Oe(a){S(a,{errorHandlingConfig:ve,bootstrap:Wc,copy:Ia,extend:S,merge:xe,equals:va,element:x,forEach:r,injector:fb,noop:E,bind:Va,toJson:eb,fromJson:Tc,identity:Ta,isUndefined:A,isDefined:w,isString:C,isFunction:B,isObject:D,isNumber:X,isElement:ac,isArray:H,version:Pe,isDate:ha,callbacks:{$$counter:0},getTestability:He,reloadWithDebugInfo:Ge,UNSAFE_restoreLegacyJqLiteXHTMLReplacement:Ke,$$minErr:F,$$csp:Ba,$$encodeUriSegment:ic,$$encodeUriQuery:ba,$$lowercase:K,$$stringify:jc,$$uppercase:vb});
lc=Me(z);lc("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Qe});a.provider("$compile",Zc).directive({a:Re,input:$c,textarea:$c,form:Se,script:Te,select:Ue,option:Ve,ngBind:We,ngBindHtml:Xe,ngBindTemplate:Ye,ngClass:Ze,ngClassEven:$e,ngClassOdd:af,ngCloak:bf,ngController:cf,ngForm:df,ngHide:ef,ngIf:ff,ngInclude:gf,ngInit:hf,ngNonBindable:jf,ngPluralize:kf,ngRef:lf,ngRepeat:mf,ngShow:nf,ngStyle:of,ngSwitch:pf,ngSwitchWhen:qf,ngSwitchDefault:rf,ngOptions:sf,ngTransclude:tf,ngModel:uf,
ngList:vf,ngChange:wf,pattern:ad,ngPattern:ad,required:bd,ngRequired:bd,minlength:cd,ngMinlength:cd,maxlength:dd,ngMaxlength:dd,ngValue:xf,ngModelOptions:yf}).directive({ngInclude:zf,input:Af}).directive(wb).directive(ed);a.provider({$anchorScroll:Bf,$animate:Cf,$animateCss:Df,$$animateJs:Ef,$$animateQueue:Ff,$$AnimateRunner:Gf,$$animateAsyncRun:Hf,$browser:If,$cacheFactory:Jf,$controller:Kf,$document:Lf,$$isDocumentHidden:Mf,$exceptionHandler:Nf,$filter:fd,$$forceReflow:Of,$interpolate:Pf,$interval:Qf,
$$intervalFactory:Rf,$http:Sf,$httpParamSerializer:Tf,$httpParamSerializerJQLike:Uf,$httpBackend:Vf,$xhrFactory:Wf,$jsonpCallbacks:Xf,$location:Yf,$log:Zf,$parse:$f,$rootScope:ag,$q:bg,$$q:cg,$sce:dg,$sceDelegate:eg,$sniffer:fg,$$taskTrackerFactory:gg,$templateCache:hg,$templateRequest:ig,$$testability:jg,$timeout:kg,$window:lg,$$rAF:mg,$$jqLite:ng,$$Map:og,$$cookieReader:pg})}]).info({angularVersion:"1.8.0"})}function xb(a,b){return b.toUpperCase()}function yb(a){return a.replace(qg,xb)}function mc(a){a=
a.nodeType;return 1===a||!a||9===a}function gd(a,b){var d,c,e,f=b.createDocumentFragment(),g=[],k;if(nc.test(a)){d=f.appendChild(b.createElement("div"));c=(rg.exec(a)||["",""])[1].toLowerCase();e=U.legacyXHTMLReplacement?a.replace(sg,"<$1></$2>"):a;if(10>wa)for(c=hb[c]||hb._default,d.innerHTML=c[1]+e+c[2],k=c[0];k--;)d=d.firstChild;else{c=qa[c]||[];for(k=c.length;-1<--k;)d.appendChild(z.document.createElement(c[k])),d=d.firstChild;d.innerHTML=e}g=db(g,d.childNodes);d=f.firstChild;d.textContent=""}else g.push(b.createTextNode(a));
f.textContent="";f.innerHTML="";r(g,function(a){f.appendChild(a)});return f}function U(a){if(a instanceof U)return a;var b;C(a)&&(a=V(a),b=!0);if(!(this instanceof U)){if(b&&"<"!==a.charAt(0))throw oc("nosel");return new U(a)}if(b){b=z.document;var d;a=(d=tg.exec(a))?[b.createElement(d[1])]:(d=gd(a,b))?d.childNodes:[];pc(this,a)}else B(a)?hd(a):pc(this,a)}function qc(a){return a.cloneNode(!0)}function zb(a,b){!b&&mc(a)&&x.cleanData([a]);a.querySelectorAll&&x.cleanData(a.querySelectorAll("*"))}function id(a){for(var b in a)return!1;
return!0}function jd(a){var b=a.ng339,d=b&&Ka[b],c=d&&d.events,d=d&&d.data;d&&!id(d)||c&&!id(c)||(delete Ka[b],a.ng339=void 0)}function kd(a,b,d,c){if(w(c))throw oc("offargs");var e=(c=Ab(a))&&c.events,f=c&&c.handle;if(f){if(b){var g=function(b){var c=e[b];w(d)&&cb(c||[],d);w(d)&&c&&0<c.length||(a.removeEventListener(b,f),delete e[b])};r(b.split(" "),function(a){g(a);Bb[a]&&g(Bb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f),delete e[b];jd(a)}}function rc(a,b){var d=a.ng339;if(d=
d&&Ka[d])b?delete d.data[b]:d.data={},jd(a)}function Ab(a,b){var d=a.ng339,d=d&&Ka[d];b&&!d&&(a.ng339=d=++ug,d=Ka[d]={events:{},data:{},handle:void 0});return d}function sc(a,b,d){if(mc(a)){var c,e=w(d),f=!e&&b&&!D(b),g=!b;a=(a=Ab(a,!f))&&a.data;if(e)a[yb(b)]=d;else{if(g)return a;if(f)return a&&a[yb(b)];for(c in b)a[yb(c)]=b[c]}}}function Cb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Db(a,b){if(b&&a.setAttribute){var d=
(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=V(a);c=c.replace(" "+a+" "," ")});c!==d&&a.setAttribute("class",V(c))}}function Eb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=V(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});c!==d&&a.setAttribute("class",V(c))}}function pc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=
0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function ld(a,b){return Fb(a,"$"+(b||"ngController")+"Controller")}function Fb(a,b,d){9===a.nodeType&&(a=a.documentElement);for(b=H(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(w(d=x.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function md(a){for(zb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Gb(a,b){b||zb(a);var d=a.parentNode;d&&d.removeChild(a)}function vg(a,b){b=b||z;if("complete"===b.document.readyState)b.setTimeout(a);
else x(b).on("load",a)}function hd(a){function b(){z.document.removeEventListener("DOMContentLoaded",b);z.removeEventListener("load",b);a()}"complete"===z.document.readyState?z.setTimeout(a):(z.document.addEventListener("DOMContentLoaded",b),z.addEventListener("load",b))}function nd(a,b){var d=Hb[b.toLowerCase()];return d&&od[ua(a)]&&d}function wg(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(A(c.immediatePropagationStopped)){var k=
c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();k&&k.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var h=f.specialHandlerWrapper||xg;1<g&&(f=ja(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||h(a,c,f[l])}};d.elem=a;return d}function xg(a,b,d){d.call(a,b)}function yg(a,b,d){var c=b.relatedTarget;c&&(c===a||zg.call(a,c))||d.call(a,b)}function ng(){this.$get=
function(){return S(U,{hasClass:function(a,b){a.attr&&(a=a[0]);return Cb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Eb(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return Db(a,b)}})}}function La(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"===d||"object"===d&&null!==a?a.$$hashKey=d+":"+(b||we)():d+":"+a}function pd(){this._keys=[];this._values=[];this._lastKey=NaN;this._lastIndex=-1}function qd(a){a=Function.prototype.toString.call(a).replace(Ag,
"");return a.match(Bg)||a.match(Cg)}function Dg(a){return(a=qd(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function fb(a,b){function d(a){return function(b,c){if(D(b))r(b,Zb(a));else return a(b,c)}}function c(a,b){Ja(a,"service");if(B(b)||H(b))b=n.instantiate(b);if(!b.$get)throw Ca("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=t.invoke(b,this);if(A(c))throw Ca("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){gb(A(a)||
H(a),"modulesToLoad","not an array");var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=n.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.set(a,!0);try{C(a)?(c=lc(a),t.modules[a]=c,b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):B(a)?b.push(n.invoke(a)):H(a)?b.push(n.invoke(a)):tb(a,"module")}catch(e){throw H(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1===e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ca("modulerr",
a,e.stack||e.message||e);}}});return b}function k(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===h)throw Ca("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=h,a[b]=c(b,e),a[b]}catch(f){throw a[b]===h&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=fb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!==typeof l)throw Ca("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){"string"===typeof c&&
(d=c,c=null);c=e(a,c,d);H(a)&&(a=a[a.length-1]);d=a;if(wa||"function"!==typeof d)d=!1;else{var f=d.$$ngIsClass;Ga(f)||(f=d.$$ngIsClass=/^class\b/.test(Function.prototype.toString.call(d)));d=f}return d?(c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=H(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,a))},get:d,annotate:fb.$$annotate,has:function(b){return p.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}
b=!0===b;var h={},l=[],m=new Ib,p={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,ia(b),!1)}),constant:d(function(a,b){Ja(a,"constant");p[a]=b;s[a]=b}),decorator:function(a,b){var c=n.get(a+"Provider"),d=c.$get;c.$get=function(){var a=t.invoke(d,c);return t.invoke(b,null,{$delegate:a})}}}},n=p.$injector=k(p,function(a,b){ca.isString(b)&&l.push(b);throw Ca("unpr",l.join(" <- "));}),s={},
G=k(s,function(a,b){var c=n.get(a+"Provider",b);return t.invoke(c.$get,c,void 0,a)}),t=G;p.$injectorProvider={$get:ia(G)};t.modules=n.modules=T();var N=g(a),t=G.get("$injector");t.strictDi=b;r(N,function(a){a&&t.invoke(a)});t.loadNewModules=function(a){r(g(a),function(a){a&&t.invoke(a)})};return t}function Bf(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===
ua(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;B(c)?c=c():ac(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):X(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=C(a)?a:X(a)?a.toString():d.hash();var b;a?(b=k.getElementById(a))?f(b):(b=e(k.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var k=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===
b&&""===a||vg(function(){c.$evalAsync(g)})});return g}]}function ib(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;H(a)&&(a=a.join(" "));H(b)&&(b=b.join(" "));return a+" "+b}function Eg(a){C(a)&&(a=a.split(" "));var b=T();r(a,function(a){a.length&&(b[a]=!0)});return b}function ra(a){return D(a)?a:{}}function Fg(a,b,d,c,e){function f(){pa=null;k()}function g(){t=y();t=A(t)?null:t;va(t,P)&&(t=P);N=P=t}function k(){var a=N;g();if(v!==h.url()||a!==t)v=h.url(),N=t,r(J,function(a){a(h.url(),t)})}
var h=this,l=a.location,m=a.history,p=a.setTimeout,n=a.clearTimeout,s={},G=e(d);h.isMock=!1;h.$$completeOutstandingRequest=G.completeTask;h.$$incOutstandingRequestCount=G.incTaskCount;h.notifyWhenNoOutstandingRequests=G.notifyWhenNoPendingTasks;var t,N,v=l.href,kc=b.find("base"),pa=null,y=c.history?function(){try{return m.state}catch(a){}}:E;g();h.url=function(b,d,e){A(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=N===e;b=ga(b).href;if(v===b&&(!c.history||f))return h;
var k=v&&Da(v)===Da(b);v=b;N=e;!c.history||k&&f?(k||(pa=b),d?l.replace(b):k?(d=l,e=b,f=e.indexOf("#"),e=-1===f?"":e.substr(f),d.hash=e):l.href=b,l.href!==b&&(pa=b)):(m[d?"replaceState":"pushState"](e,"",b),g());pa&&(pa=b);return h}return(pa||l.href).replace(/#$/,"")};h.state=function(){return t};var J=[],I=!1,P=null;h.onUrlChange=function(b){if(!I){if(c.history)x(a).on("popstate",f);x(a).on("hashchange",f);I=!0}J.push(b);return b};h.$$applicationDestroyed=function(){x(a).off("hashchange popstate",
f)};h.$$checkUrlChange=k;h.baseHref=function(){var a=kc.attr("href");return a?a.replace(/^(https?:)?\/\/[^/]*/,""):""};h.defer=function(a,b,c){var d;b=b||0;c=c||G.DEFAULT_TASK_TYPE;G.incTaskCount(c);d=p(function(){delete s[d];G.completeTask(a,c)},b);s[d]=c;return d};h.defer.cancel=function(a){if(s.hasOwnProperty(a)){var b=s[a];delete s[a];n(a);G.completeTask(E,b);return!0}return!1}}function If(){this.$get=["$window","$log","$sniffer","$document","$$taskTrackerFactory",function(a,b,d,c,e){return new Fg(a,
c,b,d,e)}]}function Jf(){this.$get=function(){function a(a,c){function e(a){a!==p&&(n?n===a&&(n=a.n):n=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!==b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw F("$cacheFactory")("iid",a);var g=0,k=S({},c,{id:a}),h=T(),l=c&&c.capacity||Number.MAX_VALUE,m=T(),p=null,n=null;return b[a]={put:function(a,b){if(!A(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in h||g++;h[a]=b;g>l&&this.remove(n.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=
m[a];if(!b)return;e(b)}return h[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b===p&&(p=b.p);b===n&&(n=b.n);f(b.n,b.p);delete m[a]}a in h&&(delete h[a],g--)},removeAll:function(){h=T();g=0;m=T();p=n=null},destroy:function(){m=k=h=null;delete b[a]},info:function(){return S({},k,{size:g})}}}var b={};a.info=function(){var a={};r(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function hg(){this.$get=["$cacheFactory",function(a){return a("templates")}]}
function Zc(a,b){function d(a,b,c){var d=/^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/,e=T();r(a,function(a,f){a=a.trim();if(a in p)e[f]=p[a];else{var g=a.match(d);if(!g)throw $("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f};g[4]&&(p[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==K(b))throw $("baddir",a);if(a!==a.trim())throw $("baddir",a);}function e(a){var b=a.require||a.controller&&
a.name;!H(b)&&D(b)&&r(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var f={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,k=/(([\w-]+)(?::([^;]+))?;?)/,h=Ae("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,p=T();this.directive=function pa(b,d){gb(b,"name");Ja(b,"directive");C(b)?(c(b),gb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];r(f[b],function(f,
g){try{var h=a.invoke(f);B(h)?h={compile:ia(h)}:!h.compile&&h.link&&(h.compile=ia(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=e(h);var k=h,l=h.restrict;if(l&&(!C(l)||!/[EACM]/.test(l)))throw $("badrestrict",l,b);k.restrict=l||"EA";h.$$moduleName=f.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),f[b].push(d)):r(b,Zb(pa));return this};this.component=function y(a,b){function c(a){function e(b){return B(b)||H(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:
b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:Gg(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};r(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}if(!C(a))return r(a,Zb(Va(this,y))),this;var d=b.controller||function(){};r(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,B(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,
c)};this.aHrefSanitizationWhitelist=function(a){return w(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var n=!0;this.debugInfoEnabled=function(a){return w(a)?(n=a,this):n};var s=!1;this.strictComponentBindingsEnabled=function(a){return w(a)?(s=a,this):s};var G=10;this.onChangesTtl=function(a){return arguments.length?(G=a,this):G};var t=!0;this.commentDirectivesEnabled=
function(a){return arguments.length?(t=a,this):t};var N=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(N=a,this):N};var v=T();this.addPropertySecurityContext=function(a,b,c){var d=a.toLowerCase()+"|"+b.toLowerCase();if(d in v&&v[d]!==c)throw $("ctxoverride",a,b,v[d],c);v[d]=c;return this};(function(){function a(b,c){r(c,function(a){v[a.toLowerCase()]=b})}a(W.HTML,["iframe|srcdoc","*|innerHTML","*|outerHTML"]);a(W.CSS,["*|style"]);a(W.URL,"area|href area|ping a|href a|ping blockquote|cite body|background del|cite input|src ins|cite q|cite".split(" "));
a(W.MEDIA_URL,"audio|src img|src img|srcset source|src source|srcset track|src video|src video|poster".split(" "));a(W.RESOURCE_URL,"*|formAction applet|code applet|codebase base|href embed|src frame|src form|action head|profile html|manifest iframe|src link|href media|src object|codebase object|data script|src".split(" "))})();this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate",function(a,b,c,e,p,M,L,u,R){function q(){try{if(!--Ja)throw Ua=
void 0,$("infchng",G);L.$apply(function(){for(var a=0,b=Ua.length;a<b;++a)try{Ua[a]()}catch(d){c(d)}Ua=void 0})}finally{Ja++}}function ma(a,b){if(!a)return a;if(!C(a))throw $("srcset",b,a.toString());for(var c="",d=V(a),e=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,e=/\s/.test(d)?e:/(,)/,d=d.split(e),e=Math.floor(d.length/2),f=0;f<e;f++)var g=2*f,c=c+u.getTrustedMediaUrl(V(d[g])),c=c+(" "+V(d[g+1]));d=V(d[2*f]).split(/\s/);c+=u.getTrustedMediaUrl(V(d[0]));2===d.length&&(c+=" "+V(d[1]));return c}function w(a,
b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function O(a,b,c){Fa.innerHTML="<span "+b+">";b=Fa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function sa(a,b){try{a.addClass(b)}catch(c){}}function da(a,b,c,d,e){a instanceof x||(a=x(a));var f=Xa(a,b,a,c,d,e);da.$$addScopeClass(a);var g=null;return function(b,c,d){if(!a)throw $("multilink");gb(b,"scope");e&&e.needsNewScope&&
(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&la.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==g?x(ja(g,x("<div></div>").append(a).html())):c?Wa.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);da.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);c||(a=f=null);return d}}function Xa(a,b,c,d,e,f){function g(a,c,d,e){var f,
k,l,m,p,I,t;if(n)for(t=Array(c.length),m=0;m<h.length;m+=3)f=h[m],t[f]=c[f];else t=c;m=0;for(p=h.length;m<p;)k=t[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),da.$$addScopeInfo(x(k),l)):l=a,I=c.transcludeOnThisElement?ka(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ka(a,b):null,c(f,l,k,d,I)):f&&f(a,k.childNodes,void 0,e)}for(var h=[],k=H(a)||a instanceof x,l,m,p,I,n,t=0;t<a.length;t++){l=new w;11===wa&&jb(a,t,k);m=tc(a[t],[],l,0===t?d:void 0,e);(f=m.length?aa(m,a[t],l,b,c,null,[],[],f):
null)&&f.scope&&da.$$addScopeClass(l.$$element);l=f&&f.terminal||!(p=a[t].childNodes)||!p.length?null:Xa(p,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(t,f,l),I=!0,n=n||f;f=null}return I?g:null}function jb(a,b,c){var d=a[b],e=d.parentNode,f;if(d.nodeType===Pa)for(;;){f=e?d.nextSibling:a[b+1];if(!f||f.nodeType!==Pa)break;d.nodeValue+=f.nodeValue;f.parentNode&&f.parentNode.removeChild(f);c&&f===a[b+1]&&a.splice(b+1,1)}}function ka(a,b,c){function d(e,f,g,h,
k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var e=d.$$slots=T(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?ka(a,b.$$slots[f],c):null;return d}function tc(a,b,d,e,f){var g=d.$attr,h;switch(a.nodeType){case 1:h=ua(a);Y(b,xa(h),"E",e,f);for(var l,m,n,t,J,s=a.attributes,v=0,G=s&&s.length;v<G;v++){var P=!1,N=!1,r=!1,y=!1,u=!1,M;l=s[v];m=l.name;t=l.value;n=xa(m.toLowerCase());(J=n.match(Ra))?(r="Attr"===J[1],y="Prop"===J[1],
u="On"===J[1],m=m.replace(rd,"").toLowerCase().substr(4+J[1].length).replace(/_(.)/g,function(a,b){return b.toUpperCase()})):(M=n.match(Sa))&&ca(M[1])&&(P=m,N=m.substr(0,m.length-5)+"end",m=m.substr(0,m.length-6));if(y||u)d[n]=t,g[n]=l.name,y?Ea(a,b,n,m):b.push(sd(p,L,c,n,m,!1));else{n=xa(m.toLowerCase());g[n]=m;if(r||!d.hasOwnProperty(n))d[n]=t,nd(a,n)&&(d[n]=!0);Ia(a,b,t,n,r);Y(b,n,"A",e,f,P,N)}}"input"===h&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!Qa)break;g=
a.className;D(g)&&(g=g.animVal);if(C(g)&&""!==g)for(;a=k.exec(g);)n=xa(a[2]),Y(b,n,"C",e,f)&&(d[n]=V(a[3])),g=g.substr(a.index+a[0].length);break;case Pa:na(b,a.nodeValue);break;case 8:if(!Oa)break;F(a,b,d,e,f)}b.sort(ia);return b}function F(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=xa(f[1]);Y(b,h,"M",d,e)&&(c[h]=V(f[2]))}}catch(k){}}function U(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw $("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&
e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return x(d)}function W(a,b,c){return function(d,e,f,g,h){e=U(e[0],b,c);return a(d,e,f,g,h)}}function Z(a,b,c,d,e,f){var g;return a?da(b,c,d,e,f):function(){g||(g=da(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function aa(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=W(a,c,d));a.require=u.require;a.directiveName=Q;if(s===u||u.$$isolateScope)a=Ba(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=W(b,c,d));b.require=u.require;b.directiveName=
Q;if(s===u||u.$$isolateScope)b=Ba(b,{isolateScope:!0});k.push(b)}}function p(a,e,f,g,l){function m(a,b,c,d){var e;bb(a)||(d=c,c=b,b=a,a=void 0);N&&(e=P);c||(c=N?Q.parent():Q);if(d){var f=l.$$slots[d];if(f)return f(a,b,e,c,R);if(A(f))throw $("noslot",d,Aa(Q));}else return l(a,b,e,c,R)}var n,u,L,y,G,P,M,Q;b===f?(g=d,Q=d.$$element):(Q=x(f),g=new w(Q,d));G=e;s?y=e.$new(!0):t&&(G=e.$parent);l&&(M=m,M.$$boundTransclude=l,M.isSlotFilled=function(a){return!!l.$$slots[a]});J&&(P=ea(Q,g,M,J,y,e,s));s&&(da.$$addScopeInfo(Q,
y,!0,!(v&&(v===s||v===s.$$originalDirective))),da.$$addScopeClass(Q,!0),y.$$isolateBindings=s.$$isolateBindings,u=Da(e,g,y,y.$$isolateBindings,s),u.removeWatches&&y.$on("$destroy",u.removeWatches));for(n in P){u=J[n];L=P[n];var Hg=u.$$bindings.bindToController;L.instance=L();Q.data("$"+u.name+"Controller",L.instance);L.bindingInfo=Da(G,g,L.instance,Hg,u)}r(J,function(a,b){var c=a.require;a.bindToController&&!H(c)&&D(c)&&S(P[b].instance,X(b,c,Q,P))});r(P,function(a){var b=a.instance;if(B(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(B(b.$onInit))try{b.$onInit()}catch(e){c(e)}B(b.$doCheck)&&
(G.$watch(function(){b.$doCheck()}),b.$doCheck());B(b.$onDestroy)&&G.$on("$destroy",function(){b.$onDestroy()})});n=0;for(u=h.length;n<u;n++)L=h[n],Ca(L,L.isolateScope?y:e,Q,g,L.require&&X(L.directiveName,L.require,Q,P),M);var R=e;s&&(s.template||null===s.templateUrl)&&(R=y);a&&a(R,f.childNodes,void 0,l);for(n=k.length-1;0<=n;n--)L=k[n],Ca(L,L.isolateScope?y:e,Q,g,L.require&&X(L.directiveName,L.require,Q,P),M);r(P,function(a){a=a.instance;B(a.$postLink)&&a.$postLink()})}l=l||{};for(var n=-Number.MAX_VALUE,
t=l.newScopeDirective,J=l.controllerDirectives,s=l.newIsolateScopeDirective,v=l.templateDirective,L=l.nonTlbTranscludeDirective,G=!1,P=!1,N=l.hasElementTranscludeDirective,y=d.$$element=x(b),u,Q,M,R=e,q,ma=!1,Jb=!1,O,sa=0,C=a.length;sa<C;sa++){u=a[sa];var E=u.$$start,jb=u.$$end;E&&(y=U(b,E,jb));M=void 0;if(n>u.priority)break;if(O=u.scope)u.templateUrl||(D(O)?(ba("new/isolated scope",s||t,u,y),s=u):ba("new/isolated scope",s,u,y)),t=t||u;Q=u.name;if(!ma&&(u.replace&&(u.templateUrl||u.template)||u.transclude&&
!u.$$tlb)){for(O=sa+1;ma=a[O++];)if(ma.transclude&&!ma.$$tlb||ma.replace&&(ma.templateUrl||ma.template)){Jb=!0;break}ma=!0}!u.templateUrl&&u.controller&&(J=J||T(),ba("'"+Q+"' controller",J[Q],u,y),J[Q]=u);if(O=u.transclude)if(G=!0,u.$$tlb||(ba("transclusion",L,u,y),L=u),"element"===O)N=!0,n=u.priority,M=y,y=d.$$element=x(da.$$createComment(Q,d[Q])),b=y[0],oa(f,Ha.call(M,0),b),R=Z(Jb,M,e,n,g&&g.name,{nonTlbTranscludeDirective:L});else{var ka=T();if(D(O)){M=z.document.createDocumentFragment();var Xa=
T(),F=T();r(O,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Xa[a]=b;ka[b]=null;F[b]=c});r(y.contents(),function(a){var b=Xa[xa(ua(a))];b?(F[b]=!0,ka[b]=ka[b]||z.document.createDocumentFragment(),ka[b].appendChild(a)):M.appendChild(a)});r(F,function(a,b){if(!a)throw $("reqslot",b);});for(var K in ka)ka[K]&&(R=x(ka[K].childNodes),ka[K]=Z(Jb,R,e));M=x(M.childNodes)}else M=x(qc(b)).contents();y.empty();R=Z(Jb,M,e,void 0,void 0,{needsNewScope:u.$$isolateScope||u.$$newScope});R.$$slots=ka}if(u.template)if(P=
!0,ba("template",v,u,y),v=u,O=B(u.template)?u.template(y,d):u.template,O=Na(O),u.replace){g=u;M=nc.test(O)?td(ja(u.templateNamespace,V(O))):[];b=M[0];if(1!==M.length||1!==b.nodeType)throw $("tplrt",Q,"");oa(f,y,b);C={$attr:{}};O=tc(b,[],C);var Ig=a.splice(sa+1,a.length-(sa+1));(s||t)&&fa(O,s,t);a=a.concat(O).concat(Ig);ga(d,C);C=a.length}else y.html(O);if(u.templateUrl)P=!0,ba("template",v,u,y),v=u,u.replace&&(g=u),p=ha(a.splice(sa,a.length-sa),y,d,f,G&&R,h,k,{controllerDirectives:J,newScopeDirective:t!==
u&&t,newIsolateScopeDirective:s,templateDirective:v,nonTlbTranscludeDirective:L}),C=a.length;else if(u.compile)try{q=u.compile(y,d,R);var Y=u.$$originalDirective||u;B(q)?m(null,Va(Y,q),E,jb):q&&m(Va(Y,q.pre),Va(Y,q.post),E,jb)}catch(ca){c(ca,Aa(y))}u.terminal&&(p.terminal=!0,n=Math.max(n,u.priority))}p.scope=t&&!0===t.scope;p.transcludeOnThisElement=G;p.templateOnThisElement=P;p.transclude=R;l.hasElementTranscludeDirective=N;return p}function X(a,b,c,d){var e;if(C(b)){var f=b.match(l);b=b.substring(f[0].length);
var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e="^^"===g&&c[0]&&9===c[0].nodeType?null:g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw $("ctreq",b,a);}else if(H(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=X(a,b[g],c,d);else D(b)&&(e={},r(b,function(b,f){e[f]=X(a,b,c,d)}));return e||null}function ea(a,b,c,d,e,f,g){var h=T(),k;for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},p=l.controller;"@"===
p&&(p=b[l.name]);m=M(p,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function fa(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=bc(a[d],{$$isolateScope:b,$$newScope:c})}function Y(b,c,e,g,h,k,l){if(c===h)return null;var m=null;if(f.hasOwnProperty(c)){h=a.get(c+"Directive");for(var p=0,n=h.length;p<n;p++)if(c=h[p],(A(g)||g>c.priority)&&-1!==c.restrict.indexOf(e)){k&&(c=bc(c,{$$start:k,$$end:l}));if(!c.$$bindings){var I=m=c,t=c.name,u={isolateScope:null,bindToController:null};
D(I.scope)&&(!0===I.bindToController?(u.bindToController=d(I.scope,t,!0),u.isolateScope={}):u.isolateScope=d(I.scope,t,!1));D(I.bindToController)&&(u.bindToController=d(I.bindToController,t,!0));if(u.bindToController&&!I.controller)throw $("noctrl",t);m=m.$$bindings=u;D(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function ca(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function ga(a,b){var c=
b.$attr,d=a.$attr;r(a,function(d,e){"$"!==e.charAt(0)&&(b[e]&&b[e]!==d&&(d=d.length?d+(("style"===e?";":" ")+b[e]):b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ha(a,b,d,f,g,h,k,l){var m=[],p,n,t=b[0],u=a.shift(),J=bc(u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),s=B(u.templateUrl)?u.templateUrl(b,d):u.templateUrl,L=u.templateNamespace;b.empty();e(s).then(function(c){var e,
I;c=Na(c);if(u.replace){c=nc.test(c)?td(ja(L,V(c))):[];e=c[0];if(1!==c.length||1!==e.nodeType)throw $("tplrt",u.name,s);c={$attr:{}};oa(f,b,e);var v=tc(e,[],c);D(u.scope)&&fa(v,!0);a=v.concat(a);ga(d,c)}else e=t,b.html(c);a.unshift(J);p=aa(a,e,d,g,b,u,h,k,l);r(f,function(a,c){a===e&&(f[c]=b[0])});for(n=Xa(b[0].childNodes,g);m.length;){c=m.shift();I=m.shift();var y=m.shift(),P=m.shift(),v=b[0];if(!c.$$destroyed){if(I!==t){var G=I.className;l.hasElementTranscludeDirective&&u.replace||(v=qc(e));oa(y,
x(I),v);sa(x(v),G)}I=p.transcludeOnThisElement?ka(c,p.transclude,P):P;p(n,c,v,f,I)}}m=null}).catch(function(a){dc(a)&&c(a)});return function(a,b,c,d,e){a=e;b.$$destroyed||(m?m.push(b,c,d,a):(p.transcludeOnThisElement&&(a=ka(b,p.transclude,e)),p(n,b,c,d,a)))}}function ia(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function ba(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw $("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),
a,Aa(d));}function na(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&da.$$addBindingClass(a);return function(a,c){var e=c.parent();b||da.$$addBindingClass(e);da.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ja(a,b){a=K(a||"html");switch(a){case "svg":case "math":var c=z.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function qa(a,b){if("srcdoc"===
b)return u.HTML;if("src"===b||"ngSrc"===b)return-1===["img","video","audio","source","track"].indexOf(a)?u.RESOURCE_URL:u.MEDIA_URL;if("xlinkHref"===b)return"image"===a?u.MEDIA_URL:"a"===a?u.URL:u.RESOURCE_URL;if("form"===a&&"action"===b||"base"===a&&"href"===b||"link"===a&&"href"===b)return u.RESOURCE_URL;if("a"===a&&("href"===b||"ngHref"===b))return u.URL}function ya(a,b){var c=b.toLowerCase();return v[a+"|"+c]||v["*|"+c]}function za(a){return ma(u.valueOf(a),"ng-prop-srcset")}function Ea(a,b,c,
d){if(m.test(d))throw $("nodomevents");a=ua(a);var e=ya(a,d),f=Ta;"srcset"!==d||"img"!==a&&"source"!==a?e&&(f=u.getTrusted.bind(u,e)):f=za;b.push({priority:100,compile:function(a,b){var e=p(b[c]),g=p(b[c],function(a){return u.valueOf(a)});return{pre:function(a,b){function c(){var g=e(a);b[0][d]=f(g)}c();a.$watch(g,c)}}}})}function Ia(a,c,d,e,f){var g=ua(a),k=qa(g,e),l=h[e]||f,p=b(d,!f,k,l);if(p){if("multiple"===e&&"select"===g)throw $("selmulti",Aa(a));if(m.test(e))throw $("nodomevents");c.push({priority:100,
compile:function(){return{pre:function(a,c,f){c=f.$$observers||(f.$$observers=T());var g=f[e];g!==d&&(p=g&&b(g,!0,k,l),d=g);p&&(f[e]=p(a),(c[e]||(c[e]=[])).$$inter=!0,(f.$$observers&&f.$$observers[e].$$scope||a).$watch(p,function(a,b){"class"===e&&a!==b?f.$updateClass(a,b):f.$set(e,a)}))}}}})}}function oa(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]===d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&
(a.context=c);break}f&&f.replaceChild(c,d);a=z.document.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);x.hasData(d)&&(x.data(c,x.data(d)),x(d).off("$destroy"));x.cleanData(a.querySelectorAll("*"));for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function Ba(a,b){return S(function(){return a.apply(null,arguments)},a,b)}function Ca(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,Aa(d))}}function ra(a,b){if(s)throw $("missingattr",a,b);}function Da(a,c,d,e,f){function g(b,c,e){B(d.$onChanges)&&
!ec(c,e)&&(Ua||(a.$$postDigest(q),Ua=[]),m||(m={},Ua.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Kb(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;r(e,function(e,h){var m=e.attrName,n=e.optional,I,t,u,s;switch(e.mode){case "@":n||ta.call(c,m)||(ra(m,f.name),d[h]=c[m]=void 0);n=c.$observe(m,function(a){if(C(a)||Ga(a))g(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;I=c[m];C(I)?d[h]=b(I)(a):Ga(I)&&(d[h]=I);l[h]=new Kb(uc,d[h]);k.push(n);break;case "=":if(!ta.call(c,m)){if(n)break;ra(m,
f.name);c[m]=void 0}if(n&&!c[m])break;t=p(c[m]);s=t.literal?va:ec;u=t.assign||function(){I=d[h]=t(a);throw $("nonassign",c[m],m,f.name);};I=d[h]=t(a);n=function(b){s(b,d[h])||(s(b,I)?u(a,b=d[h]):d[h]=b);return I=b};n.$stateful=!0;n=e.collection?a.$watchCollection(c[m],n):a.$watch(p(c[m],n),null,t.literal);k.push(n);break;case "<":if(!ta.call(c,m)){if(n)break;ra(m,f.name);c[m]=void 0}if(n&&!c[m])break;t=p(c[m]);var v=t.literal,L=d[h]=t(a);l[h]=new Kb(uc,d[h]);n=a[e.collection?"$watchCollection":"$watch"](t,
function(a,b){if(b===a){if(b===L||v&&va(b,L))return;b=L}g(h,a,b);d[h]=a});k.push(n);break;case "&":n||ta.call(c,m)||ra(m,f.name);t=c.hasOwnProperty(m)?p(c[m]):E;if(t===E&&n)break;d[h]=function(b){return t(a,b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Ma=/^\w/,Fa=z.document.createElement("div"),Oa=t,Qa=N,Ja=G,Ua;w.prototype={$normalize:xa,$addClass:function(a){a&&0<a.length&&R.addClass(this.$$element,a)},$removeClass:function(a){a&&
0<a.length&&R.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=ud(a,b);c&&c.length&&R.addClass(this.$$element,c);(c=ud(b,a))&&c.length&&R.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=nd(this.$$element[0],a),g=vd[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Xc(a,"-"));"img"===ua(this.$$element)&&"srcset"===a&&(this[a]=b=ma(b,"$set('srcset', value)"));!1!==d&&(null===b||A(b)?this.$$element.removeAttr(e):
Ma.test(e)?f&&!1===b?this.$$element.removeAttr(e):this.$$element.attr(e,b):O(this.$$element[0],e,b));(a=this.$$observers)&&r(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=T()),e=d[a]||(d[a]=[]);e.push(b);L.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||A(c[a])||b(c[a])});return function(){cb(e,b)}}};var Ka=b.startSymbol(),La=b.endSymbol(),Na="{{"===Ka&&"}}"===La?Ta:function(a){return a.replace(/\{\{/g,Ka).replace(/}}/g,La)},Ra=
/^ng(Attr|Prop|On)([A-Z].*)$/,Sa=/^(.+)Start$/;da.$$addBindingInfo=n?function(a,b){var c=a.data("$binding")||[];H(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:E;da.$$addBindingClass=n?function(a){sa(a,"ng-binding")}:E;da.$$addScopeInfo=n?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:E;da.$$addScopeClass=n?function(a,b){sa(a,b?"ng-isolate-scope":"ng-scope")}:E;da.$$createComment=function(a,b){var c="";n&&(c=" "+(a||"")+": ",b&&(c+=b+" "));return z.document.createComment(c)};
return da}]}function Kb(a,b){this.previousValue=a;this.currentValue=b}function xa(a){return a.replace(rd,"").replace(Jg,function(a,d,c){return c?d.toUpperCase():d})}function ud(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],k=0;k<e.length;k++)if(g===e[k])continue a;d+=(0<d.length?" ":"")+g}return d}function td(a){a=x(a);var b=a.length;if(1>=b)return a;for(;b--;){var d=a[b];(8===d.nodeType||d.nodeType===Pa&&""===d.nodeValue.trim())&&Kg.call(a,b,1)}return a}
function Gg(a,b){if(b&&C(b))return b;if(C(a)){var d=wd.exec(a);if(d)return d[3]}}function Kf(){var a={};this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,d){Ja(b,"controller");D(b)?S(a,b):a[b]=d};this.$get=["$injector",function(b){function d(a,b,d,g){if(!a||!D(a.$scope))throw F("$controller")("noscp",g,b);a.$scope[b]=d}return function(c,e,f,g){var k,h,l;f=!0===f;g&&C(g)&&(l=g);if(C(c)){g=c.match(wd);if(!g)throw xd("ctrlfmt",c);h=g[1];l=l||g[3];c=a.hasOwnProperty(h)?a[h]:Le(e.$scope,
h,!0);if(!c)throw xd("ctrlreg",h);tb(c,h,!0)}if(f)return f=(H(c)?c[c.length-1]:c).prototype,k=Object.create(f||null),l&&d(e,l,k,h||c.name),S(function(){var a=b.invoke(c,k,e,h);a!==k&&(D(a)||B(a))&&(k=a,l&&d(e,l,k,h||c.name));return k},{instance:k,identifier:l});k=b.instantiate(c,e,h);l&&d(e,l,k,h||c.name);return k}}]}function Lf(){this.$get=["$window",function(a){return x(a.document)}]}function Mf(){this.$get=["$document","$rootScope",function(a,b){function d(){e=c.hidden}var c=a[0],e=c&&c.hidden;
a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return e}}]}function Nf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function vc(a){return D(a)?ha(a)?a.toISOString():eb(a):a}function Tf(){this.$get=function(){return function(a){if(!a)return"";var b=[];Qc(a,function(a,c){null===a||A(a)||B(a)||(H(a)?r(a,function(a){b.push(ba(c)+"="+ba(vc(a)))}):b.push(ba(c)+"="+ba(vc(a))))});return b.join("&")}}}function Uf(){this.$get=
function(){return function(a){function b(a,e,f){H(a)?r(a,function(a,c){b(a,e+"["+(D(a)?c:"")+"]")}):D(a)&&!ha(a)?Qc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):(B(a)&&(a=a()),d.push(ba(e)+"="+(null==a?"":ba(vc(a)))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function wc(a,b){if(C(a)){var d=a.replace(Lg,"").trim();if(d){var c=b("Content-Type"),c=c&&0===c.indexOf(yd),e;(e=c)||(e=(e=d.match(Mg))&&Ng[e[0]].test(d));if(e)try{a=Tc(d)}catch(f){if(!c)return a;throw Lb("baddata",a,f);}}}return a}
function zd(a){var b=T(),d;C(a)?r(a.split("\n"),function(a){d=a.indexOf(":");var e=K(V(a.substr(0,d)));a=V(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):D(a)&&r(a,function(a,d){var f=K(d),g=V(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function Ad(a){var b;return function(d){b||(b=zd(a));return d?(d=b[K(d)],void 0===d&&(d=null),d):b}}function Bd(a,b,d,c){if(B(c))return c(a,b,d);r(c,function(c){a=c(a,b,d)});return a}function Sf(){var a=this.defaults={transformResponse:[wc],transformRequest:[function(a){return D(a)&&
"[object File]"!==la.call(a)&&"[object Blob]"!==la.call(a)&&"[object FormData]"!==la.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ja(xc),put:ja(xc),patch:ja(xc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=this.interceptors=[],c=this.xsrfWhitelistedOrigins=[];this.$get=["$browser","$httpBackend","$$cookieReader",
"$cacheFactory","$rootScope","$q","$injector","$sce",function(e,f,g,k,h,l,m,p){function n(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f,g)}b.length=0;return a}function d(a,b){var c,e={};r(a,function(a,d){B(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}function f(a){var b=S({},a);b.data=Bd(a.data,a.headers,a.status,g.transformResponse);a=a.status;return 200<=a&&300>a?b:l.reject(b)}if(!D(b))throw F("$http")("badreq",b);if(!C(p.valueOf(b.url)))throw F("$http")("badreq",
b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam},b);g.headers=function(b){var c=a.headers,e=S({},b.headers),f,g,h,c=S({},c.common,c[K(b.method)]);a:for(f in c){g=K(f);for(h in e)if(K(h)===g)continue a;e[f]=c[f]}return d(e,ja(b))}(b);g.method=vb(g.method);g.paramSerializer=C(g.paramSerializer)?m.get(g.paramSerializer):g.paramSerializer;e.$$incOutstandingRequestCount("$http");
var h=[],k=[];b=l.resolve(g);r(v,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&k.push(a.response,a.responseError)});b=c(b,h);b=b.then(function(b){var c=b.headers,d=Bd(b.data,Ad(c),void 0,b.transformRequest);A(d)&&r(c,function(a,b){"content-type"===K(b)&&delete c[b]});A(b.withCredentials)&&!A(a.withCredentials)&&(b.withCredentials=a.withCredentials);return s(b,d).then(f,f)});b=c(b,k);return b=b.finally(function(){e.$$completeOutstandingRequest(E,
"$http")})}function s(c,d){function e(a){if(a){var c={};r(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function k(a,c,d,e,f){function g(){m(c,a,d,e,f)}R&&(200<=a&&300>a?R.put(O,[a,c,zd(d),e,f]):R.remove(O));b?h.$applyAsync(g):(g(),h.$$phase||h.$apply())}function m(a,b,d,e,f){b=-1<=b?b:0;(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:Ad(d),config:c,statusText:e,xhrStatus:f})}function s(a){m(a.data,a.status,ja(a.headers()),
a.statusText,a.xhrStatus)}function v(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var L=l.defer(),u=L.promise,R,q,ma=c.headers,x="jsonp"===K(c.method),O=c.url;x?O=p.getTrustedResourceUrl(O):C(O)||(O=p.valueOf(O));O=G(O,c.paramSerializer(c.params));x&&(O=t(O,c.jsonpCallbackParam));n.pendingRequests.push(c);u.then(v,v);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(R=D(c.cache)?c.cache:D(a.cache)?a.cache:N);R&&(q=R.get(O),w(q)?q&&B(q.then)?q.then(s,
s):H(q)?m(q[1],q[0],ja(q[2]),q[3],q[4]):m(q,200,{},"OK","complete"):R.put(O,u));A(q)&&((q=kc(c.url)?g()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(ma[c.xsrfHeaderName||a.xsrfHeaderName]=q),f(c.method,O,d,k,ma,c.timeout,c.withCredentials,c.responseType,e(c.eventHandlers),e(c.uploadEventHandlers)));return u}function G(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}function t(a,b){var c=a.split("?");if(2<c.length)throw Lb("badjsonp",a);c=hc(c[1]);r(c,function(c,d){if("JSON_CALLBACK"===
c)throw Lb("badjsonp",a);if(d===b)throw Lb("badjsonp",b,a);});return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var N=k("$http");a.paramSerializer=C(a.paramSerializer)?m.get(a.paramSerializer):a.paramSerializer;var v=[];r(d,function(a){v.unshift(C(a)?m.get(a):m.invoke(a))});var kc=Og(c);n.pendingRequests=[];(function(a){r(arguments,function(a){n[a]=function(b,c){return n(S({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){n[a]=function(b,
c,d){return n(S({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function Wf(){this.$get=function(){return function(){return new z.XMLHttpRequest}}}function Vf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return Pg(a,c,a.defer,b,d[0])}]}function Pg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",
m);f.removeEventListener("error",m);e.body.removeChild(f);f=null;var g=-1,s="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),s=a.type,g="error"===a.type?404:200);d&&d(g,s)};f.addEventListener("load",m);f.addEventListener("error",m);e.body.appendChild(f);return m}return function(e,k,h,l,m,p,n,s,G,t){function N(a){J="timeout"===a;pa&&pa();y&&y.abort()}function v(a,b,c,e,f,g){w(P)&&d.cancel(P);pa=y=null;a(b,c,e,f,g)}k=k||a.url();if("jsonp"===K(e))var q=c.createCallback(k),pa=f(k,q,function(a,
b){var d=200===a&&c.getResponse(q);v(l,a,d,"",b,"complete");c.removeCallback(q)});else{var y=b(e,k),J=!1;y.open(e,k,!0);r(m,function(a,b){w(a)&&y.setRequestHeader(b,a)});y.onload=function(){var a=y.statusText||"",b="response"in y?y.response:y.responseText,c=1223===y.status?204:y.status;0===c&&(c=b?200:"file"===ga(k).protocol?404:0);v(l,c,b,y.getAllResponseHeaders(),a,"complete")};y.onerror=function(){v(l,-1,null,null,"","error")};y.ontimeout=function(){v(l,-1,null,null,"","timeout")};y.onabort=function(){v(l,
-1,null,null,"",J?"timeout":"abort")};r(G,function(a,b){y.addEventListener(b,a)});r(t,function(a,b){y.upload.addEventListener(b,a)});n&&(y.withCredentials=!0);if(s)try{y.responseType=s}catch(I){if("json"!==s)throw I;}y.send(A(h)?null:h)}if(0<p)var P=d(function(){N("timeout")},p);else p&&B(p.then)&&p.then(function(){N(w(p.$$timeoutId)?"timeout":"abort")})}}function Pf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=
["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(p,a).replace(n,b)}function k(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function h(f,h,n,p){function v(a){try{return a=n&&!r?e.getTrusted(n,a):e.valueOf(a),p&&!w(a)?a:jc(a)}catch(b){c(Ma.interr(f,b))}}var r=n===e.URL||n===e.MEDIA_URL;if(!f.length||-1===f.indexOf(a)){if(h)return;h=g(f);r&&(h=e.getTrusted(n,h));h=ia(h);h.exp=f;h.expressions=[];h.$$watchDelegate=
k;return h}p=!!p;for(var q,y,J=0,I=[],P,Q=f.length,M=[],L=[],u;J<Q;)if(-1!==(q=f.indexOf(a,J))&&-1!==(y=f.indexOf(b,q+l)))J!==q&&M.push(g(f.substring(J,q))),J=f.substring(q+l,y),I.push(J),J=y+m,L.push(M.length),M.push("");else{J!==Q&&M.push(g(f.substring(J)));break}u=1===M.length&&1===L.length;var R=r&&u?void 0:v;P=I.map(function(a){return d(a,R)});if(!h||I.length){var x=function(a){for(var b=0,c=I.length;b<c;b++){if(p&&A(a[b]))return;M[L[b]]=a[b]}if(r)return e.getTrusted(n,u?M[0]:M.join(""));n&&
1<M.length&&Ma.throwNoconcat(f);return M.join("")};return S(function(a){var b=0,d=I.length,e=Array(d);try{for(;b<d;b++)e[b]=P[b](a);return x(e)}catch(g){c(Ma.interr(f,g))}},{exp:f,expressions:I,$$watchDelegate:function(a,b){var c;return a.$watchGroup(P,function(d,e){var f=x(d);b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,p=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g,f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function Qf(){this.$get=
["$$intervalFactory","$window",function(a,b){var d={},c=function(a){b.clearInterval(a);delete d[a]},e=a(function(a,c,e){a=b.setInterval(a,c);d[a]=e;return a},c);e.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$intervalId"))throw Qg("badprom");if(!d.hasOwnProperty(a.$$intervalId))return!1;a=a.$$intervalId;var b=d[a],e=b.promise;e.$$state&&(e.$$state.pur=!0);b.reject("canceled");c(a);return!0};return e}]}function Rf(){this.$get=["$browser","$q","$$q","$rootScope",function(a,b,d,c){return function(e,
f){return function(g,k,h,l){function m(){p?g.apply(null,n):g(s)}var p=4<arguments.length,n=p?Ha.call(arguments,4):[],s=0,G=w(l)&&!l,t=(G?d:b).defer(),r=t.promise;h=w(h)?h:0;r.$$intervalId=e(function(){G?a.defer(m):c.$evalAsync(m);t.notify(s++);0<h&&s>=h&&(t.resolve(s),f(r.$$intervalId));G||c.$apply()},k,t,G);return r}}}]}function Cd(a,b){var d=ga(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=fa(d.port)||Rg[d.protocol]||null}function Dd(a,b,d){if(Sg.test(a))throw kb("badpath",a);var c="/"!==
a.charAt(0);c&&(a="/"+a);a=ga(a);for(var c=(c&&"/"===a.pathname.charAt(0)?a.pathname.substring(1):a.pathname).split("/"),e=c.length;e--;)c[e]=decodeURIComponent(c[e]),d&&(c[e]=c[e].replace(/\//g,"%2F"));d=c.join("/");b.$$path=d;b.$$search=hc(a.search);b.$$hash=decodeURIComponent(a.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function yc(a,b){return a.slice(0,b.length)===b}function ya(a,b){if(yc(b,a))return b.substr(a.length)}function Da(a){var b=a.indexOf("#");return-1===b?a:
a.substr(0,b)}function zc(a,b,d){this.$$html5=!0;d=d||"";Cd(a,this);this.$$parse=function(a){var d=ya(b,a);if(!C(d))throw kb("ipthprfx",a,b);Dd(d,this,!0);this.$$path||(this.$$path="/");this.$$compose()};this.$$normalizeUrl=function(a){return b+a.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;w(f=ya(a,c))?(g=f,g=d&&w(f=ya(d,f))?b+(ya("/",f)||f):a+g):w(f=ya(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function Ac(a,b,d){Cd(a,this);
this.$$parse=function(c){var e=ya(a,c)||ya(b,c),f;A(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",A(e)&&(a=c,this.replace())):(f=ya(d,e),A(f)&&(f=e));Dd(f,this,!1);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;yc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$normalizeUrl=function(b){return a+(b?d+b:"")};this.$$parseLinkUrl=function(b,d){return Da(a)===Da(b)?(this.$$parse(b),!0):!1}}function Ed(a,b,d){this.$$html5=!0;Ac.apply(this,arguments);this.$$parseLinkUrl=
function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===Da(c)?f=c:(g=ya(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$normalizeUrl=function(b){return a+d+b}}function Mb(a){return function(){return this[a]}}function Fd(a,b){return function(d){if(A(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Yf(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a};this.html5Mode=function(a){if(Ga(a))return b.enabled=
a,this;if(D(a)){Ga(a.enabled)&&(b.enabled=a.enabled);Ga(a.requireBase)&&(b.requireBase=a.requireBase);if(Ga(a.rewriteLinks)||C(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function k(a,b){return a===b||ga(a).href===ga(b).href}function h(a,b,d){var e=m.url(),f=m.$$state;try{c.url(a,b,d),m.$$state=c.state()}catch(g){throw m.url(e),m.$$state=f,g;}}function l(a,b){d.$broadcast("$locationChangeSuccess",
m.absUrl(),a,m.$$state,b)}var m,p;p=c.baseHref();var n=c.url(),s;if(b.enabled){if(!p&&b.requireBase)throw kb("nobase");s=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(p||"/");p=e.history?zc:Ed}else s=Da(n),p=Ac;var r=s.substr(0,Da(s).lastIndexOf("/")+1);m=new p(s,r,"#"+a);m.$$parseLinkUrl(n,n);m.$$state=c.state();var t=/^\s*(javascript|mailto):/i;f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var g=x(a.target);"a"!==ua(g[0]);)if(g[0]===
f[0]||!(g=g.parent())[0])return;if(!C(e)||!A(g.attr(e))){var e=g.prop("href"),h=g.attr("href")||g.attr("xlink:href");D(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ga(e.animVal).href);t.test(e)||!e||g.attr("target")||a.isDefaultPrevented()||!m.$$parseLinkUrl(e,h)||(a.preventDefault(),m.absUrl()!==c.url()&&d.$apply())}}});m.absUrl()!==n&&c.url(m.absUrl(),!0);var N=!0;c.onUrlChange(function(a,b){yc(a,r)?(d.$evalAsync(function(){var c=m.absUrl(),e=m.$$state,f;m.$$parse(a);m.$$state=b;f=d.$broadcast("$locationChangeStart",
a,c,b,e).defaultPrevented;m.absUrl()===a&&(f?(m.$$parse(c),m.$$state=e,h(c,!1,e)):(N=!1,l(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(N||m.$$urlUpdatedByLocation){m.$$urlUpdatedByLocation=!1;var a=c.url(),b=m.absUrl(),f=c.state(),g=m.$$replace,n=!k(a,b)||m.$$html5&&e.history&&f!==m.$$state;if(N||n)N=!1,d.$evalAsync(function(){var b=m.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,m.$$state,f).defaultPrevented;m.absUrl()===b&&(c?(m.$$parse(a),m.$$state=f):(n&&h(b,
g,f===m.$$state?null:m.$$state),l(a,f)))})}m.$$replace=!1});return m}]}function Zf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){dc(a)&&(a.stack&&f?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||E;return function(){var a=[];r(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e,
b,a)}}var f=wa||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Tg(a){return a+""}function Ug(a,b){return"undefined"!==typeof a?a:b}function Gd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Vg(a,b){switch(a.type){case q.MemberExpression:if(a.computed)return!1;break;case q.UnaryExpression:return 1;case q.BinaryExpression:return"+"!==
a.operator?1:!1;case q.CallExpression:return!1}return void 0===b?Hd:b}function Z(a,b,d){var c,e,f=a.isPure=Vg(a,d);switch(a.type){case q.Program:c=!0;r(a.body,function(a){Z(a.expression,b,f);c=c&&a.expression.constant});a.constant=c;break;case q.Literal:a.constant=!0;a.toWatch=[];break;case q.UnaryExpression:Z(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case q.BinaryExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=
a.left.toWatch.concat(a.right.toWatch);break;case q.LogicalExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case q.ConditionalExpression:Z(a.test,b,f);Z(a.alternate,b,f);Z(a.consequent,b,f);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case q.Identifier:a.constant=!1;a.toWatch=[a];break;case q.MemberExpression:Z(a.object,b,f);a.computed&&Z(a.property,b,f);a.constant=a.object.constant&&
(!a.computed||a.property.constant);a.toWatch=a.constant?[]:[a];break;case q.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];r(a.arguments,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case q.AssignmentExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case q.ArrayExpression:c=!0;e=[];r(a.elements,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;
a.toWatch=e;break;case q.ObjectExpression:c=!0;e=[];r(a.properties,function(a){Z(a.value,b,f);c=c&&a.value.constant;e.push.apply(e,a.value.toWatch);a.computed&&(Z(a.key,b,!1),c=c&&a.key.constant,e.push.apply(e,a.key.toWatch))});a.constant=c;a.toWatch=e;break;case q.ThisExpression:a.constant=!1;a.toWatch=[];break;case q.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Id(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Jd(a){return a.type===
q.Identifier||a.type===q.MemberExpression}function Kd(a){if(1===a.body.length&&Jd(a.body[0].expression))return{type:q.AssignmentExpression,left:a.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function Ld(a){this.$filter=a}function Md(a){this.$filter=a}function Nb(a,b,d){this.ast=new q(a,d);this.astCompiler=d.csp?new Md(b):new Ld(b)}function Bc(a){return B(a.valueOf)?a.valueOf():Wg.call(a)}function $f(){var a=T(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral=
function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(b,c){var d,f;switch(typeof b){case "string":return f=b=b.trim(),d=a[f],d||(d=new Ob(G),d=(new Nb(d,e,G)).parse(b),a[f]=p(d)),s(d,c);case "function":return s(b,c);default:return s(E,c)}}function g(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=Bc(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function k(a,b,c,d,e){var f=d.inputs,h;if(1===f.length){var k=g,f=f[0];
return a.$watch(function(a){var b=f(a);g(b,k,f.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&Bc(b));return h},b,c,e)}for(var l=[],m=[],n=0,p=f.length;n<p;n++)l[n]=g,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var k=f[c](a);if(b||(b=!g(k,l[c],f[c].isPure)))m[c]=k,l[c]=k&&Bc(k)}b&&(h=d(a,void 0,void 0,m));return h},b,c,e)}function h(a,b,c,d,e){function f(){h(m)&&k()}function g(a,b,c,d){m=u&&d?d[0]:n(a,b,c,d);h(m)&&a.$$postDigest(f);return s(m)}var h=d.literal?l:w,k,m,n=d.$$intercepted||
d,s=d.$$interceptor||Ta,u=d.inputs&&!n.inputs;g.literal=d.literal;g.constant=d.constant;g.inputs=d.inputs;p(g);return k=a.$watch(g,b,c,e)}function l(a){var b=!0;r(a,function(a){w(a)||(b=!1)});return b}function m(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function p(a){a.constant?a.$$watchDelegate=m:a.oneTime?a.$$watchDelegate=h:a.inputs&&(a.$$watchDelegate=k);return a}function n(a,b){function c(d){return b(a(d))}c.$stateful=a.$stateful||b.$stateful;c.$$pure=a.$$pure&&b.$$pure;
return c}function s(a,b){if(!b)return a;a.$$interceptor&&(b=n(a.$$interceptor,b),a=a.$$intercepted);var c=!1,d=function(d,e,f,g){d=c&&g?g[0]:a(d,e,f,g);return b(d)};d.$$intercepted=a;d.$$interceptor=b;d.literal=a.literal;d.oneTime=a.oneTime;d.constant=a.constant;b.$stateful||(c=!a.inputs,d.inputs=a.inputs?a.inputs:[a],b.$$pure||(d.inputs=d.inputs.map(function(a){return a.isPure===Hd?function(b){return a(b)}:a})));return p(d)}var G={csp:Ba().noUnsafeEval,literals:Ia(b),isIdentifierStart:B(d)&&d,isIdentifierContinue:B(c)&&
c};f.$$getAst=function(a){var b=new Ob(G);return(new Nb(b,e,G)).getAst(a).ast};return f}]}function bg(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Nd(function(a){b.$evalAsync(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this):a}}function cg(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Nd(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this):a}}function Nd(a,b,d){function c(){return new e}
function e(){var a=this.promise=new f;this.resolve=function(b){h(a,b)};this.reject=function(b){m(a,b)};this.notify=function(b){n(a,b)}}function f(){this.$$state={status:0}}function g(){for(;!w&&x.length;){var a=x.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):A(c)?"undefined":"string"!==typeof c?Ne(c,void 0):c);dc(a.value)?b(a.value,c):b(c)}}}function k(c){!d||c.pending||2!==c.status||c.pur||(0===w&&0===x.length&&
a(g),x.push(c));!c.processScheduled&&c.pending&&(c.processScheduled=!0,++w,a(function(){var e,f,k;k=c.pending;c.processScheduled=!1;c.pending=void 0;try{for(var l=0,n=k.length;l<n;++l){c.pur=!0;f=k[l][0];e=k[l][c.status];try{B(e)?h(f,e(c.value)):1===c.status?h(f,c.value):m(f,c.value)}catch(p){m(f,p),p&&!0===p.$$passToExceptionHandler&&b(p)}}}finally{--w,d&&0===w&&a(g)}}))}function h(a,b){a.$$state.status||(b===a?p(a,v("qcycle",b)):l(a,b))}function l(a,b){function c(b){g||(g=!0,l(a,b))}function d(b){g||
(g=!0,p(a,b))}function e(b){n(a,b)}var f,g=!1;try{if(D(b)||B(b))f=b.then;B(f)?(a.$$state.status=-1,f.call(b,c,d,e)):(a.$$state.value=b,a.$$state.status=1,k(a.$$state))}catch(h){d(h)}}function m(a,b){a.$$state.status||p(a,b)}function p(a,b){a.$$state.value=b;a.$$state.status=2;k(a.$$state)}function n(c,d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,f=0,g=e.length;f<g;f++){c=e[f][0];a=e[f][3];try{n(c,B(a)?a(d):d)}catch(h){b(h)}}})}function s(a){var b=new f;m(b,
a);return b}function G(a,b,c){var d=null;try{B(c)&&(d=c())}catch(e){return s(e)}return d&&B(d.then)?d.then(function(){return b(a)},s):b(a)}function t(a,b,c,d){var e=new f;h(e,a);return e.then(b,c,d)}function q(a){if(!B(a))throw v("norslvr",a);var b=new f;a(function(a){h(b,a)},function(a){m(b,a)});return b}var v=F("$q",TypeError),w=0,x=[];S(f.prototype,{then:function(a,b,c){if(A(a)&&A(b)&&A(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);
0<this.$$state.status&&k(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return G(b,y,a)},function(b){return G(b,s,a)},b)}});var y=t;q.prototype=f.prototype;q.defer=c;q.reject=s;q.when=t;q.resolve=y;q.all=function(a){var b=new f,c=0,d=H(a)?[]:{};r(a,function(a,e){c++;t(a).then(function(a){d[e]=a;--c||h(b,d)},function(a){m(b,a)})});0===c&&h(b,d);return b};q.race=function(a){var b=c();r(a,function(a){t(a).then(b.resolve,b.reject)});
return b.promise};return q}function mg(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function ag(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;
this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++qb;this.$$ChildScope=null;this.$$suspended=!1}b.prototype=a;return b}var b=10,d=F("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,k){function h(a){a.currentScope.$$destroyed=!0}function l(a){9===wa&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=
a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++qb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$suspended=this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function p(a){if(v.$$phase)throw d("inprog",v.$$phase);v.$$phase=a}function n(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function s(a,b,c){do a.$$listenerCount[c]-=
b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function G(){}function t(){for(;y.length;)try{y.shift()()}catch(a){f(a)}e=null}function q(){null===e&&(e=k.defer(function(){v.$apply(t)},null,"$applyAsync"))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):
c.$$childHead=c.$$childTail=d;(b||c!==this)&&d.$on("$destroy",h);return d},$watch:function(a,b,d,e){var f=g(a);b=B(b)?b:E;if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l={fn:b,last:G,get:f,exp:e||a,eq:!!d};c=null;k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;n(this,1);return function(){var a=cb(k,l);0<=a&&(n(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;try{k?(k=
!1,b(e,e,g)):b(e,d,g)}finally{for(var f=0;f<a.length;f++)d[f]=e[f]}}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var d=g.$watch(a,function(a){e[b]=a;h||(h=!0,g.$evalAsync(c))});f.push(d)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,
g,h;if(!A(e)){if(D(e))if(za(e))for(f!==n&&(f=n,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==p&&(f=p={},t=0,l++);a=0;for(b in e)ta.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++,f)ta.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$$pure=g(a).literal;c.$stateful=!c.$$pure;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],p={},s=!0,t=0;return this.$watch(m,
function(){s?(s=!1,b(e,e,d)):b(e,h,d);if(k)if(D(e))if(za(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ta.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,h,l,m,n,s,r=b,q,y=w.length?v:this,N=[],A,z;p("$digest");k.$$checkUrlChange();this===v&&null!==e&&(k.defer.cancel(e),t());c=null;do{s=!1;q=y;for(n=0;n<w.length;n++){try{z=w[n],l=z.fn,l(z.scope,z.locals)}catch(C){f(C)}c=null}w.length=0;a:do{if(n=!q.$$suspended&&q.$$watchers)for(n.$$digestWatchIndex=n.length;n.$$digestWatchIndex--;)try{if(a=
n[n.$$digestWatchIndex])if(m=a.get,(g=m(q))!==(h=a.last)&&!(a.eq?va(g,h):Y(g)&&Y(h)))s=!0,c=a,a.last=a.eq?Ia(g,null):g,l=a.fn,l(g,h===G?g:h,q),5>r&&(A=4-r,N[A]||(N[A]=[]),N[A].push({msg:B(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:h}));else if(a===c){s=!1;break a}}catch(E){f(E)}if(!(n=!q.$$suspended&&q.$$watchersCount&&q.$$childHead||q!==y&&q.$$nextSibling))for(;q!==y&&!(n=q.$$nextSibling);)q=q.$parent}while(q=n);if((s||w.length)&&!r--)throw v.$$phase=null,d("infdig",b,N);
}while(s||w.length);for(v.$$phase=null;J<x.length;)try{x[J++]()}catch(D){f(D)}x.length=J=0;k.$$checkUrlChange()},$suspend:function(){this.$$suspended=!0},$isSuspended:function(){return this.$$suspended},$resume:function(){this.$$suspended=!1},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===v&&k.$$applicationDestroyed();n(this,-this.$$watchersCount);for(var b in this.$$listenerCount)s(this,this.$$listenerCount[b],b);a&&a.$$childHead===
this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail===this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=E;this.$on=this.$watch=this.$watchGroup=function(){return E};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){v.$$phase||
w.length||k.defer(function(){w.length&&v.$digest()},null,"$evalAsync");w.push({scope:this,fn:g(a),locals:b})},$$postDigest:function(a){x.push(a)},$apply:function(a){try{p("$apply");try{return this.$eval(a)}finally{v.$$phase=null}}catch(b){f(b)}finally{try{v.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&y.push(b);a=g(a);q()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=
0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(delete c[d],s(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,m--;if(g)break;e=e.$parent}while(e);h.currentScope=
null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=db([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=
null;return e}};var v=new m,w=v.$$asyncQueue=[],x=v.$$postDigestQueue=[],y=v.$$applyAsyncQueue=[],J=0;return v}]}function Qe(){var a=/^\s*(https?|s?ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return w(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f=ga(d&&d.trim()).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function Xg(a){if("self"===
a)return a;if(C(a)){if(-1<a.indexOf("***"))throw Ea("iwcard",a);a=Od(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if(ab(a))return new RegExp("^"+a.source+"$");throw Ea("imatcher");}function Pd(a){var b=[];w(a)&&r(a,function(a){b.push(Xg(a))});return b}function eg(){this.SCE_CONTEXTS=W;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=Pd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=Pd(a));return b};
this.$get=["$injector","$$sanitizeUri",function(d,c){function e(a,b){var c;"self"===a?(c=Cc(b,Qd))||(z.document.baseURI?c=z.document.baseURI:(Na||(Na=z.document.createElement("a"),Na.href=".",Na=Na.cloneNode(!1)),c=Na.href),c=Cc(b,c)):c=!!a.exec(b.href);return c}function f(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};
return b}var g=function(a){throw Ea("unsafe");};d.has("$sanitize")&&(g=d.get("$sanitize"));var k=f(),h={};h[W.HTML]=f(k);h[W.CSS]=f(k);h[W.MEDIA_URL]=f(k);h[W.URL]=f(h[W.MEDIA_URL]);h[W.JS]=f(k);h[W.RESOURCE_URL]=f(h[W.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ea("icontext",a,b);if(null===b||A(b)||""===b)return b;if("string"!==typeof b)throw Ea("itype",a);return new c(b)},getTrusted:function(d,f){if(null===f||A(f)||""===f)return f;var k=h.hasOwnProperty(d)?
h[d]:null;if(k&&f instanceof k)return f.$$unwrapTrustedValue();B(f.$$unwrapTrustedValue)&&(f=f.$$unwrapTrustedValue());if(d===W.MEDIA_URL||d===W.URL)return c(f.toString(),d===W.MEDIA_URL);if(d===W.RESOURCE_URL){var k=ga(f.toString()),n,s,r=!1;n=0;for(s=a.length;n<s;n++)if(e(a[n],k)){r=!0;break}if(r)for(n=0,s=b.length;n<s;n++)if(e(b[n],k)){r=!1;break}if(r)return f;throw Ea("insecurl",f.toString());}if(d===W.HTML)return g(f);throw Ea("unsafe");},valueOf:function(a){return a instanceof k?a.$$unwrapTrustedValue():
a}}}]}function dg(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>wa)throw Ea("iequirks");var c=ja(W);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ta);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;r(W,
function(a,b){var d=K(b);c[("parse_as_"+d).replace(Dc,xb)]=function(b){return e(a,b)};c[("get_trusted_"+d).replace(Dc,xb)]=function(b){return f(a,b)};c[("trust_as_"+d).replace(Dc,xb)]=function(b){return g(a,b)}});return c}]}function fg(){this.$get=["$window","$document",function(a,b){var d={},c=!((!a.nw||!a.nw.process)&&a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,e=fa((/android (\d+)/.exec(K((a.navigator||{}).userAgent))||
[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},k=g.body&&g.body.style,h=!1,l=!1;k&&(h=!!("transition"in k||"webkitTransition"in k),l=!!("animation"in k||"webkitAnimation"in k));return{history:!(!c||4>e||f),hasEvent:function(a){if("input"===a&&wa)return!1;if(A(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ba(),transitions:h,animations:l,android:e}}]}function gg(){this.$get=ia(function(a){return new Yg(a)})}function Yg(a){function b(){var a=e.pop();return a&&
a.cb}function d(a){for(var b=e.length-1;0<=b;--b){var c=e[b];if(c.type===a)return e.splice(b,1),c.cb}}var c={},e=[],f=this.ALL_TASKS_TYPE="$$all$$",g=this.DEFAULT_TASK_TYPE="$$default$$";this.completeTask=function(e,h){h=h||g;try{e()}finally{var l;l=h||g;c[l]&&(c[l]--,c[f]--);l=c[h];var m=c[f];if(!m||!l)for(l=m?d:b;m=l(h);)try{m()}catch(p){a.error(p)}}};this.incTaskCount=function(a){a=a||g;c[a]=(c[a]||0)+1;c[f]=(c[f]||0)+1};this.notifyWhenNoPendingTasks=function(a,b){b=b||f;c[b]?e.push({type:b,cb:a}):
a()}}function ig(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(b,d,c,e,f){function g(k,h){g.totalPendingRequests++;if(!C(k)||A(d.get(k)))k=f.getTrustedResourceUrl(k);var l=c.defaults&&c.defaults.transformResponse;H(l)?l=l.filter(function(a){return a!==wc}):l===wc&&(l=null);return c.get(k,S({cache:d,transformResponse:l},a)).finally(function(){g.totalPendingRequests--}).then(function(a){return d.put(k,a.data)},
function(a){h||(a=Zg("tpload",k,a.status,a.statusText),b(a));return e.reject(a)})}g.totalPendingRequests=0;return g}]}function jg(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var c=ca.element(a).data("$binding");c&&r(c,function(c){d?(new RegExp("(^|\\s)"+Od(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!==c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-",
"data-ng-","ng\\:"],k=0;k<g.length;++k){var h=a.querySelectorAll("["+g[k]+"model"+(d?"=":"*=")+'"'+b+'"]');if(h.length)return h}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function kg(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,h,l){B(f)||(l=h,h=f,f=E);var m=Ha.call(arguments,3),p=w(l)&&!l,n=(p?c:d).defer(),s=n.promise,r;
r=b.defer(function(){try{n.resolve(f.apply(null,m))}catch(b){n.reject(b),e(b)}finally{delete g[s.$$timeoutId]}p||a.$apply()},h,"$timeout");s.$$timeoutId=r;g[r]=n;return s}var g={};f.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$timeoutId"))throw $g("badprom");if(!g.hasOwnProperty(a.$$timeoutId))return!1;a=a.$$timeoutId;var c=g[a],d=c.promise;d.$$state&&(d.$$state.pur=!0);c.reject("canceled");delete g[a];return b.defer.cancel(a)};return f}]}function ga(a){if(!C(a))return a;wa&&(aa.setAttribute("href",
a),a=aa.href);aa.setAttribute("href",a);a=aa.hostname;!ah&&-1<a.indexOf(":")&&(a="["+a+"]");return{href:aa.href,protocol:aa.protocol?aa.protocol.replace(/:$/,""):"",host:aa.host,search:aa.search?aa.search.replace(/^\?/,""):"",hash:aa.hash?aa.hash.replace(/^#/,""):"",hostname:a,port:aa.port,pathname:"/"===aa.pathname.charAt(0)?aa.pathname:"/"+aa.pathname}}function Og(a){var b=[Qd].concat(a.map(ga));return function(a){a=ga(a);return b.some(Cc.bind(null,a))}}function Cc(a,b){a=ga(a);b=ga(b);return a.protocol===
b.protocol&&a.host===b.host}function lg(){this.$get=ia(z)}function Rd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},c={},e="";return function(){var a,g,k,h,l;try{a=d.cookie||""}catch(m){a=""}if(a!==e)for(e=a,a=e.split("; "),c={},k=0;k<a.length;k++)g=a[k],h=g.indexOf("="),0<h&&(l=b(g.substring(0,h)),A(c[l])&&(c[l]=b(g.substring(h+1))));return c}}function pg(){this.$get=Rd}function fd(a){function b(d,c){if(D(d)){var e={};r(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+
"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",Sd);b("date",Td);b("filter",bh);b("json",ch);b("limitTo",dh);b("lowercase",eh);b("number",Ud);b("orderBy",Vd);b("uppercase",fh)}function bh(){return function(a,b,d,c){if(!za(a)){if(null==a)return a;throw F("filter")("notarray",a);}c=c||"$";var e;switch(Ec(b)){case "function":break;case "boolean":case "null":case "number":case "string":e=!0;case "object":b=gh(b,d,c,e);break;default:return a}return Array.prototype.filter.call(a,
b)}}function gh(a,b,d,c){var e=D(a)&&d in a;!0===b?b=va:B(b)||(b=function(a,b){if(A(a))return!1;if(null===a||null===b)return a===b;if(D(b)||D(a)&&!cc(a))return!1;a=K(""+a);b=K(""+b);return-1!==a.indexOf(b)});return function(f){return e&&!D(f)?Fa(f,a[d],b,d,!1):Fa(f,a,b,d,c)}}function Fa(a,b,d,c,e,f){var g=Ec(a),k=Ec(b);if("string"===k&&"!"===b.charAt(0))return!Fa(a,b.substring(1),d,c,e);if(H(a))return a.some(function(a){return Fa(a,b,d,c,e)});switch(g){case "object":var h;if(e){for(h in a)if(h.charAt&&
"$"!==h.charAt(0)&&Fa(a[h],b,d,c,!0))return!0;return f?!1:Fa(a,b,d,c,!1)}if("object"===k){for(h in b)if(f=b[h],!B(f)&&!A(f)&&(g=h===c,!Fa(g?a:a[h],f,d,c,g,g)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function Ec(a){return null===a?"null":typeof a}function Sd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){A(c)&&(c=b.CURRENCY_SYM);A(e)&&(e=b.PATTERNS[1].maxFrac);var f=c?/\u00A4/g:/\s*\u00A4\s*/g;return null==a?a:Wd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(f,
c)}}function Ud(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Wd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function hh(a){var b=0,d,c,e,f,g;-1<(c=a.indexOf(Xd))&&(a=a.replace(Xd,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)===Fc;e++);if(e===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===Fc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Yd&&(d=d.splice(0,Yd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function ih(a,
b,d,c){var e=a.d,f=e.length-a.i;b=A(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d){e.splice(Math.max(a.i,d));for(var g=d;g<e.length;g++)e[g]=0}else for(f=Math.max(0,f),a.i=1,e.length=Math.max(1,d=b+1),e[0]=0,g=1;g<d;g++)e[g]=0;if(5<=c)if(0>d-1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;f<Math.max(0,b);f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Wd(a,b,d,c,e){if(!C(a)&&!X(a)||isNaN(a))return"";
var f=!isFinite(a),g=!1,k=Math.abs(a)+"",h="";if(f)h="\u221e";else{g=hh(k);ih(g,e,b.minFrac,b.maxFrac);h=g.d;k=g.i;e=g.e;f=[];for(g=h.reduce(function(a,b){return a&&!b},!0);0>k;)h.unshift(0),k++;0<k?f=h.splice(k,h.length):(f=h,h=[0]);k=[];for(h.length>=b.lgSize&&k.unshift(h.splice(-b.lgSize,h.length).join(""));h.length>b.gSize;)k.unshift(h.splice(-b.gSize,h.length).join(""));h.length&&k.unshift(h.join(""));h=k.join(d);f.length&&(h+=c+f.join(""));e&&(h+="e+"+e)}return 0>a&&!g?b.negPre+h+b.negSuf:b.posPre+
h+b.posSuf}function Pb(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length<b;)a=Fc+a;d&&(a=a.substr(a.length-b));return e+a}function ea(a,b,d,c,e){d=d||0;return function(f){f=f["get"+a]();if(0<d||f>-d)f+=d;0===f&&-12===d&&(f=12);return Pb(f,b,c,e)}}function lb(a,b,d){return function(c,e){var f=c["get"+a](),g=vb((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Zd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function $d(a){return function(b){var d=
Zd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Pb(b,a)}}function Gc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Td(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,k=b[8]?a.setUTCFullYear:a.setFullYear,h=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=fa(b[9]+b[10]),g=fa(b[9]+b[11]));k.call(a,fa(b[1]),fa(b[2])-1,fa(b[3]));f=fa(b[4]||0)-f;g=fa(b[5]||0)-g;k=fa(b[6]||0);b=Math.round(1E3*parseFloat("0."+
(b[7]||0)));h.call(a,f,g,k,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,f){var g="",k=[],h,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;C(c)&&(c=jh.test(c)?fa(c):b(c));X(c)&&(c=new Date(c));if(!ha(c)||!isFinite(c.getTime()))return c;for(;d;)(l=kh.exec(d))?(k=db(k,l,1),d=k.pop()):(k.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=fc(f,m),c=gc(c,f,!0));r(k,function(b){h=lh[b];g+=h?h(c,a.DATETIME_FORMATS,
m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function ch(){return function(a,b){A(b)&&(b=2);return eb(a,b)}}function dh(){return function(a,b,d){b=Infinity===Math.abs(Number(b))?Number(b):fa(b);if(Y(b))return a;X(a)&&(a=a.toString());if(!za(a))return a;d=!d||isNaN(d)?0:fa(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?Hc(a,d,d+b):0===d?Hc(a,b,a.length):Hc(a,Math.max(0,d+b),d)}}function Hc(a,b,d){return C(a)?a.slice(b,d):Ha.call(a,b,d)}function Vd(a){function b(b){return b.map(function(b){var c=
1,d=Ta;if(B(b))d=b;else if(C(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var e=d(),d=function(a){return a[e]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,h=b.type;if(d===h){var h=a.value,l=b.value;"string"===d?(h=h.toLowerCase(),l=l.toLowerCase()):"object"===d&&(D(h)&&(h=a.index),D(l)&&(l=b.index));h!==l&&(c=
h<l?-1:1)}else c="undefined"===d?1:"undefined"===h?-1:"null"===d?1:"null"===h?-1:d<h?-1:1;return c}return function(a,f,g,k){if(null==a)return a;if(!za(a))throw F("orderBy")("notarray",a);H(f)||(f=[f]);0===f.length&&(f=["+"]);var h=b(f),l=g?-1:1,m=B(k)?k:c;a=Array.prototype.map.call(a,function(a,b){return{value:a,tieBreaker:{value:b,type:"number",index:b},predicateValues:h.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="null";else if("object"===c)a:{if(B(e.valueOf)&&(e=e.valueOf(),d(e)))break a;
cc(e)&&(e=e.toString(),d(e))}return{value:e,type:c,index:b}})}});a.sort(function(a,b){for(var d=0,e=h.length;d<e;d++){var f=m(a.predicateValues[d],b.predicateValues[d]);if(f)return f*h[d].descending*l}return(m(a.tieBreaker,b.tieBreaker)||c(a.tieBreaker,b.tieBreaker))*l});return a=a.map(function(a){return a.value})}}function Ra(a){B(a)&&(a={link:a});a.restrict=a.restrict||"AC";return ia(a)}function Qb(a,b,d,c,e){this.$$controls=[];this.$error={};this.$$success={};this.$pending=void 0;this.$name=e(b.name||
b.ngForm||"")(d);this.$dirty=!1;this.$valid=this.$pristine=!0;this.$submitted=this.$invalid=!1;this.$$parentForm=mb;this.$$element=a;this.$$animate=c;ae(this)}function ae(a){a.$$classCache={};a.$$classCache[be]=!(a.$$classCache[nb]=a.$$element.hasClass(nb))}function ce(a){function b(a,b,c){c&&!a.$$classCache[b]?(a.$$animate.addClass(a.$$element,b),a.$$classCache[b]=!0):!c&&a.$$classCache[b]&&(a.$$animate.removeClass(a.$$element,b),a.$$classCache[b]=!1)}function d(a,c,d){c=c?"-"+Xc(c,"-"):"";b(a,nb+
c,!0===d);b(a,be+c,!1===d)}var c=a.set,e=a.unset;a.clazz.prototype.$setValidity=function(a,g,k){A(g)?(this.$pending||(this.$pending={}),c(this.$pending,a,k)):(this.$pending&&e(this.$pending,a,k),de(this.$pending)&&(this.$pending=void 0));Ga(g)?g?(e(this.$error,a,k),c(this.$$success,a,k)):(c(this.$error,a,k),e(this.$$success,a,k)):(e(this.$error,a,k),e(this.$$success,a,k));this.$pending?(b(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,d(this,"",null)):(b(this,"ng-pending",!1),this.$valid=
de(this.$error),this.$invalid=!this.$valid,d(this,"",this.$valid));g=this.$pending&&this.$pending[a]?void 0:this.$error[a]?!1:this.$$success[a]?!0:null;d(this,a,g);this.$$parentForm.$setValidity(a,g,this)}}function de(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function Ic(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function Sa(a,b,d,c,e,f){var g=K(b[0].type);if(!e.android){var k=!1;b.on("compositionstart",function(){k=!0});b.on("compositionupdate",
function(a){if(A(a.data)||""===a.data)k=!1});b.on("compositionend",function(){k=!1;l()})}var h,l=function(a){h&&(f.defer.cancel(h),h=null);if(!k){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=V(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",l);else{var m=function(a,b,c){h||(h=f.defer(function(){h=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||
m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut drop",m)}b.on("change",l);if(ee[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!h){var b=this.validity,c=b.badInput,d=b.typeMismatch;h=f.defer(function(){h=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Rb(a,b){return function(d,c){var e,f;if(ha(d))return d;if(C(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-
1)&&(d=d.substring(1,d.length-1));if(mh.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),e=new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0),100>f.yyyy&&e.setFullYear(f.yyyy),e}return NaN}}function ob(a,b,d,c){return function(e,f,g,k,h,l,m,
p){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function s(a){return w(a)&&!ha(a)?r(a)||void 0:a}function r(a,b){var c=k.$options.getOption("timezone");v&&v!==c&&(b=Uc(b,fc(v)));var e=d(a,b);!isNaN(e)&&c&&(e=gc(e,c));return e}Jc(e,f,g,k,a);Sa(e,f,g,k,h,l);var t="time"===a||"datetimelocal"===a,q,v;k.$parsers.push(function(c){if(k.$isEmpty(c))return null;if(b.test(c))return r(c,q);k.$$parserName=a});k.$formatters.push(function(a){if(a&&!ha(a))throw pb("datefmt",a);if(n(a)){q=a;var b=
k.$options.getOption("timezone");b&&(v=b,q=gc(q,b,!0));var d=c;t&&C(k.$options.getOption("timeSecondsFormat"))&&(d=c.replace("ss.sss",k.$options.getOption("timeSecondsFormat")).replace(/:$/,""));a=m("date")(a,d,b);t&&k.$options.getOption("timeStripZeroSeconds")&&(a=a.replace(/(?::00)?(?:\.000)?$/,""));return a}v=q=null;return""});if(w(g.min)||g.ngMin){var x=g.min||p(g.ngMin)(e),z=s(x);k.$validators.min=function(a){return!n(a)||A(z)||d(a)>=z};g.$observe("min",function(a){a!==x&&(z=s(a),x=a,k.$validate())})}if(w(g.max)||
g.ngMax){var y=g.max||p(g.ngMax)(e),J=s(y);k.$validators.max=function(a){return!n(a)||A(J)||d(a)<=J};g.$observe("max",function(a){a!==y&&(J=s(a),y=a,k.$validate())})}}}function Jc(a,b,d,c,e){(c.$$hasNativeValidators=D(b[0].validity))&&c.$parsers.push(function(a){var d=b.prop("validity")||{};if(d.badInput||d.typeMismatch)c.$$parserName=e;else return a})}function fe(a){a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(nh.test(b))return parseFloat(b);a.$$parserName="number"});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!X(b))throw pb("numfmt",
b);b=b.toString()}return b})}function na(a){w(a)&&!X(a)&&(a=parseFloat(a));return Y(a)?void 0:a}function Kc(a){var b=a.toString(),d=b.indexOf(".");return-1===d?-1<a&&1>a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function ge(a,b,d){a=Number(a);var c=(a|0)!==a,e=(b|0)!==b,f=(d|0)!==d;if(c||e||f){var g=c?Kc(a):0,k=e?Kc(b):0,h=f?Kc(d):0,g=Math.max(g,k,h),g=Math.pow(10,g);a*=g;b*=g;d*=g;c&&(a=Math.round(a));e&&(b=Math.round(b));f&&(d=Math.round(d))}return 0===(a-b)%d}function he(a,b,d,c,e){if(w(c)){a=
a(c);if(!a.constant)throw pb("constexpr",d,c);return a(b)}return e}function Lc(a,b){function d(a,b){if(!a||!a.length)return[];if(!b||!b.length)return a;var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e===b[m])continue a;c.push(e)}return c}function c(a){if(!a)return a;var b=a;H(a)?b=a.map(c).join(" "):D(a)?b=Object.keys(a).filter(function(b){return a[b]}).join(" "):C(a)||(b=a+"");return b}a="ngClass"+a;var e;return["$parse",function(f){return{restrict:"AC",link:function(g,
k,h){function l(a,b){var c=[];r(a,function(a){if(0<b||p[a])p[a]=(p[a]||0)+b,p[a]===+(0<b)&&c.push(a)});return c.join(" ")}function m(a){if(a===b){var c=s,c=l(c&&c.split(" "),1);h.$addClass(c)}else c=s,c=l(c&&c.split(" "),-1),h.$removeClass(c);n=a}var p=k.data("$classCounts"),n=!0,s;p||(p=T(),k.data("$classCounts",p));"ngClass"!==a&&(e||(e=f("$index",function(a){return a&1})),g.$watch(e,m));g.$watch(f(h[a],c),function(a){if(n===b){var c=s&&s.split(" "),e=a&&a.split(" "),f=d(c,e),c=d(e,c),f=l(f,-1),
c=l(c,1);h.$addClass(c);h.$removeClass(f)}s=a})}}}]}function sd(a,b,d,c,e,f){return{restrict:"A",compile:function(g,k){var h=a(k[c]);return function(a,c){c.on(e,function(c){var e=function(){h(a,{$event:c})};if(b.$$phase)if(f)a.$evalAsync(e);else try{e()}catch(g){d(g)}else a.$apply(e)})}}}}function Sb(a,b,d,c,e,f,g,k,h){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=
[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=h(d.name||"",!1)(a);this.$$parentForm=mb;this.$options=Tb;this.$$updateEvents="";this.$$updateEventHandler=this.$$updateEventHandler.bind(this);this.$$parsedNgModel=e(d.ngModel);this.$$parsedNgModelAssign=this.$$parsedNgModel.assign;this.$$ngModelGet=this.$$parsedNgModel;this.$$ngModelSet=this.$$parsedNgModelAssign;this.$$pendingDebounce=
null;this.$$parserValid=void 0;this.$$parserName="parse";this.$$currentValidationRunId=0;this.$$scope=a;this.$$rootScope=a.$root;this.$$attr=d;this.$$element=c;this.$$animate=f;this.$$timeout=g;this.$$parse=e;this.$$q=k;this.$$exceptionHandler=b;ae(this);oh(this)}function oh(a){a.$$scope.$watch(function(b){b=a.$$ngModelGet(b);b===a.$modelValue||a.$modelValue!==a.$modelValue&&b!==b||a.$$setModelValue(b);return b})}function Mc(a){this.$$options=a}function ie(a,b){r(b,function(b,c){w(a[c])||(a[c]=b)})}
function Oa(a,b){a.prop("selected",b);a.attr("selected",b)}function je(a,b,d){if(a){C(a)&&(a=new RegExp("^"+a+"$"));if(!a.test)throw F("ngPattern")("noregexp",b,a,Aa(d));return a}}function Ub(a){a=fa(a);return Y(a)?-1:a}var Xb={objectMaxDepth:5,urlErrorParamsEnabled:!0},ke=/^\/(.+)\/([a-z]*)$/,ta=Object.prototype.hasOwnProperty,K=function(a){return C(a)?a.toLowerCase():a},vb=function(a){return C(a)?a.toUpperCase():a},wa,x,sb,Ha=[].slice,Kg=[].splice,ph=[].push,la=Object.prototype.toString,Rc=Object.getPrototypeOf,
oa=F("ng"),ca=z.angular||(z.angular={}),lc,qb=0;wa=z.document.documentMode;var Y=Number.isNaN||function(a){return a!==a};E.$inject=[];Ta.$inject=[];var ze=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,V=function(a){return C(a)?a.trim():a},Od=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Ba=function(){if(!w(Ba.rules)){var a=z.document.querySelector("[ng-csp]")||z.document.querySelector("[data-ng-csp]");if(a){var b=
a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ba.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ba;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ba.rules},rb=function(){if(w(rb.name_))return rb.name_;var a,b,d=Qa.length,c,e;for(b=0;b<d;++b)if(c=Qa[b],a=z.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return rb.name_=e},Be=/:/g,Qa=["ng-",
"data-ng-","ng:","x-ng-"],Fe=function(a){var b=a.currentScript;if(!b)return!0;if(!(b instanceof z.HTMLScriptElement||b instanceof z.SVGScriptElement))return!1;b=b.attributes;return[b.getNamedItem("src"),b.getNamedItem("href"),b.getNamedItem("xlink:href")].every(function(b){if(!b)return!0;if(!b.value)return!1;var c=a.createElement("a");c.href=b.value;if(a.location.origin===c.origin)return!0;switch(c.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;default:return!1}})}(z.document),
Ie=/[A-Z]/g,Yc=!1,Pa=3,Pe={full:"1.8.0",major:1,minor:8,dot:0,codeName:"nested-vaccination"};U.expando="ng339";var Ka=U.cache={},ug=1;U._data=function(a){return this.cache[a[this.expando]]||{}};var qg=/-([a-z])/g,qh=/^-ms-/,Bb={mouseleave:"mouseout",mouseenter:"mouseover"},oc=F("jqLite"),tg=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,nc=/<|&#?\w+;/,rg=/<([\w:-]+)/,sg=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,qa={thead:["table"],col:["colgroup","table"],tr:["tbody","table"],td:["tr",
"tbody","table"]};qa.tbody=qa.tfoot=qa.colgroup=qa.caption=qa.thead;qa.th=qa.td;var hb={option:[1,'<select multiple="multiple">',"</select>"],_default:[0,"",""]},Nc;for(Nc in qa){var le=qa[Nc],me=le.slice().reverse();hb[Nc]=[me.length,"<"+me.join("><")+">","</"+le.join("></")+">"]}hb.optgroup=hb.option;var zg=z.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Wa=U.prototype={ready:hd,toString:function(){var a=[];r(this,function(b){a.push(""+b)});return"["+a.join(", ")+
"]"},eq:function(a){return 0<=a?x(this[a]):x(this[this.length+a])},length:0,push:ph,sort:[].sort,splice:[].splice},Hb={};r("multiple selected checked disabled readOnly required open".split(" "),function(a){Hb[K(a)]=a});var od={};r("input select option textarea button form details".split(" "),function(a){od[a]=!0});var vd={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};r({data:sc,removeData:rc,hasData:function(a){for(var b in Ka[a.ng339])return!0;
return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)rc(a[b]),kd(a[b])}},function(a,b){U[b]=a});r({data:sc,inheritedData:Fb,scope:function(a){return x.data(a,"$scope")||Fb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return x.data(a,"$isolateScope")||x.data(a,"$isolateScopeNoTemplate")},controller:ld,injector:function(a){return Fb(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Cb,css:function(a,b,d){b=yb(b.replace(qh,"ms-"));if(w(d))a.style[b]=
d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Pa&&2!==c&&8!==c&&a.getAttribute){var c=K(b),e=Hb[c];if(w(d))null===d||!1===d&&e?a.removeAttribute(b):a.setAttribute(b,e?c:d);else return a=a.getAttribute(b),e&&null!==a&&(a=c),null===a?void 0:a}},prop:function(a,b,d){if(w(d))a[b]=d;else return a[b]},text:function(){function a(a,d){if(A(d)){var c=a.nodeType;return 1===c||c===Pa?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(A(b)){if(a.multiple&&"select"===
ua(a)){var d=[];r(a.options,function(a){a.selected&&d.push(a.value||a.text)});return d}return a.value}a.value=b},html:function(a,b){if(A(b))return a.innerHTML;zb(a,!0);a.innerHTML=b},empty:md},function(a,b){U.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==md&&A(2===a.length&&a!==Cb&&a!==ld?b:c)){if(D(b)){for(e=0;e<g;e++)if(a===sc)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=A(e)?Math.min(g,1):g;for(f=0;f<g;f++){var k=a(this[f],b,c);e=e?e+k:k}return e}for(e=0;e<g;e++)a(this[e],
b,c);return this}});r({removeData:rc,on:function(a,b,d,c){if(w(c))throw oc("onargs");if(mc(a)){c=Ab(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=wg(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,k=function(b,c,g){var k=e[b];k||(k=e[b]=[],k.specialHandlerWrapper=c,"$destroy"===b||g||a.addEventListener(b,f));k.push(d)};g--;)b=c[g],Bb[b]?(k(Bb[b],yg),k(b,void 0,!0)):k(b)}},off:kd,one:function(a,b,d){a=x(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,
b){var d,c=a.parentNode;zb(a);r(new U(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];r(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=a.nodeType;if(1===d||11===d){b=new U(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;r(new U(b),function(b){a.insertBefore(b,d)})}},
wrap:function(a,b){var d=x(b).eq(0).clone()[0],c=a.parentNode;c&&c.replaceChild(d,a);d.appendChild(a)},remove:Gb,detach:function(a){Gb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;if(c){b=new U(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}}},addClass:Eb,removeClass:Db,toggleClass:function(a,b,d){b&&r(b.split(" "),function(b){var e=d;A(e)&&(e=!Cb(a,b));(e?Eb:Db)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},
find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:qc,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=Ab(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:E,type:f,target:a},b.type&&(c=S(c,
b)),b=ja(g),e=d?[c].concat(d):[c],r(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){U.prototype[b]=function(b,c,e){for(var f,g=0,k=this.length;g<k;g++)A(f)?(f=a(this[g],b,c,e),w(f)&&(f=x(f))):pc(f,a(this[g],b,c,e));return w(f)?f:this}});U.prototype.bind=U.prototype.on;U.prototype.unbind=U.prototype.off;var rh=Object.create(null);pd.prototype={_idx:function(a){a!==this._lastKey&&(this._lastKey=a,this._lastIndex=this._keys.indexOf(a));return this._lastIndex},_transformKey:function(a){return Y(a)?
rh:a},get:function(a){a=this._transformKey(a);a=this._idx(a);if(-1!==a)return this._values[a]},has:function(a){a=this._transformKey(a);return-1!==this._idx(a)},set:function(a,b){a=this._transformKey(a);var d=this._idx(a);-1===d&&(d=this._lastIndex=this._keys.length);this._keys[d]=a;this._values[d]=b},delete:function(a){a=this._transformKey(a);a=this._idx(a);if(-1===a)return!1;this._keys.splice(a,1);this._values.splice(a,1);this._lastKey=NaN;this._lastIndex=-1;return!0}};var Ib=pd,og=[function(){this.$get=
[function(){return Ib}]}],Bg=/^([^(]+?)=>/,Cg=/^[^(]*\(\s*([^)]*)\)/m,sh=/,/,th=/^\s*(_?)(\S+?)\1\s*$/,Ag=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ca=F("$injector");fb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw C(d)&&d||(d=a.name||Dg(a)),Ca("strictdi",d);b=qd(a);r(b[1].split(sh),function(a){a.replace(th,function(a,b,d){c.push(d)})})}a.$inject=c}}else H(a)?(b=a.length-1,tb(a[b],"fn"),c=a.slice(0,b)):tb(a,"fn",!0);return c};var ne=F("$animate"),
Ef=function(){this.$get=E},Ff=function(){var a=new Ib,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=C(b)?b.split(" "):H(b)?b:[],r(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){r(b,function(b){var c=a.get(b);if(c){var d=Eg(b.attr("class")),e="",f="";r(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});r(b,function(a){e&&Eb(a,e);f&&Db(a,f)});a.delete(b)}});b.length=0}return{enabled:E,on:E,off:E,pin:E,push:function(g,
k,h,l){l&&l();h=h||{};h.from&&g.css(h.from);h.to&&g.css(h.to);if(h.addClass||h.removeClass)if(k=h.addClass,l=h.removeClass,h=a.get(g)||{},k=e(h,k,!0),l=e(h,l,!1),k||l)a.set(g,h),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},Cf=["$provide",function(a){var b=this,d=null,c=null;this.$$registeredAnimations=Object.create(null);this.register=function(c,d){if(c&&"."!==c.charAt(0))throw ne("notcsel",c);var g=c+"-animation";b.$$registeredAnimations[c.substr(1)]=g;a.factory(g,
d)};this.customFilter=function(a){1===arguments.length&&(c=B(a)?a:null);return c};this.classNameFilter=function(a){if(1===arguments.length&&(d=a instanceof RegExp?a:null)&&/[(\s|\/)]ng-animate[(\s|\/)]/.test(d.toString()))throw d=null,ne("nongcls","ng-animate");return d};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var e;a:{for(e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){e=f;break a}}e=void 0}!e||e.parentNode||e.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,
off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.cancel&&a.cancel()},enter:function(c,d,h,l){d=d&&x(d);h=h&&x(h);d=d||h.parent();b(c,d,h);return a.push(c,"enter",ra(l))},move:function(c,d,h,l){d=d&&x(d);h=h&&x(h);d=d||h.parent();b(c,d,h);return a.push(c,"move",ra(l))},leave:function(b,c){return a.push(b,"leave",ra(c),function(){b.remove()})},addClass:function(b,c,d){d=ra(d);d.addClass=ib(d.addclass,c);return a.push(b,"addClass",d)},removeClass:function(b,c,d){d=ra(d);d.removeClass=ib(d.removeClass,
c);return a.push(b,"removeClass",d)},setClass:function(b,c,d,f){f=ra(f);f.addClass=ib(f.addClass,c);f.removeClass=ib(f.removeClass,d);return a.push(b,"setClass",f)},animate:function(b,c,d,f,m){m=ra(m);m.from=m.from?S(m.from,c):c;m.to=m.to?S(m.to,d):d;m.tempClasses=ib(m.tempClasses,f||"ng-inline-animate");return a.push(b,"animate",m)}}}]}],Hf=function(){this.$get=["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=
!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},Gf=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(a,b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){c()?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};f.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;r(a,function(a){a.done(c)})};
f.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:E,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&
this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(r(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return f}]},Df=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,e){function f(){a(function(){g.addClass&&
(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);k||h.complete();k=!0});return h}var g=e||{};g.$$prepared||(g=Ia(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var k,h=new d;return{start:f,end:f}}}]},$=F("$compile"),uc=new function(){};Zc.$inject=["$provide","$$sanitizeUriProvider"];Kb.prototype.isFirstChange=function(){return this.previousValue===uc};var rd=/^((?:x|data)[:\-_])/i,Jg=
/[:\-_]+(.)/g,xd=F("$controller"),wd=/^(\S+)(\s+as\s+([\w$]+))?$/,Of=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof x&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},yd="application/json",xc={"Content-Type":yd+";charset=utf-8"},Mg=/^\[|^\{(?!\{)/,Ng={"[":/]$/,"{":/}$/},Lg=/^\)]\}',?\n/,Lb=F("$http"),Ma=ca.$interpolateMinErr=F("$interpolate");Ma.throwNoconcat=function(a){throw Ma("noconcat",a);};Ma.interr=function(a,b){return Ma("interr",a,b.toString())};
var Qg=F("$interval"),Xf=function(){this.$get=function(){function a(a){var b=function(a){b.data=a;b.called=!0};b.id=a;return b}var b=ca.callbacks,d={};return{createCallback:function(c){c="_"+(b.$$counter++).toString(36);var e="angular.callbacks."+c,f=a(c);d[e]=b[c]=f;return e},wasCalled:function(a){return d[a].called},getResponse:function(a){return d[a].data},removeCallback:function(a){delete b[d[a].id];delete d[a]}}}},uh=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,Rg={http:80,https:443,ftp:21},kb=F("$location"),
Sg=/^\s*[\\/]{2,}/,vh={$$absUrl:"",$$html5:!1,$$replace:!1,$$compose:function(){for(var a=this.$$path,b=this.$$hash,d=Ce(this.$$search),b=b?"#"+ic(b):"",a=a.split("/"),c=a.length;c--;)a[c]=ic(a[c].replace(/%2F/g,"/"));this.$$url=a.join("/")+(d?"?"+d:"")+b;this.$$absUrl=this.$$normalizeUrl(this.$$url);this.$$urlUpdatedByLocation=!0},absUrl:Mb("$$absUrl"),url:function(a){if(A(a))return this.$$url;var b=uh.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||
"");this.hash(b[5]||"");return this},protocol:Mb("$$protocol"),host:Mb("$$host"),port:Mb("$$port"),path:Fd("$$path",function(a){a=null!==a?a.toString():"";return"/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(C(a)||X(a))a=a.toString(),this.$$search=hc(a);else if(D(a))a=Ia(a,{}),r(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw kb("isrcharg");break;default:A(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();
return this},hash:Fd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};r([Ed,Ac,zc],function(a){a.prototype=Object.create(vh);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==zc||!this.$$html5)throw kb("nostate");this.$$state=A(b)?null:b;this.$$urlUpdatedByLocation=!0;return this}});var Ya=F("$parse"),Wg={}.constructor.prototype.valueOf,Vb=T();r("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Vb[a]=
!0});var wh={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Ob=function(a){this.options=a};Ob.prototype={constructor:Ob,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,
text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var b=a+this.peek(),d=b+this.peek(2),c=Vb[b],e=Vb[d];Vb[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===
typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},
isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=
w(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw Ya("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=K(this.text.charAt(this.index));if("."===d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"===d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"===a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!==a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,
text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+
1,this.index+5),e.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=wh[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var q=function(a,b){this.lexer=a;this.options=b};q.Program="Program";q.ExpressionStatement="ExpressionStatement";q.AssignmentExpression="AssignmentExpression";q.ConditionalExpression=
"ConditionalExpression";q.LogicalExpression="LogicalExpression";q.BinaryExpression="BinaryExpression";q.UnaryExpression="UnaryExpression";q.CallExpression="CallExpression";q.MemberExpression="MemberExpression";q.Identifier="Identifier";q.Literal="Literal";q.ArrayExpression="ArrayExpression";q.Property="Property";q.ObjectExpression="ObjectExpression";q.ThisExpression="ThisExpression";q.LocalsExpression="LocalsExpression";q.NGValueParameter="NGValueParameter";q.prototype={ast:function(a){this.text=
a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:q.Program,body:a}},expressionStatement:function(){return{type:q.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},
expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!Jd(a))throw Ya("lval");a={type:q.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:q.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:q.LogicalExpression,
operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:q.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:q.BinaryExpression,operator:b.text,
left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},
primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=Ia(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:q.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",
this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:q.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());
return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");
return{type:q.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:q.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),
b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");return{type:q.ObjectExpression,properties:a}},throwError:function(a,b){throw Ya("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw Ya("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw Ya("ueoe",
this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:q.ThisExpression},$locals:{type:q.LocalsExpression}}};var Hd=2;Ld.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],
body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};Z(a,b.$filter);var d="",c;this.stage="assign";if(c=Kd(a))this.state.computing="assign",d=this.nextId(),this.recurse(c,d),this.return_(d),d="fn.assign="+this.generateFunction("assign","s,v,l");c=Id(a.body);b.stage="inputs";r(c,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}};b.state.computing=d;var k=b.nextId();b.recurse(a,k);b.return_(k);b.state.inputs.push({name:d,isPure:a.isPure});a.watchId=c});this.state.computing="fn";this.stage=
"main";this.recurse(a);a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+d+this.watchFns()+"return fn;";a=(new Function("$filter","getStringValue","ifDefined","plus",a))(this.$filter,Tg,Ug,Gd);this.state=this.stage=void 0;return a},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;r(b,function(b){a.push("var "+b.name+"="+d.generateFunction(b.name,"s"));b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+
";")});b.length&&a.push("fn.inputs=["+b.map(function(a){return a.name}).join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;r(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},
recurse:function(a,b,d,c,e,f){var g,k,h=this,l,m,p;c=c||E;if(!f&&w(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case q.Program:r(a.body,function(b,c){h.recurse(b.expression,void 0,void 0,function(a){k=a});c!==a.body.length-1?h.current().body.push(k,";"):h.return_(k)});break;case q.Literal:m=this.escape(a.value);this.assign(b,m);c(b||m);break;case q.UnaryExpression:this.recurse(a.argument,void 0,
void 0,function(a){k=a});m=a.operator+"("+this.ifDefined(k,0)+")";this.assign(b,m);c(m);break;case q.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){k=a});m="+"===a.operator?this.plus(g,k):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(k,0):"("+g+")"+a.operator+"("+k+")";this.assign(b,m);c(m);break;case q.LogicalExpression:b=b||this.nextId();h.recurse(a.left,b);h.if_("&&"===a.operator?b:h.not(b),h.lazyRecurse(a.right,
b));c(b);break;case q.ConditionalExpression:b=b||this.nextId();h.recurse(a.test,b);h.if_(b,h.lazyRecurse(a.alternate,b),h.lazyRecurse(a.consequent,b));c(b);break;case q.Identifier:b=b||this.nextId();d&&(d.context="inputs"===h.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);h.if_("inputs"===h.stage||h.not(h.getHasOwnProperty("l",a.name)),function(){h.if_("inputs"===h.stage||"s",function(){e&&1!==e&&h.if_(h.isNull(h.nonComputedMember("s",a.name)),
h.lazyAssign(h.nonComputedMember("s",a.name),"{}"));h.assign(b,h.nonComputedMember("s",a.name))})},b&&h.lazyAssign(b,h.nonComputedMember("l",a.name)));c(b);break;case q.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();h.recurse(a.object,g,void 0,function(){h.if_(h.notNull(g),function(){a.computed?(k=h.nextId(),h.recurse(a.property,k),h.getStringValue(k),e&&1!==e&&h.if_(h.not(h.computedMember(g,k)),h.lazyAssign(h.computedMember(g,k),"{}")),m=h.computedMember(g,k),h.assign(b,
m),d&&(d.computed=!0,d.name=k)):(e&&1!==e&&h.if_(h.isNull(h.nonComputedMember(g,a.property.name)),h.lazyAssign(h.nonComputedMember(g,a.property.name),"{}")),m=h.nonComputedMember(g,a.property.name),h.assign(b,m),d&&(d.computed=!1,d.name=a.property.name))},function(){h.assign(b,"undefined")});c(b)},!!e);break;case q.CallExpression:b=b||this.nextId();a.filter?(k=h.filter(a.callee.name),l=[],r(a.arguments,function(a){var b=h.nextId();h.recurse(a,b);l.push(b)}),m=k+"("+l.join(",")+")",h.assign(b,m),c(b)):
(k=h.nextId(),g={},l=[],h.recurse(a.callee,k,g,function(){h.if_(h.notNull(k),function(){r(a.arguments,function(b){h.recurse(b,a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m=g.name?h.member(g.context,g.name,g.computed)+"("+l.join(",")+")":k+"("+l.join(",")+")";h.assign(b,m)},function(){h.assign(b,"undefined")});c(b)}));break;case q.AssignmentExpression:k=this.nextId();g={};this.recurse(a.left,void 0,g,function(){h.if_(h.notNull(g.context),function(){h.recurse(a.right,k);m=h.member(g.context,
g.name,g.computed)+a.operator+k;h.assign(b,m);c(b||m)})},1);break;case q.ArrayExpression:l=[];r(a.elements,function(b){h.recurse(b,a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(b||m);break;case q.ObjectExpression:l=[];p=!1;r(a.properties,function(a){a.computed&&(p=!0)});p?(b=b||this.nextId(),this.assign(b,"{}"),r(a.properties,function(a){a.computed?(g=h.nextId(),h.recurse(a.key,g)):g=a.key.type===q.Identifier?a.key.name:""+a.key.value;k=h.nextId();
h.recurse(a.value,k);h.assign(h.member(b,g,a.computed),k)})):(r(a.properties,function(b){h.recurse(b.value,a.constant?void 0:h.nextId(),void 0,function(a){l.push(h.escape(b.key.type===q.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,m));c(b||m);break;case q.ThisExpression:this.assign(b,"s");c(b||"s");break;case q.LocalsExpression:this.assign(b,"l");c(b||"l");break;case q.NGValueParameter:this.assign(b,"v"),c(b||"v")}},getHasOwnProperty:function(a,b){var d=a+"."+
b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,
b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,
b)},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(C(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(X(a))return a.toString();if(!0===a)return"true";if(!1===
a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw Ya("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};Md.prototype={compile:function(a){var b=this;Z(a,b.$filter);var d,c;if(d=Kd(a))c=this.recurse(d);d=Id(a.body);var e;d&&(e=[],r(d,function(a,c){var d=b.recurse(a);d.isPure=a.isPure;a.input=d;e.push(d);a.watchId=c}));var f=[];r(a.body,
function(a){f.push(b.recurse(a.expression))});a=0===a.body.length?E:1===a.body.length?f[0]:function(a,b){var c;r(f,function(d){c=d(a,b)});return c};c&&(a.assign=function(a,b,d){return c(a,d,b)});e&&(a.inputs=e);return a},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case q.Literal:return this.value(a.value,b);case q.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case q.BinaryExpression:return c=this.recurse(a.left),
e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case q.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case q.Identifier:return f.identifier(a.name,b,d);case q.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,
e,b,d):this.nonComputedMember(c,e,b,d);case q.CallExpression:return g=[],r(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var p=[],n=0;n<g.length;++n)p.push(g[n](a,c,d,f));a=e.apply(void 0,p,f);return b?{context:void 0,name:void 0,value:a}:a}:function(a,c,d,f){var p=e(a,c,d,f),n;if(null!=p.value){n=[];for(var s=0;s<g.length;++s)n.push(g[s](a,c,d,f));n=p.value.apply(p.context,n)}return b?
{value:n}:n};case q.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,f,g){var p=c(a,d,f,g);a=e(a,d,f,g);p.context[p.name]=a;return b?{value:a}:a};case q.ArrayExpression:return g=[],r(a.elements,function(a){g.push(f.recurse(a))}),function(a,c,d,e){for(var f=[],n=0;n<g.length;++n)f.push(g[n](a,c,d,e));return b?{value:f}:f};case q.ObjectExpression:return g=[],r(a.properties,function(a){a.computed?g.push({key:f.recurse(a.key),computed:!0,value:f.recurse(a.value)}):
g.push({key:a.key.type===q.Identifier?a.key.name:""+a.key.value,computed:!1,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},n=0;n<g.length;++n)g[n].computed?f[g[n].key(a,c,d,e)]=g[n].value(a,c,d,e):f[g[n].key]=g[n].value(a,c,d,e);return b?{value:f}:f};case q.ThisExpression:return function(a){return b?{value:a}:a};case q.LocalsExpression:return function(a,c){return b?{value:c}:c};case q.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,
c,e,f){d=a(d,c,e,f);d=w(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=w(d)?-d:-0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var k=a(c,e,f,g);c=b(c,e,f,g);k=Gd(k,c);return d?{value:k}:k}},"binary-":function(a,b,d){return function(c,e,f,g){var k=a(c,e,f,g);c=b(c,e,f,g);k=(w(k)?k:0)-(w(c)?c:0);return d?{value:k}:k}},"binary*":function(a,b,
d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,
e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,e,f,g){c=
a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,k){e=a(e,f,g,k)?b(e,f,g,k):d(e,f,g,k);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d){return function(c,e,f,g){c=
e&&a in e?e:c;d&&1!==d&&c&&null==c[a]&&(c[a]={});e=c?c[a]:void 0;return b?{context:c,name:a,value:e}:e}},computedMember:function(a,b,d,c){return function(e,f,g,k){var h=a(e,f,g,k),l,m;null!=h&&(l=b(e,f,g,k),l+="",c&&1!==c&&h&&!h[l]&&(h[l]={}),m=h[l]);return d?{context:h,name:l,value:m}:m}},nonComputedMember:function(a,b,d,c){return function(e,f,g,k){e=a(e,f,g,k);c&&1!==c&&e&&null==e[b]&&(e[b]={});f=null!=e?e[b]:void 0;return d?{context:e,name:b,value:f}:f}},inputs:function(a,b){return function(d,
c,e,f){return f?f[b]:a(d,c,e)}}};Nb.prototype={constructor:Nb,parse:function(a){a=this.getAst(a);var b=this.astCompiler.compile(a.ast),d=a.ast;b.literal=0===d.body.length||1===d.body.length&&(d.body[0].expression.type===q.Literal||d.body[0].expression.type===q.ArrayExpression||d.body[0].expression.type===q.ObjectExpression);b.constant=a.ast.constant;b.oneTime=a.oneTime;return b},getAst:function(a){var b=!1;a=a.trim();":"===a.charAt(0)&&":"===a.charAt(1)&&(b=!0,a=a.substring(2));return{ast:this.ast.ast(a),
oneTime:b}}};var Ea=F("$sce"),W={HTML:"html",CSS:"css",MEDIA_URL:"mediaUrl",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Dc=/_([a-z])/g,Zg=F("$templateRequest"),$g=F("$timeout"),aa=z.document.createElement("a"),Qd=ga(z.location.href),Na;aa.href="http://[::1]";var ah="[::1]"===aa.hostname;Rd.$inject=["$document"];fd.$inject=["$provide"];var Yd=22,Xd=".",Fc="0";Sd.$inject=["$locale"];Ud.$inject=["$locale"];var lh={yyyy:ea("FullYear",4,0,!1,!0),yy:ea("FullYear",2,0,!0,!0),y:ea("FullYear",1,0,!1,!0),
MMMM:lb("Month"),MMM:lb("Month",!0),MM:ea("Month",2,1),M:ea("Month",1,1),LLLL:lb("Month",!1,!0),dd:ea("Date",2),d:ea("Date",1),HH:ea("Hours",2),H:ea("Hours",1),hh:ea("Hours",2,-12),h:ea("Hours",1,-12),mm:ea("Minutes",2),m:ea("Minutes",1),ss:ea("Seconds",2),s:ea("Seconds",1),sss:ea("Milliseconds",3),EEEE:lb("Day"),EEE:lb("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Pb(Math[0<a?"floor":"ceil"](a/60),2)+Pb(Math.abs(a%60),2))},
ww:$d(2),w:$d(1),G:Gc,GG:Gc,GGG:Gc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},kh=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,jh=/^-?\d+$/;Td.$inject=["$locale"];var eh=ia(K),fh=ia(vb);Vd.$inject=["$parse"];var Re=ia({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===la.call(b.prop("href"))?"xlink:href":"href";
b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),wb={};r(Hb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!==a){var c=xa("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});wb[c]=function(){return{restrict:"A",priority:100,link:e}}}});r(vd,function(a,b){wb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"===e.ngPattern.charAt(0)&&(c=e.ngPattern.match(ke))){e.$set("ngPattern",new RegExp(c[1],
c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});r(["src","srcset","href"],function(a){var b=xa("ng-"+a);wb[b]=["$sce",function(d){return{priority:99,link:function(c,e,f){var g=a,k=a;"href"===a&&"[object SVGAnimatedString]"===la.call(e.prop("href"))&&(k="xlinkHref",f.$attr[k]="xlink:href",g=null);f.$set(b,d.getTrustedMediaUrl(f[b]));f.$observe(b,function(b){b?(f.$set(k,b),wa&&g&&e.prop(g,f[k])):"href"===a&&f.$set(k,null)})}}}]});var mb={$addControl:E,$getControls:ia([]),$$renameControl:function(a,
b){a.$name=b},$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E,$setSubmitted:E,$$setSubmitted:E};Qb.$inject=["$element","$attrs","$scope","$animate","$interpolate"];Qb.prototype={$rollbackViewValue:function(){r(this.$$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){r(this.$$controls,function(a){a.$commitViewValue()})},$addControl:function(a){Ja(a.$name,"input");this.$$controls.push(a);a.$name&&(this[a.$name]=a);a.$$parentForm=this},$getControls:function(){return ja(this.$$controls)},
$$renameControl:function(a,b){var d=a.$name;this[d]===a&&delete this[d];this[b]=a;a.$name=b},$removeControl:function(a){a.$name&&this[a.$name]===a&&delete this[a.$name];r(this.$pending,function(b,d){this.$setValidity(d,null,a)},this);r(this.$error,function(b,d){this.$setValidity(d,null,a)},this);r(this.$$success,function(b,d){this.$setValidity(d,null,a)},this);cb(this.$$controls,a);a.$$parentForm=mb},$setDirty:function(){this.$$animate.removeClass(this.$$element,Za);this.$$animate.addClass(this.$$element,
Wb);this.$dirty=!0;this.$pristine=!1;this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,Za,Wb+" ng-submitted");this.$dirty=!1;this.$pristine=!0;this.$submitted=!1;r(this.$$controls,function(a){a.$setPristine()})},$setUntouched:function(){r(this.$$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){for(var a=this;a.$$parentForm&&a.$$parentForm!==mb;)a=a.$$parentForm;a.$$setSubmitted()},$$setSubmitted:function(){this.$$animate.addClass(this.$$element,
"ng-submitted");this.$submitted=!0;r(this.$$controls,function(a){a.$$setSubmitted&&a.$$setSubmitted()})}};ce({clazz:Qb,set:function(a,b,d){var c=a[b];c?-1===c.indexOf(d)&&c.push(d):a[b]=[d]},unset:function(a,b,d){var c=a[b];c&&(cb(c,d),0===c.length&&delete a[b])}});var oe=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||E}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Qb,compile:function(d,f){d.addClass(Za).addClass(nb);
var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var p=f[0];if(!("action"in e)){var n=function(b){a.$apply(function(){p.$commitViewValue();p.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",n);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",n)},0,!1)})}(f[1]||p.$$parentForm).$addControl(p);var s=g?c(p.$name):E;g&&(s(a,p),e.$observe(g,function(b){p.$name!==b&&(s(a,void 0),p.$$parentForm.$$renameControl(p,b),s=c(p.$name),s(a,p))}));
d.on("$destroy",function(){p.$$parentForm.$removeControl(p);s(a,void 0);S(p,mb)})}}}}}]},Se=oe(),df=oe(!0),mh=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,xh=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,yh=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,
nh=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,pe=/^(\d{4,})-(\d{2})-(\d{2})$/,qe=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Oc=/^(\d{4,})-W(\d\d)$/,re=/^(\d{4,})-(\d\d)$/,se=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,ee=T();r(["date","datetime-local","month","time","week"],function(a){ee[a]=!0});var te={text:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Ic(c)},date:ob("date",pe,Rb(pe,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":ob("datetimelocal",qe,Rb(qe,"yyyy MM dd HH mm ss sss".split(" ")),
"yyyy-MM-ddTHH:mm:ss.sss"),time:ob("time",se,Rb(se,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:ob("week",Oc,function(a,b){if(ha(a))return a;if(C(a)){Oc.lastIndex=0;var d=Oc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,k=0,h=Zd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),k=b.getMilliseconds());return new Date(c,0,h.getDate()+e,d,f,g,k)}}return NaN},"yyyy-Www"),month:ob("month",re,Rb(re,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f,g,k){Jc(a,b,d,c,"number");fe(c);Sa(a,
b,d,c,e,f);var h;if(w(d.min)||d.ngMin){var l=d.min||k(d.ngMin)(a);h=na(l);c.$validators.min=function(a,b){return c.$isEmpty(b)||A(h)||b>=h};d.$observe("min",function(a){a!==l&&(h=na(a),l=a,c.$validate())})}if(w(d.max)||d.ngMax){var m=d.max||k(d.ngMax)(a),p=na(m);c.$validators.max=function(a,b){return c.$isEmpty(b)||A(p)||b<=p};d.$observe("max",function(a){a!==m&&(p=na(a),m=a,c.$validate())})}if(w(d.step)||d.ngStep){var n=d.step||k(d.ngStep)(a),s=na(n);c.$validators.step=function(a,b){return c.$isEmpty(b)||
A(s)||ge(b,h||0,s)};d.$observe("step",function(a){a!==n&&(s=na(a),n=a,c.$validate())})}},url:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Ic(c);c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||xh.test(d)}},email:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Ic(c);c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||yh.test(d)}},radio:function(a,b,d,c){var e=!d.ngTrim||"false"!==V(d.ngTrim);A(d.name)&&b.attr("name",++qb);b.on("change",function(a){var g;b[0].checked&&(g=d.value,e&&(g=
V(g)),c.$setViewValue(g,a&&a.type))});c.$render=function(){var a=d.value;e&&(a=V(a));b[0].checked=a===c.$viewValue};d.$observe("value",c.$render)},range:function(a,b,d,c,e,f){function g(a,c){b.attr(a,d[a]);var e=d[a];d.$observe(a,function(a){a!==e&&(e=a,c(a))})}function k(a){p=na(a);Y(c.$modelValue)||(m?(a=b.val(),p>a&&(a=p,b.val(a)),c.$setViewValue(a)):c.$validate())}function h(a){n=na(a);Y(c.$modelValue)||(m?(a=b.val(),n<a&&(b.val(n),a=n<p?p:n),c.$setViewValue(a)):c.$validate())}function l(a){s=
na(a);Y(c.$modelValue)||(m?c.$viewValue!==b.val()&&c.$setViewValue(b.val()):c.$validate())}Jc(a,b,d,c,"range");fe(c);Sa(a,b,d,c,e,f);var m=c.$$hasNativeValidators&&"range"===b[0].type,p=m?0:void 0,n=m?100:void 0,s=m?1:void 0,r=b[0].validity;a=w(d.min);e=w(d.max);f=w(d.step);var q=c.$render;c.$render=m&&w(r.rangeUnderflow)&&w(r.rangeOverflow)?function(){q();c.$setViewValue(b.val())}:q;a&&(p=na(d.min),c.$validators.min=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||A(p)||b>=p},g("min",k));
e&&(n=na(d.max),c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||A(n)||b<=n},g("max",h));f&&(s=na(d.step),c.$validators.step=m?function(){return!r.stepMismatch}:function(a,b){return c.$isEmpty(b)||A(s)||ge(b,p||0,s)},g("step",l))},checkbox:function(a,b,d,c,e,f,g,k){var h=he(k,a,"ngTrueValue",d.ngTrueValue,!0),l=he(k,a,"ngFalseValue",d.ngFalseValue,!1);b.on("change",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=
function(a){return!1===a};c.$formatters.push(function(a){return va(a,h)});c.$parsers.push(function(a){return a?h:l})},hidden:E,button:E,submit:E,reset:E,file:E},$c=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,k){k[0]&&(te[K(g.type)]||te.text)(e,f,g,k[0],b,a,d,c)}}}}],Af=function(){var a={configurable:!0,enumerable:!1,get:function(){return this.getAttribute("value")||""},set:function(a){this.setAttribute("value",a)}};
return{restrict:"E",priority:200,compile:function(b,d){if("hidden"===K(d.type))return{pre:function(b,d,f,g){b=d[0];b.parentNode&&b.parentNode.insertBefore(b,b.nextSibling);Object.defineProperty&&Object.defineProperty(b,"value",a)}}}}},zh=/^(true|false|\d+)$/,xf=function(){function a(a,d,c){var e=w(c)?c:9===wa?"":null;a.prop("value",e);d.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,d){return zh.test(d.ngValue)?function(b,d,f){b=b.$eval(f.ngValue);a(d,f,b)}:function(b,d,f){b.$watch(f.ngValue,
function(b){a(d,f,b)})}}}},We=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=jc(a)})}}}}],Ye=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=A(a)?"":a})}}}}],
Xe=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){var d=f(b);c.html(a.getTrustedHtml(d)||"")})}}}}],wf=ia({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Ze=Lc("",!0),af=Lc("Odd",0),$e=Lc("Even",1),bf=Ra({compile:function(a,
b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),cf=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],ed={},Ah={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=xa("ng-"+a);ed[b]=["$parse","$rootScope","$exceptionHandler",function(d,c,e){return sd(d,c,e,b,a,Ah[a])}]});var ff=["$animate","$compile",function(a,b){return{multiElement:!0,
transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var k,h,l;d.$watch(e.ngIf,function(d){d?h||g(function(d,f){h=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);k={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),h&&(h.$destroy(),h=null),k&&(l=ub(k.clone),a.leave(l).done(function(a){!1!==a&&(l=null)}),k=null))})}}}],gf=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",
controller:ca.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",k=e.autoscroll;return function(c,e,m,p,n){var r=0,q,t,x,v=function(){t&&(t.remove(),t=null);q&&(q.$destroy(),q=null);x&&(d.leave(x).done(function(a){!1!==a&&(t=null)}),t=x,x=null)};c.$watch(f,function(f){var m=function(a){!1===a||!w(k)||k&&!c.$eval(k)||b()},t=++r;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&t===r){var b=c.$new();p.template=a;a=n(b,function(a){v();d.enter(a,null,e).done(m)});q=b;x=a;q.$emit("$includeContentLoaded",
f);c.$eval(g)}},function(){c.$$destroyed||t!==r||(v(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(v(),p.template=null)})}}}}],zf=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){la.call(d[0]).match(/SVG/)?(d.empty(),a(gd(e.template,z.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],hf=Ra({priority:450,compile:function(){return{pre:function(a,
b,d){a.$eval(d.ngInit)}}}}),vf=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=d.ngList||", ",f="false"!==d.ngTrim,g=f?V(e):e;c.$parsers.push(function(a){if(!A(a)){var b=[];a&&r(a.split(g),function(a){a&&b.push(f?V(a):a)});return b}});c.$formatters.push(function(a){if(H(a))return a.join(e)});c.$isEmpty=function(a){return!a||!a.length}}}},nb="ng-valid",be="ng-invalid",Za="ng-pristine",Wb="ng-dirty",pb=F("ngModel");Sb.$inject="$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");
Sb.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$$parse(this.$$attr.ngModel+"()"),b=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(b){var c=this.$$parsedNgModel(b);B(c)&&(c=a(b));return c};this.$$ngModelSet=function(a,c){B(this.$$parsedNgModel(a))?b(a,{$$$p:c}):this.$$parsedNgModelAssign(a,c)}}else if(!this.$$parsedNgModel.assign)throw pb("nonassign",this.$$attr.ngModel,Aa(this.$$element));},$render:E,$isEmpty:function(a){return A(a)||
""===a||null===a||a!==a},$$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1;this.$pristine=!0;this.$$animate.removeClass(this.$$element,Wb);this.$$animate.addClass(this.$$element,Za)},$setDirty:function(){this.$dirty=!0;this.$pristine=!1;this.$$animate.removeClass(this.$$element,
Za);this.$$animate.addClass(this.$$element,Wb);this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1;this.$untouched=!0;this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0;this.$untouched=!1;this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce);this.$viewValue=this.$$lastCommittedViewValue;this.$render()},$validate:function(){if(!Y(this.$modelValue)){var a=
this.$$lastCommittedViewValue,b=this.$$rawModelValue,d=this.$valid,c=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$$runValidators(b,a,function(a){e||d===a||(f.$modelValue=a?b:void 0,f.$modelValue!==c&&f.$$writeModelToScope())})}},$$runValidators:function(a,b,d){function c(){var c=!0;r(h.$validators,function(d,e){var g=Boolean(d(a,b));c=c&&g;f(e,g)});return c?!0:(r(h.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;r(h.$asyncValidators,function(e,
g){var h=e(a,b);if(!h||!B(h.then))throw pb("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?h.$$q.all(c).then(function(){g(d)},E):g(!0)}function f(a,b){k===h.$$currentValidationRunId&&h.$setValidity(a,b)}function g(a){k===h.$$currentValidationRunId&&d(a)}this.$$currentValidationRunId++;var k=this.$$currentValidationRunId,h=this;(function(){var a=h.$$parserName;if(A(h.$$parserValid))f(a,null);else return h.$$parserValid||(r(h.$validators,function(a,
b){f(b,null)}),r(h.$asyncValidators,function(a,b){f(b,null)})),f(a,h.$$parserValid),h.$$parserValid;return!0})()?c()?e():g(!1):g(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce);if(this.$$lastCommittedViewValue!==a||""===a&&this.$$hasNativeValidators)this.$$updateEmptyClasses(a),this.$$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$$parseAndValidate()},$$parseAndValidate:function(){var a=this.$$lastCommittedViewValue,b=this;this.$$parserValid=
A(a)?void 0:!0;this.$setValidity(this.$$parserName,null);this.$$parserName="parse";if(this.$$parserValid)for(var d=0;d<this.$parsers.length;d++)if(a=this.$parsers[d](a),A(a)){this.$$parserValid=!1;break}Y(this.$modelValue)&&(this.$modelValue=this.$$ngModelGet(this.$$scope));var c=this.$modelValue,e=this.$options.getOption("allowInvalid");this.$$rawModelValue=a;e&&(this.$modelValue=a,b.$modelValue!==c&&b.$$writeModelToScope());this.$$runValidators(a,this.$$lastCommittedViewValue,function(d){e||(b.$modelValue=
d?a:void 0,b.$modelValue!==c&&b.$$writeModelToScope())})},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,this.$modelValue);r(this.$viewChangeListeners,function(a){try{a()}catch(b){this.$$exceptionHandler(b)}},this)},$setViewValue:function(a,b){this.$viewValue=a;this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(b)},$$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");X(b[a])?b=b[a]:X(b["default"])&&-1===this.$options.getOption("updateOn").indexOf(a)?
b=b["default"]:X(b["*"])&&(b=b["*"]);this.$$timeout.cancel(this.$$pendingDebounce);var d=this;0<b?this.$$pendingDebounce=this.$$timeout(function(){d.$commitViewValue()},b):this.$$rootScope.$$phase?this.$commitViewValue():this.$$scope.$apply(function(){d.$commitViewValue()})},$overrideModelOptions:function(a){this.$options=this.$options.createChild(a);this.$$setUpdateOnEvents()},$processModelValue:function(){var a=this.$$format();this.$viewValue!==a&&(this.$$updateEmptyClasses(a),this.$viewValue=this.$$lastCommittedViewValue=
a,this.$render(),this.$$runValidators(this.$modelValue,this.$viewValue,E))},$$format:function(){for(var a=this.$formatters,b=a.length,d=this.$modelValue;b--;)d=a[b](d);return d},$$setModelValue:function(a){this.$modelValue=this.$$rawModelValue=a;this.$$parserValid=void 0;this.$processModelValue()},$$setUpdateOnEvents:function(){this.$$updateEvents&&this.$$element.off(this.$$updateEvents,this.$$updateEventHandler);if(this.$$updateEvents=this.$options.getOption("updateOn"))this.$$element.on(this.$$updateEvents,
this.$$updateEventHandler)},$$updateEventHandler:function(a){this.$$debounceViewValueCommit(a&&a.type)}};ce({clazz:Sb,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var uf=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Sb,priority:1,compile:function(b){b.addClass(Za).addClass("ng-untouched").addClass(nb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||g.$$parentForm;if(f=f[2])g.$options=f.$options;g.$$initGetterSetters();b.$addControl(g);
e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){function g(){k.$setTouched()}var k=f[0];k.$$setUpdateOnEvents();c.on("blur",function(){k.$touched||(a.$$phase?b.$evalAsync(g):b.$apply(g))})}}}}}],Tb,Bh=/(\s+|^)default(\s+|$)/;Mc.prototype={getOption:function(a){return this.$$options[a]},createChild:function(a){var b=!1;a=S({},a);r(a,function(d,c){"$inherit"===d?"*"===c?b=!0:(a[c]=
this.$$options[c],"updateOn"===c&&(a.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===c&&(a.updateOnDefault=!1,a[c]=V(d.replace(Bh,function(){a.updateOnDefault=!0;return" "})))},this);b&&(delete a["*"],ie(a,this.$$options));ie(a,Tb.$$options);return new Mc(a)}};Tb=new Mc({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var yf=function(){function a(a,d){this.$$attrs=a;this.$$scope=d}a.$inject=["$attrs","$scope"];a.prototype={$onInit:function(){var a=
this.parentCtrl?this.parentCtrl.$options:Tb,d=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=a.createChild(d)}};return{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},jf=Ra({terminal:!0,priority:1E3}),Ch=F("ngOptions"),Dh=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
sf=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!r&&za(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var p=a.match(Dh);if(!p)throw Ch("iexp",a,Aa(b));var n=p[5]||p[7],r=p[6];a=/ as /.test(p[0])&&p[1];var q=p[9];b=d(p[2]?p[1]:n);var t=a&&d(a)||b,w=q&&d(q),v=q?function(a,b){return w(c,b)}:function(a){return La(a)},
x=function(a,b){return v(a,B(a,b))},A=d(p[2]||p[1]),y=d(p[3]||""),J=d(p[4]||""),I=d(p[8]),z={},B=r?function(a,b){z[r]=b;z[n]=a;return z}:function(a){z[n]=a;return z};return{trackBy:q,getTrackByValue:x,getWatchables:d(I,function(a){var b=[];a=a||[];for(var d=f(a),e=d.length,g=0;g<e;g++){var k=a===d?g:d[g],l=a[k],k=B(l,k),l=v(l,k);b.push(l);if(p[2]||p[1])l=A(c,k),b.push(l);p[4]&&(k=J(c,k),b.push(k))}return b}),getOptions:function(){for(var a=[],b={},d=I(c)||[],g=f(d),k=g.length,n=0;n<k;n++){var p=d===
g?n:g[n],r=B(d[p],p),s=t(c,r),p=v(s,r),w=A(c,r),z=y(c,r),r=J(c,r),s=new e(p,s,w,z,r);a.push(s);b[p]=s}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[x(a)]},getViewValueFromOption:function(a){return q?Ia(a.viewValue):a.viewValue}}}}}var e=z.document.createElement("option"),f=z.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=E},post:function(d,k,h,l){function m(a){var b=(a=v.getOptionFromViewValue(a))&&
a.element;b&&!b.selected&&(b.selected=!0);return a}function p(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);b.value=a.selectValue}var n=l[0],q=l[1],A=h.multiple;l=0;for(var t=k.children(),z=t.length;l<z;l++)if(""===t[l].value){n.hasEmptyOption=!0;n.emptyOption=t.eq(l);break}k.empty();l=!!n.emptyOption;x(e.cloneNode(!1)).val("?");var v,B=c(h.ngOptions,k,d),C=b[0].createDocumentFragment();n.generateUnknownOptionValue=function(a){return"?"};A?(n.writeValue=
function(a){if(v){var b=a&&a.map(m)||[];v.items.forEach(function(a){a.element.selected&&-1===Array.prototype.indexOf.call(b,a)&&(a.element.selected=!1)})}},n.readValue=function(){var a=k.val()||[],b=[];r(a,function(a){(a=v.selectValueMap[a])&&!a.disabled&&b.push(v.getViewValueFromOption(a))});return b},B.trackBy&&d.$watchCollection(function(){if(H(q.$viewValue))return q.$viewValue.map(function(a){return B.getTrackByValue(a)})},function(){q.$render()})):(n.writeValue=function(a){if(v){var b=k[0].options[k[0].selectedIndex],
c=v.getOptionFromViewValue(a);b&&b.removeAttribute("selected");c?(k[0].value!==c.selectValue&&(n.removeUnknownOption(),k[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):n.selectUnknownOrEmptyOption(a)}},n.readValue=function(){var a=v.selectValueMap[k.val()];return a&&!a.disabled?(n.unselectEmptyOption(),n.removeUnknownOption(),v.getViewValueFromOption(a)):null},B.trackBy&&d.$watch(function(){return B.getTrackByValue(q.$viewValue)},function(){q.$render()}));
l&&(a(n.emptyOption)(d),k.prepend(n.emptyOption),8===n.emptyOption[0].nodeType?(n.hasEmptyOption=!1,n.registerOption=function(a,b){""===b.val()&&(n.hasEmptyOption=!0,n.emptyOption=b,n.emptyOption.removeClass("ng-scope"),q.$render(),b.on("$destroy",function(){var a=n.$isEmptyOptionSelected();n.hasEmptyOption=!1;n.emptyOption=void 0;a&&q.$render()}))}):n.emptyOption.removeClass("ng-scope"));d.$watchCollection(B.getWatchables,function(){var a=v&&n.readValue();if(v)for(var b=v.items.length-1;0<=b;b--){var c=
v.items[b];w(c.group)?Gb(c.element.parentNode):Gb(c.element)}v=B.getOptions();var d={};v.items.forEach(function(a){var b;if(w(a.group)){b=d[a.group];b||(b=f.cloneNode(!1),C.appendChild(b),b.label=null===a.group?"null":a.group,d[a.group]=b);var c=e.cloneNode(!1);b.appendChild(c);p(a,c)}else b=e.cloneNode(!1),C.appendChild(b),p(a,b)});k[0].appendChild(C);q.$render();q.$isEmpty(a)||(b=n.readValue(),(B.trackBy||A?va(a,b):a===b)||(q.$setViewValue(b),q.$render()))})}}}}],kf=["$locale","$interpolate","$log",
function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,k){function h(a){g.text(a||"")}var l=k.count,m=k.$attr.when&&g.attr(k.$attr.when),p=k.offset||0,n=f.$eval(m)||{},q={},w=b.startSymbol(),t=b.endSymbol(),x=w+l+"-"+p+t,v=ca.noop,z;r(k,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+K(c[2]),n[c]=g.attr(k.$attr[b]))});r(n,function(a,d){q[d]=b(a.replace(c,x))});f.$watch(l,function(b){var c=parseFloat(b),e=Y(c);e||c in n||(c=a.pluralCat(c-p));c===z||e&&Y(z)||(v(),e=q[c],A(e)?
(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+m),v=E,h()):v=f.$watch(e,h),z=c)})}}}],ue=F("ngRef"),lf=["$parse",function(a){return{priority:-1,restrict:"A",compile:function(b,d){var c=xa(ua(b)),e=a(d.ngRef),f=e.assign||function(){throw ue("nonassign",d.ngRef);};return function(a,b,h){var l;if(h.hasOwnProperty("ngRefRead"))if("$element"===h.ngRefRead)l=b;else{if(l=b.data("$"+h.ngRefRead+"Controller"),!l)throw ue("noctrl",h.ngRefRead,d.ngRef);}else l=b.data("$"+c+"Controller");l=
l||b;f(a,l);b.on("$destroy",function(){e(a)===l&&f(a,null)})}}}}],mf=["$parse","$animate","$compile",function(a,b,d){var c=F("ngRepeat"),e=function(a,b,c,d,e,f,g){a[c]=d;e&&(a[e]=f);a.$index=b;a.$first=0===b;a.$last=b===g-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))},f=function(a,b,c){return La(c)},g=function(a,b){return b};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(k,h){var l=h.ngRepeat,m=d.$$createComment("end ngRepeat",
l),p=l.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!p)throw c("iexp",l);var n=p[1],q=p[2],w=p[3],t=p[4],p=n.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);if(!p)throw c("iidexp",n);var x=p[3]||p[1],v=p[2];if(w&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(w)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(w)))throw c("badident",w);var A;if(t){var z={$id:La},y=a(t);A=function(a,b,c,d){v&&
(z[v]=b);z[x]=c;z.$index=d;return y(a,z)}}return function(a,d,h,k,n){var p=T();a.$watchCollection(q,function(h){var k,q,t=d[0],s,y=T(),B,C,E,D,H,F,K;w&&(a[w]=h);if(za(h))H=h,q=A||f;else for(K in q=A||g,H=[],h)ta.call(h,K)&&"$"!==K.charAt(0)&&H.push(K);B=H.length;K=Array(B);for(k=0;k<B;k++)if(C=h===H?k:H[k],E=h[C],D=q(a,C,E,k),p[D])F=p[D],delete p[D],y[D]=F,K[k]=F;else{if(y[D])throw r(K,function(a){a&&a.scope&&(p[a.id]=a)}),c("dupes",l,D,E);K[k]={id:D,scope:void 0,clone:void 0};y[D]=!0}z&&(z[x]=void 0);
for(s in p){F=p[s];D=ub(F.clone);b.leave(D);if(D[0].parentNode)for(k=0,q=D.length;k<q;k++)D[k].$$NG_REMOVED=!0;F.scope.$destroy()}for(k=0;k<B;k++)if(C=h===H?k:H[k],E=h[C],F=K[k],F.scope){s=t;do s=s.nextSibling;while(s&&s.$$NG_REMOVED);F.clone[0]!==s&&b.move(ub(F.clone),null,t);t=F.clone[F.clone.length-1];e(F.scope,k,x,E,v,C,B)}else n(function(a,c){F.scope=c;var d=m.cloneNode(!1);a[a.length++]=d;b.enter(a,null,t);t=d;F.clone=a;y[F.id]=F;e(F.scope,k,x,E,v,C,B)});p=y})}}}}],nf=["$animate",function(a){return{restrict:"A",
multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],ef=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],of=Ra(function(a,b,d){a.$watchCollection(d.ngStyle,function(a,d){d&&a!==d&&r(d,function(a,c){b.css(c,"")});a&&b.css(a)})}),pf=["$animate","$compile",function(a,
b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,e,f){var g=[],k=[],h=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};d.$watch(e.ngSwitch||e.on,function(c){for(var d,e;h.length;)a.cancel(h.pop());d=0;for(e=l.length;d<e;++d){var q=ub(k[d].clone);l[d].$destroy();(h[d]=a.leave(q)).done(m(h,d))}k.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");
k.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],qf=Ra({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){a=d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b-1]!==a});r(a,function(a){c.cases["!"+a]=c.cases["!"+a]||[];c.cases["!"+a].push({transclude:e,element:b})})}}),rf=Ra({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,
element:b})}}),Eh=F("ngTransclude"),tf=["$compile",function(a){return{restrict:"EAC",compile:function(b){var d=a(b.contents());b.empty();return function(a,b,f,g,k){function h(){d(a,function(a){b.append(a)})}if(!k)throw Eh("orphan",Aa(b));f.ngTransclude===f.$attr.ngTransclude&&(f.ngTransclude="");f=f.ngTransclude||f.ngTranscludeSlot;k(function(a,c){var d;if(d=a.length)a:{d=0;for(var f=a.length;d<f;d++){var g=a[d];if(g.nodeType!==Pa||g.nodeValue.trim()){d=!0;break a}}d=void 0}d?b.append(a):(h(),c.$destroy())},
null,f);f&&!k.isSlotFilled(f)&&h()}}}}],Te=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"===d.type&&a.put(d.id,b[0].text)}}}],Fh={$setViewValue:E,$render:E},Gh=["$element","$scope",function(a,b){function d(){g||(g=!0,b.$$postDigest(function(){g=!1;e.ngModelCtrl.$render()}))}function c(a){k||(k=!0,b.$$postDigest(function(){b.$$destroyed||(k=!1,e.ngModelCtrl.$setViewValue(e.readValue()),a&&e.ngModelCtrl.$render())}))}var e=this,f=new Ib;e.selectValueMap=
{};e.ngModelCtrl=Fh;e.multiple=!1;e.unknownOption=x(z.document.createElement("option"));e.hasEmptyOption=!1;e.emptyOption=void 0;e.renderUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);a.prepend(e.unknownOption);Oa(e.unknownOption,!0);a.val(b)};e.updateUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);Oa(e.unknownOption,!0);a.val(b)};e.generateUnknownOptionValue=function(a){return"? "+La(a)+" ?"};e.removeUnknownOption=function(){e.unknownOption.parent()&&
e.unknownOption.remove()};e.selectEmptyOption=function(){e.emptyOption&&(a.val(""),Oa(e.emptyOption,!0))};e.unselectEmptyOption=function(){e.hasEmptyOption&&Oa(e.emptyOption,!1)};b.$on("$destroy",function(){e.renderUnknownOption=E});e.readValue=function(){var b=a.val(),b=b in e.selectValueMap?e.selectValueMap[b]:b;return e.hasOption(b)?b:null};e.writeValue=function(b){var c=a[0].options[a[0].selectedIndex];c&&Oa(x(c),!1);e.hasOption(b)?(e.removeUnknownOption(),c=La(b),a.val(c in e.selectValueMap?
c:b),Oa(x(a[0].options[a[0].selectedIndex]),!0)):e.selectUnknownOrEmptyOption(b)};e.addOption=function(a,b){if(8!==b[0].nodeType){Ja(a,'"option value"');""===a&&(e.hasEmptyOption=!0,e.emptyOption=b);var c=f.get(a)||0;f.set(a,c+1);d()}};e.removeOption=function(a){var b=f.get(a);b&&(1===b?(f.delete(a),""===a&&(e.hasEmptyOption=!1,e.emptyOption=void 0)):f.set(a,b-1))};e.hasOption=function(a){return!!f.get(a)};e.$hasEmptyOption=function(){return e.hasEmptyOption};e.$isUnknownOptionSelected=function(){return a[0].options[0]===
e.unknownOption[0]};e.$isEmptyOptionSelected=function(){return e.hasEmptyOption&&a[0].options[a[0].selectedIndex]===e.emptyOption[0]};e.selectUnknownOrEmptyOption=function(a){null==a&&e.emptyOption?(e.removeUnknownOption(),e.selectEmptyOption()):e.unknownOption.parent().length?e.updateUnknownOption(a):e.renderUnknownOption(a)};var g=!1,k=!1;e.registerOption=function(a,b,f,g,k){if(f.$attr.ngValue){var q,r;f.$observe("value",function(a){var d,f=b.prop("selected");w(r)&&(e.removeOption(q),delete e.selectValueMap[r],
d=!0);r=La(a);q=a;e.selectValueMap[r]=a;e.addOption(a,b);b.attr("value",r);d&&f&&c()})}else g?f.$observe("value",function(a){e.readValue();var d,f=b.prop("selected");w(q)&&(e.removeOption(q),d=!0);q=a;e.addOption(a,b);d&&f&&c()}):k?a.$watch(k,function(a,d){f.$set("value",a);var g=b.prop("selected");d!==a&&e.removeOption(d);e.addOption(a,b);d&&g&&c()}):e.addOption(f.value,b);f.$observe("disabled",function(a){if("true"===a||a&&b.prop("selected"))e.multiple?c(!0):(e.ngModelCtrl.$setViewValue(null),e.ngModelCtrl.$render())});
b.on("$destroy",function(){var a=e.readValue(),b=f.value;e.removeOption(b);d();(e.multiple&&a&&-1!==a.indexOf(b)||a===b)&&c(!0)})}}],Ue=function(){return{restrict:"E",require:["select","?ngModel"],controller:Gh,priority:1,link:{pre:function(a,b,d,c){var e=c[0],f=c[1];if(f){if(e.ngModelCtrl=f,b.on("change",function(){e.removeUnknownOption();a.$apply(function(){f.$setViewValue(e.readValue())})}),d.multiple){e.multiple=!0;e.readValue=function(){var a=[];r(b.find("option"),function(b){b.selected&&!b.disabled&&
(b=b.value,a.push(b in e.selectValueMap?e.selectValueMap[b]:b))});return a};e.writeValue=function(a){r(b.find("option"),function(b){var c=!!a&&(-1!==Array.prototype.indexOf.call(a,b.value)||-1!==Array.prototype.indexOf.call(a,e.selectValueMap[b.value]));c!==b.selected&&Oa(x(b),c)})};var g,k=NaN;a.$watch(function(){k!==f.$viewValue||va(g,f.$viewValue)||(g=ja(f.$viewValue),f.$render());k=f.$viewValue});f.$isEmpty=function(a){return!a||0===a.length}}}else e.registerOption=E},post:function(a,b,d,c){var e=
c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},Ve=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){var c,e;w(d.ngValue)||(w(d.value)?c=a(d.value,!0):(e=a(b.text(),!0))||d.$set("value",b.text()));return function(a,b,d){var h=b.parent();(h=h.data("$selectController")||h.parent().data("$selectController"))&&h.registerOption(a,b,d,c,e)}}}}],bd=["$parse",function(a){return{restrict:"A",require:"?ngModel",link:function(b,d,c,e){if(e){var f=
c.hasOwnProperty("required")||a(c.ngRequired)(b);c.ngRequired||(c.required=!0);e.$validators.required=function(a,b){return!f||!e.$isEmpty(b)};c.$observe("required",function(a){f!==a&&(f=a,e.$validate())})}}}}],ad=["$parse",function(a){return{restrict:"A",require:"?ngModel",compile:function(b,d){var c,e;d.ngPattern&&(c=d.ngPattern,e="/"===d.ngPattern.charAt(0)&&ke.test(d.ngPattern)?function(){return d.ngPattern}:a(d.ngPattern));return function(a,b,d,h){if(h){var l=d.pattern;d.ngPattern?l=e(a):c=d.pattern;
var m=je(l,c,b);d.$observe("pattern",function(a){var d=m;m=je(a,c,b);(d&&d.toString())!==(m&&m.toString())&&h.$validate()});h.$validators.pattern=function(a,b){return h.$isEmpty(b)||A(m)||m.test(b)}}}}}}],dd=["$parse",function(a){return{restrict:"A",require:"?ngModel",link:function(b,d,c,e){if(e){var f=c.maxlength||a(c.ngMaxlength)(b),g=Ub(f);c.$observe("maxlength",function(a){f!==a&&(g=Ub(a),f=a,e.$validate())});e.$validators.maxlength=function(a,b){return 0>g||e.$isEmpty(b)||b.length<=g}}}}}],cd=
["$parse",function(a){return{restrict:"A",require:"?ngModel",link:function(b,d,c,e){if(e){var f=c.minlength||a(c.ngMinlength)(b),g=Ub(f)||-1;c.$observe("minlength",function(a){f!==a&&(g=Ub(a)||-1,f=a,e.$validate())});e.$validators.minlength=function(a,b){return e.$isEmpty(b)||b.length>=g}}}}}];z.angular.bootstrap?z.console&&console.log("WARNING: Tried to load AngularJS more than once."):(Je(),Oe(ca),ca.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==
b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),
WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,
c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),x(function(){Ee(z.document,Wc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend(window.angular.element("<style>").text('@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}'));
//# sourceMappingURL=angular.min.js.map
;
(function () {

    var mediaApp = angular.module("softouch", ['ngAnimate']);
    // Prototypes *************************************************
    String.prototype.width = function (font) {
        var f = font || '12px arial',
            o = $('<div></div>')
                .text(this)
                .css({ 'position': 'absolute', 'float': 'left', 'white-space': 'nowrap', 'visibility': 'hidden', 'font': f })
                .appendTo($('body')),
            w = o.width();

        o.remove();

        return w;
    };
    /**************************************************************/
    // path change with or without refresh of page controller


    // filters *************************************************
    mediaApp.filter('startFrom', function () {
        return function (input, start) {
            start = +start; //parse to int
            return input.slice(start);
        };
    });

    mediaApp.filter('mediaType', function () {
        return function (items, filterByObj) {
            var filtered = [];
            for (var i = 0; i < items.length; i++) {
                if ((filterByObj.id & items[i].Type) == items[i].Type) {
                    filtered.push(items[i]);
                }
            }
            return filtered;
        };
    });

    mediaApp.filter('startsWithLetter', function () {
        return function (items, obj) {
            var filtered = [];
            var reg = new RegExp('^[0-9].*$');
            for (var i = 0; i < items.length; i++) {
                var item = items[i];
                switch (obj.letter) {
                    case '%':
                        filtered.push(item);
                        break;
                    case '#':
                        if (reg.test(item.value)) {
                            filtered.push(item);
                        }
                        break;
                    case 'TOP':
                        if (item.topTen) filtered.push(item);
                        break;
                    default:
                        for (var n = 0; n <= obj.letter.length - 1; n++) {
                            var testLetter = obj.letter.substring(n, n + 1);
                            var letterMatch = testLetter.toUpperCase() === item.value.substring(0, 1).toUpperCase();
                            if (letterMatch) {
                                filtered.push(item);
                            }
                        }
                        break;
                }
            }
            return filtered;
        };
    });

    var configFunction = function ($locationProvider) {
        $locationProvider.hashPrefix('');
        $locationProvider.html5Mode({ enabled: true, requireBase: false, rewriteLinks: false });
    };

    configFunction.$inject = ['$locationProvider'];

    mediaApp.config(configFunction);

    mediaApp.config(function ($provide) {
        $provide.decorator('$http', function $logDecorator($delegate, $q) {
            $delegate.with_abort = function (options) {
                let abort_defer = $q.defer();
                let new_options = angular.copy(options);
                new_options.timeout = abort_defer.promise;
                let do_throw_error = false;

                let http_promise = $delegate(new_options).then(
                    function (response) { return response; },
                    function (error) {
                        if (do_throw_error) return $q.reject(error);
                        return $q(function () { return null; }); // prevent promise chain propagation
                    });

                let real_then = http_promise.then;
                let then_function = function () {
                    return mod_promise(real_then.apply(this, arguments));
                };

                function mod_promise(promise) {
                    promise.then = then_function;
                    promise.abort = function (do_throw_error_param) {
                        do_throw_error = do_throw_error_param;
                        abort_defer.resolve();
                    };
                    return promise;
                }

                return mod_promise(http_promise);
            };

            return $delegate;
        });
    });

}());

;
(function (app) {
    var accountController = function ($scope, $rootScope, dataService, organizationService, cardService, historyService, userService) {
        window.peekAccount = $scope;

        $scope.info = {};
        $scope.error = {};
        $scope.submitted = false;
        $scope.postingForm = false;
        $scope.orgs = {};
        $scope.orgSelected = {};
        $scope.newOrg = {};
        $scope.invite = {};
        $scope.changeEmail = {};
        $scope.changePassword = {};
        $scope.editUser = {};
        $scope.pageData = {};
        $scope.member = {};

        var getAccount = function () {
            toggleBodyCover(true);

            dataService.getSetData("/component/getAccount")
                .then(function (data) {
                    toggleBodyCover();
                    if (data.Error) {
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                    } else {
                        $scope.pageData = data;
                        $scope.pageData.RecurringInvoice = data.Members[0].RecurringInvoice;
                        putOrgsIntoScopeObject(data.Orgs);
                    }
                });
        };

        // ********************************************************************************************************     Add Edit Account

        $scope.displayEditAccountModal = function () {
            hideMessage();
            $scope.pageData.AddEditMode = "Edit";
            $scope.newOrg = {
                address: {}
            };


            $scope.newOrg.name = $scope.pageData.Account.Name;
            $scope.newOrg.address.phone = $scope.pageData.Account.PhysicalAddress.Phone;
            $scope.newOrg.address.street1 = $scope.pageData.Account.PhysicalAddress.Street1;
            $scope.newOrg.address.street2 = $scope.pageData.Account.PhysicalAddress.Street2;
            $scope.newOrg.address.country = $scope.pageData.Account.PhysicalAddress.Country;
            $scope.newOrg.address.city = $scope.pageData.Account.PhysicalAddress.City;
            $scope.newOrg.address.state = $scope.pageData.Account.PhysicalAddress.State;
            $scope.newOrg.address.zip = $scope.pageData.Account.PhysicalAddress.Zip;

            $("#orgModal").modal();
        };

        $scope.displayAddOrgModal = function () {
            hideMessage();
            $scope.pageData.AddEditMode = "Add";
            $scope.newOrg = {};
            $scope.orgForm.$setUntouched();
            $scope.orgForm.$setPristine();
            $scope.submitted = false;
            $("#orgModal").modal();
        };

        // registration page add/edit org modal save
        $scope.createOrganization = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.orgForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Saving Organization"];
            showModalInfoMessage();

            organizationService.newOrganization = $scope.newOrg;

            if ($scope.pageData.AddEditMode == "Edit") {
                organizationService.updateOrg().then(function (data) { processAddEditOrgResult(data); });
            }
            else {
                organizationService.addOrg().then(function (data) { processAddEditOrgResult(data); });
            }
        };

        var processAddEditOrgResult = function (data) {
            $scope.postingForm = false;
            $scope.submitted = false;

            if (data.Error) {
                $scope.error.messages = data.ErrorMessages;
                showModalErrorMessage();
            } else {
                $scope.newOrg = {};
                $scope.newOrg.address = {};
                $scope.orgForm.$setUntouched();
                $("#orgModal").modal('hide');
            }
        };

        // ********************************************************************************************************     Cards
        $scope.removeCard = function (item) {
            if (!item) {
                return;
            }

            var description = "";
            if (item.SaveCardAs != "")
                description = item.SaveCardAs;
            else
                description = item.NameOnCard;

            var deleteConfirmed = window.confirm("Are you sure you want to delete this credit card? \n" + description);

            if (!deleteConfirmed) {
                return;
            }

            $scope.info.messages = ["Deleting Card"];
            showInfoMessage();

            cardService.remove(item).then(function () {
                hideMessage();
                $scope.pageData.Cards = cardService.cardData;
            });
        };

        $scope.changeSubscriptionPayment = function (item) {
            $scope.info.messages = ["Updating subscription payment method"];
            showInfoMessage();

            var data = {};
            data.selectedCardId = item.RowId;
            data.subscriptionId = $scope.pageData.Subscription.RowId;

            dataService.getSetData("/component/SetSubscriptionCard", data).then(function (data) {
                toggleBodyCover();

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    hideMessage();
                    $scope.pageData.Subscription.CardId = item.RowId;
                    $scope.pageData.Cards.forEach(function (card) { card.Error = ""; });
                }
            });
        };

        $scope.displayNewCardModal = function () {
            // Required for a single common add card form across checkout and accounts
            $scope.payment = { selectedCard: 0, paymentMethod: "card", useExistingCard: false, applyStoreCredit: false, adjustedTotal: 1 };

            hideMessage();
            $scope.submitted = false;
            $scope.card = { cardNumber: "" };
            $scope.address = { country: "USA" };
            $scope.paymentForm.$setUntouched();
            $("#cardModal").modal();
        };

        $scope.saveCard = function () {
            $scope.submitted = true;

            if (!$scope.paymentForm.$valid)
                return;

            $scope.info.messages = ["Adding card."];
            showModalInfoMessage();

            var postData = {};
            $scope.card.NewBillingAddress = $scope.address;

            postData = $scope.card;

            cardService.addNewCard(postData).then(function (data) {
                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.submitted = false;
                    $scope.card = {};
                    $scope.address = { country: "USA" };
                    $scope.paymentForm.$setUntouched();
                    getAccount();
                    $("#cardModal").modal('hide');
                }
            }, function (data) {
                $scope.error.messages = data.ErrorMessages;
                showModalErrorMessage();
            });
        };

        $scope.setQuickBuyCard = function () {
            var data = {};
            data.cardId = $scope.quickBuy.selectedCard.RowId;

            dataService.getSetData("/component/setQuickBuyCard", data)
                .then(function (data) {//success
                    if (data.Error) {
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                    }
                    else {
                        $scope.info.messages = ["QuickBuy Card Set"];
                        showInfoMessage();
                    }
                },
                    function (data) {//communication error
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                    });
        };

        // ********************************************************************************************************     Print Invoice

        $scope.viewInvoice = function (id) {
            $scope.info.messages = ["Retrieving Invoice."];
            showInfoMessage();

            historyService.viewInvoice(id, null).then(function (data) {
                hideMessage();
                $("#invoiceHere").html(data);
                $("#viewInvoiceModal").modal();
            });
        };

        $scope.printInvoice = function () {
            window.print();
        };

        // ********************************************************************************************************     Invite

        $scope.displayInviteModal = function () {
            hideMessage();
            $scope.inviteForm.$setUntouched();
            $scope.submitted = false;
            $scope.invite.email = "";
            $("#inviteModal").modal();
        };

        $scope.sendInvite = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.inviteForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Sending Account Invitation."];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.submitted = false;
                    $scope.invite = {};
                    $scope.inviteForm.$setUntouched();
                    $("#inviteModal").modal('hide');
                    getAccount();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            var data = {};
            data.email = $scope.invite.email;

            dataService.getSetData("/component/inviteUser", data)
                .then(onSuccess, onError);
        };

        $scope.deleteInvite = function (invite) {

            var deleteConfirmed = window.confirm("Are you sure you want to delete this invite? \n" + invite.Email);

            if (!deleteConfirmed) {
                return;
            }

            var data = {};
            data.id = invite.RowId;

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showErrorMessage();
            };

            dataService.getSetData("/component/deleteInvite", data)
                .then(getAccount(), onError);
        };

        $scope.resendInvite = function (invite) {

            var data = {};
            data.email = invite.Email;

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showErrorMessage();
            };

            var onSuccess = function () {
                $scope.info.messages = ["Invitation was sent."];
                showInfoMessage();
            };

            dataService.getSetData("/component/resendInvite", data)
                .then(onSuccess, onError);
        };

        // ********************************************************************************************************     Edit / Delete Member

        $scope.displayEditMemberModal = function (member) {
            hideMessage();
            $scope.submitted = false;
            $scope.member.rowId = member.Contact.RowId;
            $scope.member.email = member.Contact.Email;
            $scope.member.first = member.Contact.First;
            $scope.member.last = member.Contact.Last;
            $scope.member.phone = member.Contact.Phone;
            $scope.member.isPrimary = member.IsPrimaryContact;

            if (member.IsAnAccountAdmin)
                $scope.member.accessLevel = "admin";
            else
                $scope.member.accessLevel = "user";

            $("#editMemberModal").modal();
        };

        $scope.saveMember = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.memberForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Saving Member Permissions."];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.submitted = false;
                    $("#editMemberModal").modal('hide');
                    $scope.member = {};
                    $scope.memberForm.$setUntouched();
                    getAccount();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            dataService.getSetData("/component/UpdateMemberAccess", $scope.member)
                .then(onSuccess, onError);
        };

        $scope.deleteMember = function (member) {

            var deleteConfirmed = window.confirm("Are you sure you want to delete this account member? \n" + member.Contact.FullName);

            if (!deleteConfirmed) {
                return;
            }

            var data = {};
            data.memberId = member.AccountMemberId;
            data.memberAccountId = member.AccountId;

            var onError = function (reason) {
                $scope.error.messages = reason;
                showErrorMessage();
            };

            dataService.getSetData("/component/deleteMember", data)
                .then(function (data) {
                    if (data.Error) {
                        onError(data.ErrorMessages);
                    }
                    else {
                        organizationService.getOrgs();
                    }

                }, onError);
        };

        // ********************************************************************************************************     Edit User

        $scope.displayEditUserModal = function () {
            hideMessage();
            $scope.editUser = angular.copy($scope.pageData.User.Contact);
            $scope.submitted = false;
            $scope.userForm.$setUntouched();
            $("#editUserModal").modal();
        };

        $scope.saveUser = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.userForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Saving User Information."];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    userService.getLoginData();
                    $scope.submitted = false;
                    $("#editUserModal").modal('hide');
                    $scope.userForm.$setUntouched();
                    getAccount();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            dataService.getSetData("/component/updateUser", $scope.editUser)
                .then(onSuccess, onError);
        };

        // ********************************************************************************************************     Change Password

        $scope.displayChangePasswordModal = function () {
            hideMessage();
            $scope.submitted = false;
            $scope.changePassword = {};
            $scope.passwordForm.$setUntouched();
            $scope.passwordForm.$setPristine();
            $("#changePasswordModal").modal();
        };

        $scope.savePassword = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.passwordForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Saving Password."];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.submitted = false;
                    $("#changePasswordModal").modal('hide');
                    $scope.passwordForm.$setUntouched();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            var data = { currentPassword: $scope.changePassword.password, newPassword: $scope.changePassword.newPassword, confirmPassword: $scope.changePassword.confirmPassword };

            dataService.getSetData("/component/updatePassword", data)
                .then(onSuccess, onError);
        };

        // ********************************************************************************************************     Change login email

        $scope.displayChangeEmailModal = function (member) {
            hideMessage();
            $scope.submitted = false;
            $scope.changeEmail = { newEmail: "", confirmEmail: "" };
            $scope.emailForm.$setUntouched();
            $scope.emailForm.$setPristine();
            $("#changeEmailModal").modal();
        };

        $scope.saveEmail = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.emailForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Changing Login Email."];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.submitted = false;
                    $("#changeEmailModal").modal('hide');
                    $scope.emailForm.$setUntouched();
                    getAccount();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            var data = { password: $scope.changeEmail.password, newEmail: $scope.changeEmail.newEmail, confirmEmail: $scope.changeEmail.confirmEmail };

            dataService.getSetData("/component/changeUsername", data)
                .then(onSuccess, onError);
        };

        // ********************************************************************************************************     resendActivationEmail

        $scope.resendActivationEmail = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.info.messages = ["Sending activation email."];
            showInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    $scope.info.messages = ["Activation email has been sent."];
                    showInfoMessage();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showErrorMessage();
            };

            dataService.getSetData("/component/SendActivationRequest")
                .then(onSuccess, onError);
        };

        // ******************************************************************************************************** Email Preferences
        $scope.updateInvoiceRecurring = function () {

            $scope.pageData.RecurringInvoice = !$scope.pageData.RecurringInvoice;

            var onSuccess = function (data) {
                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    $scope.info.messages = ["Email preference has been set"];
                    showInfoMessage();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showErrorMessage();
            };
            
            var postData = { recurringInvoice: $scope.pageData.RecurringInvoice };
            dataService.getSetData("/component/UpdateInvoiceRecurring", postData)
                .then(onSuccess, onError);
        };

        putOrgsIntoScopeObject = function (data) {
            var tmpList = [];
            $.each(data, function (index, value) {
                var tmpName = value.AccountName;
                var tmpId = value.AccountId;
                var tmpValue = value.AccountId;
                var org = value;
                value.IsDefaultAccount
                    ? $scope.orgSelected = { name: tmpName, id: tmpId, value: tmpValue, org: org }
                    : null;
                tmpList.push({ name: tmpName, id: tmpId, value: tmpValue, org: org });
            });
            $scope.orgs = tmpList;
        }

        // ******************************************************************************************************** events handlers
        $scope.triggerClick = function (id, evt) {
            $scope.cancel(evt);
            $('#' + id).trigger('click');
        };
        $scope.cancel = function (event) {
            event.cancelBubble = true;
            event.preventDefault();
            event.stopImmediatePropagation();
        };

        // ********************************************************************************************************     Listeners
        $rootScope.$on('itemSelected', function (evt, data) {
            organizationService.selectedOrganization = data.item.org;
            organizationService.changeOrg();
        });

        $rootScope.$on('orgListReady', function (evt, data) {
            putOrgsIntoScopeObject(data.orgList);
        });

        $rootScope.$on('updatedOrg', function (evt, data) {
            var org = {};
            org.name = data.selectedOrganization.AccountName;
            org.id = data.selectedOrganization.AccountId;
            org.value = data.selectedOrganization.AccountId;
            org.org = data.selectedOrganization;
            $scope.orgSelected = org;
            getAccount();
        });

        angular.element(document).ready(function () {
            getAccount();
        });
    };

    app.controller('accountController', ['$scope', '$rootScope', 'dataService', 'organizationService', 'cardService', 'historyService', 'userService', accountController]);
}(angular.module("softouch")));;
(function (app) {
    var activationController = function ($scope, $rootScope, organizationService, activationService) {
        window.peekActivation = $scope;
        $scope.submitted = false;
        $scope.submittingForm = false;
        $scope.error = {};
        $scope.info = {};
        $scope.newOrg = {};
        $scope.key = {};
        $scope.formData = {};

        $scope.pageData = {};
        $scope.pageData.activationComplete = false;


        //$scope.key.key1 = "";
        //$scope.key.key2 = "";
        //$scope.key.key3 = "";
        //$scope.key.key4 = "";
        //$scope.key.key5 = "";

        var onValidateSuccess = function (data) {
            $scope.submittingForm = false;
            $scope.submitted = false;

            if (data.Error) {
                $scope.error.messages = data.ErrorMessages;
                showErrorMessage();
            }
            else {
                hideMessage();
                $scope.pageData.activationProducts = data;
                $("#activationForm input").attr("disabled", "disabled");
                $("#btn-validate").addClass("disabled");
                $scope.pageData.readyToActivate = true;
            }
        };

        var onValidateFail = function (data) {
            $scope.submittingForm = false;
            $scope.error.messages = data.ErrorMessages;
            showErrorMessage();
        };

        var onActivateSuccess = function (data) {
            $scope.submittingForm = false;

            if (data.Error) {
                $scope.error.messages = data.ErrorMessages;
                showErrorMessage();
            }
            else {
                hideMessage();
                $scope.pageData.readyToActivate = false;
                $("#productKeySegments").hide();
                $scope.pageData.activationComplete = true;
            }
        };

        var onActivateFail = function (data) {
            $scope.submittingForm = false;
            $scope.error.messages = data.ErrorMessages;
            showErrorMessage();
        };

        var onOrgSave = function (data) {
            $scope.submittingForm = false;

            if (data.Error) {
                $scope.error.messages = data.ErrorMessages;
                showModalErrorMessage();
            }
            else {
                hideMessage();
                $scope.newOrg = {};
                $scope.orgForm.$setUntouched();
                $scope.submitted = false;
                $("#orgModal").modal('hide');
            }
        };

        var onOrgSaveError = function (data) {
            $scope.submittingForm = false;
            $scope.errorMessages = data.ErrorMessages;
            showErrorMessage();
        };

        var setOrgs = function (data) {
            $scope.pageData.orgs = data.orgList;

            $scope.pageData.selectedOrg = data.orgList.filter(function (itm, idx) {
                return itm.IsDefaultAccount;
            })[0];
        };

        var isDirectionalKey = function (code) {
            var validKey = false;

            // Allow for left and right arrow
            if (code === 37 || code === 39)
                validKey = true;

            // Allow backspace and delete
            if (code === 8 || code === 46)
                validKey = true;

            // Allow tab
            if (code === 9)
                validKey = true;

            return validKey;
        };

        $scope.autoadvance = function (event) {
            if (!isDirectionalKey(event.which)) {
                var currentInput = $("#" + event.currentTarget.id);

                if (currentInput.val().length == currentInput.attr("data-advanceon")) {
                    $("#" + currentInput.attr("data-advanceto")).focus();
                }
            }
        };

        $scope.validateKey = function () {
            if ($scope.submittingForm)
                return;

            $scope.submittingForm = true;
            $scope.submitted = true;

            if (!$scope.activationForm.$valid) {
                $scope.submittingForm = false;
                return;
            }

            var parm = {
                Key1: $scope.key.key1,
                Key2: $scope.key.key2,
                Key3: $scope.key.key3,
                Key4: $scope.key.key4,
                Key5: $scope.key.key5
            };

            activationService.validate(parm).then(function (data) { onValidateSuccess(data); }, function (data) { onValidateFail(data); });
        };

        $scope.activate = function () {
            if ($scope.submittingForm)
                return;

            $scope.submittingForm = true;
            $scope.submitted = true;

            if (!$scope.activationForm.$valid) {
                $scope.submittingForm = false;
                return;
            }

            var parm = {
                Key1: $scope.key.key1,
                Key2: $scope.key.key2,
                Key3: $scope.key.key3,
                Key4: $scope.key.key4,
                Key5: $scope.key.key5,
                RegisterToAccountId: $scope.pageData.selectedOrg.AccountId
            };

            $scope.info.messages = ["Activating software."];
            showInfoMessage();

            activationService.activate(parm).then(function (data) { onActivateSuccess(data); }, function (data) { onActivateFail(data); });
            //onActivateSuccess({Error: false});
        };

        $scope.displayAddOrgModal = function () {
            $("#orgModal").modal();
        };

        $scope.createOrganization = function () {
            if ($scope.submittingForm)
                return;

            $scope.submittingForm = true;
            $scope.submitted = true;

            if (!$scope.orgForm.$valid) {
                $scope.submittingForm = false;
                return;
            }

            $scope.info.messages = ["Creating New Org."];
            showModalInfoMessage();

            organizationService.newOrganization = $scope.newOrg;
            organizationService.addOrg().then(function (data) { onOrgSave(data); }, function (response) { onOrgSaveError(response); });
        };


        var orgReadyListener = $rootScope.$on('orgListReady', function (evt, data) {
            setOrgs(data);
        });
        $scope.$on('$destroy', orgReadyListener);

        angular.element(document)
            .ready(function () {
                if ($("body").hasClass("integratedStore")) {
                    organizationService.getOrgs();
                }
            });
    };
    app.controller('activationController', ['$scope', '$rootScope', 'organizationService', 'activationService', activationController]);
}(angular.module("softouch")));;
(function (app) {
    var addCardController = function ($scope, dataService) {
        window.peekAddCard = $scope;

        $scope.pageData = {};
        $scope.info = {};
        $scope.error = {};
        $scope.submitted = false;
        $scope.cardAdded = false;
        $scope.card = { cardNumber: "" };
        $scope.address = { country: "USA" };

        $scope.payment = { selectedCard: 0, paymentMethod: "card", useExistingCard: false, applyStoreCredit: false, adjustedTotal: 1 };

        $scope.saveCard = function () {
            $scope.submitted = true;

            if (!$scope.paymentForm.$valid)
                return;

            $scope.info.messages = ["Adding card."];
            showInfoMessage();

            var postData = {};
            $scope.card.NewBillingAddress = $scope.address;
            $scope.card.AccountGuid = $scope.pageData.hash;
            postData = $scope.card;

            dataService.getSetData("/component/AddDealerCard", postData)
                .then(function (data) {
                    if (data.Error) {
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                    } else {
                        $scope.cardAdded = true;
                    }
                });
        };

    };

    app.controller('addCardController', ['$scope', 'dataService', addCardController]);
}(angular.module("softouch")));;
(function (app) {
    var addonsController = function ($rootScope, $scope, dataService, constants, cartService, bibleService) {
        window.peekAddOns = $scope;
        $scope.data = {
            loadingData: [],
            producerPacks: [],
            legacyBibles: []
        };
        $scope.currentBibles = [];
        $scope.searchField = "";
        $scope.checkout = constants[0].Urls.checkoutSummary;


        var onErr = function () {
            console.log('err');
            $scope.data.legacyBibles = [];
            $scope.currentBibles = [];
            $scope.error = "unable to retreive bibles";
        };

        var setBibles = function (data) {
            $scope.data.legacyBibles = data.filter(function (itm, idx) { return itm.BibleAttributes.LegacySupported; });
            $scope.currentBibles = data.filter(function (itm, idx) { return itm.BibleAttributes.V6Supported; });
        };

        var getData = function () {

            //producerpack************
            dataService.getSetData("/component/GetProducerPacks").then(function (data) {
                if (data.Error) {
                    console.log(data)
                }
                else {
                    $scope.data.producerPacks = data
                }
            });
        }

        $scope.isHidden = function (itm) {
            if (itm.Type == 16 && $scope.hideFreeBibles) {
                return false;
            }
            return true;
        }

        //$scope.loaded = function (test) {
        //    if ($scope.bibleSwiper != undefined) {
        //        $scope.bibleSwiper.update();
        //    }
        //}

        $scope.clearSearch = function () {
            $scope.searchField = "";
        }

        $scope.addProduct = function (itm) {
            if (itm.ProductId !== null && itm.CheckoutPrice != 0) {
                cartService.cartIt(itm, !itm.IsInCart)
/*                if (!itm.IsInCart) {
                    itm.IsInCart = true;
                }
                else {
                    itm.IsInCart = false;
                }*/
            }
        }

        //Listener ****************
        var cartListener = $rootScope.$on('cartListReady', function (event, data) {
            var bibles = $scope.currentBibles;
            $scope.cart = data.cartList
            for (var i = 0; i < bibles.length; i++) {
                if ($scope.cart.length > 0) {
                    for (var j = 0; j < $scope.cart.length; j++) {
                        if (bibles[i].ProductId == $scope.cart[j].ProductId) {
                            bibles[i].IsInCart = true;
                            break
                        }
                        else {
                            bibles[i].IsInCart = false;
                        }
                    }
                }
                else {
                    bibles[i].IsInCart = false;
                }
            }
            $scope.total = total();

            /*$scope.data.currentBibles.forEach(function (bible) {
                data.cartList.forEach(function (cartItem) {
                    if (cartItem.ProductId == bible.ProductId) {
                        bible.IsInCart = true;
                        console.log("if true", cartItem.ProductId, bible.ProductId, bible.IsInCart)
                        break
                    }
                    else {
                        bible.IsInCart = false;
                        console.log("else", cartItem.ProductId, bible.ProductId, bible.IsInCart)
                    }
                })
            });*/
        });

        $scope.$on('$destroy', cartListener);

        function total() {
            var tmpVal = 0;
            $.each($scope.cart, function (key, value) {
                $.each(value, function (subKey, subValue) {
                    if (subKey == 'CheckoutPrice') { tmpVal += subValue; }
                });
            });
            return tmpVal;
        }

        angular.element(document).ready(function () {
            $scope.bibleSwiper = new Swiper('#bibleSwiper', {
                allowTouchMove: false,
                spaceBetween: 20,
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        alloSlideNext: false,
                        enabled: false,
                        slidesPerView: 1,
                        slidesPerGroup: 1,
                        slidesPerColumn: 4,
                        spaceBetween: 0,
                    },
                    // when window width is >= 576px
                    576: {
                        enabled: true,
                        slidesPerView: 2,
                        slidesPerGroup: 2,
                        slidesPerColumn: 2,
                        spaceBetween: 0,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        slidesPerGroup: 3,
                        slidesPerColumn: 2,
                        spaceBetween: 0,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 3,
                        slidesPerGroup: 3,
                        slidesPerColumn: 2,
                        spaceBetween: 0,
                    }
                }
            });
            bibleService.getBibles().then(setBibles, onErr);
            getData();

            window.onresize = $scope.changeSwiperPagingHeight;
        });
    }
    app.controller('addonsController', ['$rootScope','$scope', 'dataService', 'constants', 'cartService', 'bibleService', addonsController]);
}(angular.module("softouch")));;
(function (app) {
    var androidBetaController = function ($scope, dataService) {
        $scope.error = {};
        $scope.download = {};

        $scope.submit = function () {
            hideMessage();

            if ($scope.download.email === undefined) {
                $scope.error.messages = ["email is required."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    hideMessage();

                    $('#fields').slideUp(250);
                    $('#download').slideDown(250);
                }
            };

            var onError = function (response) {
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            var postUrl = "/component/androidbeta/";
            var postData = { email: $scope.download.email };

            dataService
                .getSetData(postUrl, postData)
                .then(onSuccess, onError);
        };
    };

    app.controller('androidBetaController', ['$scope', 'dataService', androidBetaController]);

}(angular.module("softouch")));;
(function (app) {
    var bannerController = function ($scope, clientService) {
        window.peekBanner = $scope;

        var tabPrefix = "banner-";
        $scope.activeTab = 1;
        $scope.maxTabs = $(tabPrefix).length;

        $scope.browserType = clientService.getBrowserType();

        $scope.select_group = function (tabNumber, elm) {
            // clear circles then select the active one
            $(elm).parent().children().removeClass("sel");
            $(elm).addClass("sel");

            // Hide the active panel and show the selected
            $("[target]").hide().removeClass('sel');
            $("[target='" + tabPrefix + tabNumber + "']").addClass('sel').fadeIn("slow", "swing");

            $scope.activeTab = parseFloat(tabNumber);
        };

        $scope.select_next = function () {
            if ($scope.activeTab + 1 > $scope.maxTabs) {
                $scope.activeTab = 1;
            } else {
                $scope.activeTab += 1;
            }

            $("[target]").hide().removeClass('sel');
            $("[target='" + tabPrefix + $scope.activeTab + "']").addClass('sel').fadeIn("slow", "swing");
        };

        $scope.select_previous = function () {
            if ($scope.activeTab - 1 < 1) {
                $scope.activeTab = $scope.maxTabs;
            } else {
                $scope.activeTab -= 1;
            }

            $("[target]").hide().removeClass('sel');
            $("[target='" + tabPrefix + $scope.activeTab + "']").addClass('sel').fadeIn("slow", "swing");
        };
    };

    app.controller('bannerController', ['$scope', 'clientService', bannerController]);
}(angular.module("softouch")));;
(function (app) {
    var bibleController = function ($rootScope, $scope, bibleService, cartService, userService) {
        $scope.currentBibles = [];
        $scope.searchField = "";
        $scope.orderField = "";
        $scope.prefix = "";
        $scope.currentBible = "";
        window.peekBibles = $scope; 



        $scope.isHidden = function (itm) {
            if (itm.Type == 16 && $scope.hideFreeBibles) {
                return false;
            }
            return true;
        }

        $scope.collapse = function (device, index) {
            let id = device == 'mobile' ? '1' : '2';
            let collapser = document.getElementById("collapser" + id + index);

            if (collapser.classList.contains('icon-im-arrow-up')) {
                collapser.classList.remove('icon-im-arrow-up');
                collapser.classList.add('icon-im-arrow-down');
            }
            else {
                collapser.classList.remove('icon-im-arrow-down');
                collapser.classList.add('icon-im-arrow-up');
            }

        }

        $scope.updateBible = function (bible) {
            if (userService.userData.loggedIn) {
                $scope.currentBible = bible;
            } else {
                window.location = '/account/login';
            }
        }

        window.onload = function () {
            $scope.$apply(function () {
                $scope.userData = userService.userData;
            })
        }


        if ($("body").hasClass("integratedStore")) {
            $scope.prefix = "Buy Now ";
        }

        var onErr = function () {
            $scope.currentBibles = [];
            $scope.error = "unable to retreive bibles";
        };

        var setBibles = function (data) {
            $scope.currentBibles = data.filter(function (itm, idx) { return itm.BibleAttributes.V6Supported; });

            $.each($scope.currentBibles, function (key, bible) {
                    bible.priceText = $scope.prefix + "$" + bible.MaxPrice;
            });
        };

        $scope.clearSearch = function () {
            $scope.searchField = "";
        }

        $scope.cartBible = function (event, itm) {

            if ($("body").hasClass("integratedStore")) {
                window.location.href = "/gui?action=quickbuy&detailId=" + itm.CartDetailId;
                return;
            }

            if (itm.IsInCart) {
                window.location = "/checkout";
            }
            else {
                var item = {};
                item.CartDetailId = itm.CartDetailId;

                cartService.cartIt(item, true);

                itm.IsInCart = true;
            }
        };

        $scope.downloadUrl = function (item) {
            var format = item.FileTypes !== undefined ? item.FileTypes[0] : "";

            return "/component/downloadBible?version=2&detailId=" + item.CartDetailId + "&format=" + format;
        }

        $rootScope.$on('cartRemove', function (evt, data) {
            $.each($scope.currentBibles, function (key, bible) {
                if (data.item.CartDetailId === bible.CartDetailId) {
                    bible.IsInCart = false;
                }
            });
        });

        bibleService.getBibles().then(setBibles, onErr);
    };

    app.controller('bibleController', ['$rootScope', '$scope', 'bibleService', 'cartService', 'userService', bibleController]);

}(angular.module("softouch")));;
(function (app) {
    var bodyController = function ($rootScope, $scope, userService) {

        $scope.broadcastClick = function (evt) {
            $rootScope.$broadcast('bodyClick', $(evt));
        };

        angular.element(document).ready(function () {
            userService.getLoginData();
        });

    }
    app.controller('bodyController', ['$rootScope', '$scope', 'userService', bodyController]);
}(angular.module("softouch")));
;
(function (app) {
    var cancelController = function ($scope, dataService) {
        $scope.info = {};
        $scope.error = {};

        $scope.cancelSubscription = function () {

            $scope.info.messages = ["Canceling subscription..."];
            showInfoMessage();

            var data = {};
            data.CancelId = $scope.canceledItem.id;
            data.CancelText = $scope.cancelText;

            if (data.CancelId == 1) {
                $scope.error.messages = ['please select a reason'];
                showErrorMessage();
                return false;
            }
            dataService.getSetData("/component/cancelsubscription", data).then(function (data) {
                toggleBodyCover();

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    $('.cancellationForm').removeClass('on');
                    $('.ThankYouConfirmation').removeClass('off');
                    $scope.info.messages = null;
                    $scope.error.messages = null;
                    hideMessage();
                }
            });
        };

        angular.element(document).ready(function () {
        });
    };

    app.controller('cancelController', ['$scope', 'dataService', cancelController]);
}(angular.module("softouch")));;
(function (app) {
    var ccliAuthController = function ($scope, constants, ewMessagingService) {
        window.peekCcliAuth = $scope;
        $scope.pageData = {};

        $scope.authenticate = function () {
            window.location = $scope.pageData.host + "/ccli/login";
        }

        angular.element(document).ready(function () {
            if ($scope.pageData.host === "https://www.easyworship.com")
                $scope.pageData.host = "https://is3.easyworship.com";

            if ($scope.pageData.error != undefined && $scope.pageData.error != "") {
                // What do we do here????
            }
            else {
                var expires = new Date(new Date().getTime() + ($scope.pageData.ccliResponse.expires_in * 1000)).getTime();

                ewMessagingService.updateCcliTokens($scope.pageData.ccliResponse.access_token,
                    $scope.pageData.ccliResponse.refresh_token,
                    expires
                );

                var url = $scope.pageData.host + "/ccli?accessToken=" + constants[0].SoftwareVariables.ccliAccess
                    + "&refreshToken=" + constants[0].SoftwareVariables.ccliRefresh
                    + "&expires=" + constants[0].SoftwareVariables.ccliExpires
                    + "&search=" + constants[0].SoftwareVariables.search
                    + "&autoReportPrompted=" + constants[0].SoftwareVariables.ccliAutoReportPrompted
                    + "&autoReport=" + constants[0].SoftwareVariables.ccliAutoReport;

                ewMessagingService.navigate(url, true);
            }
        });
    };

    app.controller('ccliAuthController', ['$scope', 'constants', 'ewMessagingService', ccliAuthController]);
}(angular.module("softouch")));;
(function (app) {
    var ccliController = function ($scope, $http, $q, constants, ewMessagingService) {
        window.peekCcli = $scope;
        var apiBaseUrl = "https://api.ccli.com/ss/v2";
        var needsAuthenticationUrl = "/ccli/needsauthentication";
        $scope.pageData = {};
        $scope.pageData.append = false;
        $scope.pageData.resultsRecords = [];
        $scope.pageData.currentPage = 1;
        $scope.pageData.pageSize = 50;
        $scope.pageData.totalItems;
        $scope.pageData.pullingData = true;

        var processResponse = function (response) {
            $scope.pageData.pullingData = false;

            var searchResults = response.data.data.results; 

            // trending/top100 does not return pagination data
            if (response.data.pagination !== undefined) {
                $scope.pageData.currentPage = response.data.pagination.pageNumber;
                $scope.pageData.totalItems = response.data.pagination.totalItems
            }
            else {
                $scope.pageData.currentPage = 1;
                $scope.pageData.totalItems = searchResults.length;
            }

            // If no results, hide preview pane and stop execution
            if ($scope.pageData.totalItems < 1) {
                cleanupWhenNoResults();

                return;
            }

            $scope.stringifyAuthors(searchResults);

            $scope.pageData.resultsRecords = $scope.pageData.append
                ? $scope.pageData.resultsRecords.concat(searchResults)
                : searchResults;

            // Select first record if not appending to an existing search
            if (!$scope.pageData.append) {
                $scope.showPreview($scope.pageData.resultsRecords[0]);
            }
        };

        var processResponseError = function (response, callback) {
            $scope.pageData.pullingData = false;

            // 401 unauthorized, 403 invalid license
            if (response.status != undefined) {
                if (response.status == 401) {
                    refreshToken(callback);
                }
                else {
                    window.location = "/ccli/InvalidLicense?status=" + response.status;
                }
            }
        };

        var processLyricsResponse = function (response, action) {
            $scope.pageData.lyricsResponse = response;
            console.log($scope.pageData.lyricsResponse);
            ewMessagingService.ccliLyrics(response.data.data, action);
        };

        $scope.getLyrics = function (id, action) {

            if (id == undefined || id == "")
                id = $scope.pageData.selectedRecord.songNumber;

            // Store the action for a callback if call fails
            if (action === undefined)
                action = $scope.getLyricsAction;
            else
                $scope.getLyricsAction = action;

            var url = apiBaseUrl + "/songs/" + id + "/lyrics";

            $http({
                method: "get",
                headers: {
                    "Authorization": "Bearer " + $scope.pageData.accessToken,
                    "Ocp-Apim-Subscription-Key": $scope.pageData.subKey
                },
                url: url
            })
                .then(function (response) {
                    processLyricsResponse(response, action);
                })
                .catch(function (response) {
                    processResponseError(response, $scope.getLyrics)
                });
        };

        var refreshToken = function (callback) {
            // Don't try to refresh when there isn't a token to refresh
            checkIfPageNeedsAuthentication();

            // If for some reason the refresh token is not assigned they will need to login again
            if ($scope.pageData.refreshToken == undefined || $scope.pageData.refreshToken == "") {
                window.location = needsAuthenticationUrl;
            }

            $http({
                method: "post",
                url: $scope.pageData.host + "/ccli/refreshtoken?refreshToken=" + $scope.pageData.refreshToken
            })
                .then(function (response) {
                    processRefreshResponse(response, callback);
                })
                .catch(function () {
                    ewMessagingService.navigate($scope.pageData.host + needsAuthenticationUrl);
                });
        }

        var processRefreshResponse = function (response, callback) {
            // update the local tokens
            $scope.pageData.accessToken = response.data.access_token;
            $scope.pageData.refreshToken = response.data.refresh_token;
            $scope.pageData.expires = new Date(new Date().getTime() + (response.data.expires_in * 1000)).getTime();

            // send software new tokens
            ewMessagingService.updateCcliTokens($scope.pageData.accessToken, $scope.pageData.refreshToken, $scope.pageData.expires);

            callback();
        }




        var cleanupWhenNoResults = function () {
            $scope.pageData.currentPage = 0;
            $scope.pageData.totalItems = 0;
            $scope.pageData.resultsRecords = [];
            
            $("#previewSidebar").hide();
            $("#previewLyrics").html("");

            ewMessagingService.recordChanged("", 0, 0, "", { title: "", authors: "" });
        }

        $scope.searchSong = function (title) {
            console.log("received a search request - " + title);

            $scope.pageData.append = false;

            if (title == null || title == "") {
                $scope.getDefault();
                $scope.pageData.searchTerm = ""
            }
            else {
                $scope.pageData.searchTerm = title;
                $scope.search();
            }

            var path = $scope.pageData.host + "/ccli?accessToken=" + $scope.pageData.accessToken + "&refreshToken=" + $scope.pageData.refreshToken + "&search=" + $scope.pageData.searchTerm;
            state = {
                ccliSongsResultsWidth: $scope.pageData.ccliSongsResultsWidth,
                ccliSongsPreviewWidth:  $scope.pageData.ccliSongsPreviewWidth
            }
            history.pushState(state, path, path);
        }

        $scope.search = function () {
            if ($scope.pageData.expires <= new Date().getTime()) {
                refreshToken($scope.search);
                return;
            }

            $scope.pageData.pullingData = true;

            if ($scope.pageData.currentPage == 0)
                $scope.pageData.currentPage = 1;

            var queryString = "?filter[search]=" + encodeURIComponent($scope.pageData.searchTerm)
                + "&page[number]=" + $scope.pageData.currentPage
                + "&page[size]=" + $scope.pageData.pageSize
                + "&lyricspreview=true";
            
            $http({
                method: "get",
                headers: {
                    "Authorization": "Bearer " + $scope.pageData.accessToken,
                    "Ocp-Apim-Subscription-Key": $scope.pageData.subKey
                },
                url: apiBaseUrl + "/songs" + queryString
            })
                .then(function (response) { processResponse(response); })
                .catch(function (response) { processResponseError(response, $scope.search); });
        };

        $scope.getDefault = function () {
            if ($scope.pageData.expires <= new Date().getTime()) {
                refreshToken($scope.getDefault);
                return;
            }

            $http({
                method: "get",
                headers: {
                    "Authorization": "Bearer " + $scope.pageData.accessToken,
                    "Ocp-Apim-Subscription-Key": $scope.pageData.subKey
                },
                url: apiBaseUrl + "/get-popular-songs?maxItems=100"
            })
                .then(function (response) {
                    processResponse(response);
                })
                .catch(function (response) {
                    processResponseError(response, $scope.getDefault);
                });
        };

        $scope.getLyricsPreview = function (item) {
            // save the item in the event of a failed request so the callback works.
            if (item === undefined)
                item = $scope.songPreviewItem;
            else
                $scope.songPreviewItem = item;

            if ($scope.pageData.expires <= new Date().getTime()) {
                refreshToken($scope.getLyricsPreview);
                return;
            }

            $scope.pageData.pullingData = true;

            $http({
                method: "get",
                headers: {
                    "Authorization": "Bearer " + $scope.pageData.accessToken,
                    "Ocp-Apim-Subscription-Key": $scope.pageData.subKey
                },
                url: apiBaseUrl + "/songs/" + item.songNumber + "/lyrics-preview"
            })
                .then(function (response) {
                    $scope.pageData.pullingData = false;
                    item.lyricsPreview = response.data.data.lyricsPreview;
                    /*item.lyricsPreview = $scope.parseLyrics(response.data.data.lyricsPreview);*/
                    $scope.showPreview(item);
                })
                .catch(function (response) {
                    processResponseError(response, $scope.getLyricsPreview);
                });
        }

        $scope.getSongDetails = function (item) {
            // save the item in the event of a failed request so the callback works.
            if (item === undefined)
                item = $scope.songDetailItem;
            else
                $scope.songDetailItem = item;

            if ($scope.pageData.expires <= new Date().getTime()) {
                refreshToken($scope.getSongDetails);
                return;
            }

            $scope.pageData.pullingData = true;

            console.log("song details");
            $http({
                method: "get",
                headers: {
                    "Authorization": "Bearer " + $scope.pageData.accessToken,
                    "Ocp-Apim-Subscription-Key": $scope.pageData.subKey
                },
                url: apiBaseUrl + "/songs/" + item.songNumber
            })
                .then(function (response) {
                    $scope.pageData.pullingData = false;
                    item.originalKey = response.data.data.defaultKey;
                    item.copyrights = response.data.data.copyrights;
                    item.themes = response.data.data.themes;
                    item.songSelectLinks = response.data.data.songSelectLinks;
                    console.log(response.data);

                    $scope.updateDetailsCard(item);
                })
                .catch(function (response) {
                    processResponseError(response, $scope.getSongDetails);
                });
        }

        $scope.getChordSheetPdf = function (item) {
            console.log("In the chordsheet function!");
            $scope.pageData.pullingData = true;

            const chordSheetUrl = apiBaseUrl + "/songs/" + item.songNumber + "/get-chord-sheet-pdf";

            request = new XMLHttpRequest();

            request.responseType = "blob";
            request.open("GET", chordSheetUrl, true);
            request.setRequestHeader("Authorization", "Bearer " + $scope.pageData.accessToken);
            request.setRequestHeader("Ocp-Apim-Subscription-Key", $scope.pageData.subKey);
            request.send();

            request.onreadystatechange = function () {
                if (this.readyState == 4 && this.status == 200) {
                    $scope.pageData.pullingData = false;
                    const fileUrl = window.URL.createObjectURL(this.response);

                    const anchor = document.createElement("a");
                    anchor.href = fileUrl;
                    anchor.target = "_blank";
                    anchor.download = item.title.replaceAll(" ", "").substring(0, 20) + "_Chords";

                    document.body.appendChild(anchor);
                    anchor.click();
                    document.body.removeChild(anchor);
                }
            };
        }

        $scope.getNextSet = function () {
            if ($scope.pageData.pullingData) {
                return;
            }

            $scope.pageData.currentPage++;
            $scope.pageData.append = true;
            $scope.search();
        }

        $scope.stringifyAuthors = function (results) {
            console.log('Adding commas between authors...');
            results.forEach(function (result) {
                result.authorsString = result.authors.join(', ');
            })
        }

        $scope.parseLyrics = function (lyrics) {
            console.log("Original Lyrics:");
            console.log(lyrics);

            console.log('Adding line breaks to lyrics...');
            let replacedLyrics = lyrics.replaceAll('\n', '<br />').replaceAll('|', '<br />');

            console.log("Replaced Lyrics:");
            console.log(replacedLyrics);

            return replacedLyrics;
        }

        $scope.showPreview = function (item) {
            // save the item in the event of a failed request so the callback works.
            if (item === undefined)
                item = $scope.songPreviewItem;
            else
                $scope.songPreviewItem = item;

            if (item.lyricsPreview == undefined) {
                $scope.getLyricsPreview(item);
                return;
            }

            // Replace carriage returns and pipes with HTML breaks
            /*item.lyricsPreview = $scope.parseLyrics(item.lyricsPreview);*/

            // Show preview sidebar in case it was previously hidden
            $("#previewSidebar").show();

            // If detailsCard is displayed, hide when switching records
            let detailsCard = document.getElementById("ewiDetailsCard");
            if (detailsCard.classList.contains("show")) {
                $scope.toggleDetailsCard();
            }

            $("#previewLyrics").html(item.lyricsPreview);
            document.getElementById('ewiLyricsCard').classList.add('show');
            /*$("#previewSidebar").css("display", "flex");*/
            $scope.getSongDetails(item);

            var myIdx = $scope.pageData.resultsRecords.findIndex(function (resultItem, idx) {
                return resultItem.id === item.id;
            });
            // 0 based so add 1 to reflect the correct visual record
            myIdx++;

            $scope.pageData.selectedRecord = item;

            ewMessagingService.recordChanged(item.songNumber,
                myIdx,
                $scope.pageData.totalItems,
                constants[0].SoftwareMediaType.song,
                { title: item.title, authors: item.authors }
            );
        }
        
        $scope.updateDetailsCard = function (item) {
            $("#ewiDetailsCard #ccliId").html('<a href="' + item.songSelectLinks.songSelectSong + '" target="_blank">' + item.songNumber + '</a>');
            $("#ewiDetailsCard #ccliTitle").html(item.title);
            $("#ewiDetailsCard #ccliKey").html(item.originalKey.join(', '));
            $("#ewiDetailsCard #ccliCopyright").html(item.copyrights.join('; '));
        }

        $scope.goToNextSong = function goToNextSong() {
            console.log("in next");
            let nextIdx = $scope.pageData.resultsRecords.findIndex(function (resultItem, idx) {
                return resultItem.id === $scope.pageData.selectedRecord.id;
            });
            nextIdx++; // Increment to make it the index for next item

            // If index is greater than or equal to the length of the array
            // then you have reached the end of the results
            if (nextIdx < $scope.pageData.resultsRecords.length) {
                let nextRow = document.querySelector(".jq-highlight-record.active").nextElementSibling;
                $scope.highlightRecord(nextRow);
                let nextItem = $scope.pageData.resultsRecords[nextIdx];
                $scope.showPreview(nextItem);
            }
        }

        $scope.goToPrevSong = function goToPrevSong() {
            let prevIdx = $scope.pageData.resultsRecords.findIndex(function (resultItem, idx) {
                return resultItem.id === $scope.pageData.selectedRecord.id;
            });
            prevIdx--; // Decrement to make it the index for previous item

            // If index is a negative, then there is no match;
            // and if there is no match then we are the top of the results
            //console.log(prevIdx);
            if (prevIdx != -1) {
                let prevRow = document.querySelector(".jq-highlight-record.active").previousElementSibling;
                $scope.highlightRecord(prevRow);
                let prevItem = $scope.pageData.resultsRecords[prevIdx];
                $scope.showPreview(prevItem);
            }
        }

        $scope.pageUp = function pageUp() {
            var numberOfRows = getnumberOfRows();
            var index = $scope.pageData.resultsRecords.findIndex(function (resultItem, idx) {
                return resultItem.id === $scope.pageData.selectedRecord.id;
            });
            if (index == 0)
                return
            index -= numberOfRows;
            if (index >= 0) {
                $scope.showPreview($scope.pageData.resultsRecords[index])
                var loopingItem = document.querySelector('.jq-highlight-record.active');
                for (i = 0; i < numberOfRows; i++) {
                    if (loopingItem != null)
                        loopingItem = loopingItem.previousElementSibling;
                }
                $scope.highlightRecord(loopingItem);
            } else if (index < 0) {
                $scope.showPreview($scope.pageData.resultsRecords[0])
                var Item = document.querySelector('.jq-highlight-record');
                $scope.highlightRecord(Item);
            }
        }

        $scope.pageDown = function pageDown() {
            var numberOfRows = getnumberOfRows();
            var index = $scope.pageData.resultsRecords.findIndex(function (resultItem, idx) {
                return resultItem.id === $scope.pageData.selectedRecord.id;
            });
            if (index === $scope.pageData.resultsRecords.length - 1)
                return
            index += numberOfRows;
            if (index < $scope.pageData.resultsRecords.length - 1) {
                var loopingItem = document.querySelector('.jq-highlight-record.active');
                for (i = 0; i < numberOfRows; i++) {
                    if (loopingItem != null)
                        loopingItem = loopingItem.nextElementSibling;
                }
                $scope.highlightRecord(loopingItem);
                $scope.showPreview($scope.pageData.resultsRecords[index])
            }
            else if (index > $scope.pageData.resultsRecords.length - 1) {
                var loopingItem = document.querySelector('.jq-highlight-record.active');
                var loopNumb = $scope.pageData.resultsRecords.length - (index -= numberOfRows);
                for (i = 1; i < loopNumb; i++) {
                    if (loopingItem.nextElementSibling != null)
                        loopingItem = loopingItem.nextElementSibling;
                }
                $scope.highlightRecord(loopingItem);
                $scope.showPreview($scope.pageData.resultsRecords[$scope.pageData.resultsRecords.length - 1])
            }
        }

        $scope.selectFirstItem = function selectFirstItem() {
            let firstRow = document.querySelector(".jq-highlight-record");
            $scope.highlightRecord(firstRow);
            let firstItem = $scope.pageData.resultsRecords[0];
            $scope.showPreview(firstItem);
        }

        $scope.selectLastItem = function selectLastItem() {
            let allSongElements = document.getElementsByClassName("jq-highlight-record");
            let lastRow = allSongElements[allSongElements.length - 1];
            $scope.highlightRecord(lastRow);
            let lastItem = $scope.pageData.resultsRecords[$scope.pageData.resultsRecords.length - 1];
            $scope.showPreview(lastItem);
        }

        $scope.selectViaKeyboard = function (evt, item) {
            if (evt.key === 'ArrowDown') {
                $scope.goToNextSong();
            } else if (evt.key === 'ArrowUp') {
                $scope.goToPrevSong();
            }
        }

        function getnumberOfRows() {
            var results = document.querySelector('#ccliResults').getBoundingClientRect().height - document.querySelector('.results-heading').getBoundingClientRect().height;
            var row = document.querySelector('.results-cell').getBoundingClientRect().height;
            return Math.floor(results / row);
        }

        window.addEventListener("keydown", function (e) {
            if (["ArrowUp", "ArrowDown", "PageUp", "PageDown", "Home", "End"].indexOf(e.code) > -1) {
                e.preventDefault();
                if (e.code === "ArrowUp") {
                    $scope.goToPrevSong();
                }
                else if (e.code === "ArrowDown") {
                    $scope.goToNextSong();
                }
                else if (e.code === "PageUp") {
                    $scope.pageUp();
                }
                else if (e.code === "PageDown") {
                    $scope.pageDown();
                }
                else if (e.code === "Home") {
                    $scope.selectFirstItem();
                }
                else if (e.code === "End") {
                    $scope.selectLastItem();
                }
            }
        }, false);

        $scope.highlightRecord = function (target) {
            $(".jq-highlight-record").removeClass("active");
            $(target).addClass("active");
            checkandscroll(target);
        }

        function checkandscroll(checkElm) {
            checkElm = checkElm.querySelector('.results-cell')
            var resultsWindow = document.querySelector('#ccliResults');
            var resultsHeight = resultsWindow.getBoundingClientRect().height - document.querySelector('.results-heading').getBoundingClientRect().height;
            //element is lower than the view area
            if ((checkElm.getBoundingClientRect().top + checkElm.getBoundingClientRect().height) > resultsHeight)
                resultsWindow.scrollTo(0, (checkElm.offsetTop - resultsHeight))
            //element is higher the view area
            if (checkElm.getBoundingClientRect().top < 22)
                resultsWindow.scrollTo(0, checkElm.offsetTop - 22)
        }

        $scope.viewInLibrary = function () {
            console.log('viewInLibrary in js');
            ewMessagingService.viewInLibrary($scope.pageData.selectedRecord.songNumber, constants[0].SoftwareMediaType.song, { title: $scope.pageData.selectedRecord.title, authors: $scope.pageData.selectedRecord.authors });
        }

        $scope.status = function (id, status) {
            /*
            status = 0; I don't have it.
            status = 1; I am downloading it.
            status = 2; I have it.
            */
            console.log("Status function called. id:" + id + " status:" + status);
            
            if (status == 2 && id == $scope.pageData.selectedRecord.songNumber) {
                changeToInLibrary();
            }
            if (status == 0 && id == $scope.pageData.selectedRecord.songNumber) {
                changeToNotInLibrary();
            }
        }

        function changeToInLibrary() {
            console.log('InLibrary');
            var viewinlibrary = document.getElementById('JQ-viewinlibrary');
            var reimport = document.getElementById('JQ-reimport');

            if (viewinlibrary.classList.contains('d-none')) {
                viewinlibrary.classList.remove('d-none');
                reimport.classList.remove('d-none');
            }
            var importbutton = document.getElementById('JQ-import');
            if (!importbutton.classList.contains('d-none')) {
                importbutton.classList.add('d-none');
            }
        }

        function changeToNotInLibrary() {
            console.log('NotInLibrary');
            var viewinlibrary = document.getElementById('JQ-viewinlibrary');
            var reimport = document.getElementById('JQ-reimport');

            if (!viewinlibrary.classList.contains('d-none')) {
                viewinlibrary.classList.add('d-none');
                reimport.classList.add('d-none');
            }
            var importbutton = document.getElementById('JQ-import');
            if (importbutton.classList.contains('d-none')) {
                importbutton.classList.remove('d-none');
            }
        }

        $scope.toggleDetailsCard = function () {
            let detailsCard = document.getElementById("ewiDetailsCard");
            let lyrics = document.getElementById("ewiLyricsCard");

            detailsCard.classList.toggle("show");
            lyrics.classList.toggle("show");
        }

        window.addEventListener("keydown", function (e) {
            if (["ArrowUp", "ArrowDown"].indexOf(e.code) > -1) {
                e.preventDefault();
            }
        }, false);

        document.getElementById('ccliResults').addEventListener('scroll', function () {
            if (Math.abs(this.scrollHeight - this.clientHeight - this.scrollTop) < 300) {// Would prefer a method that is not just a magic number... - Luke
                $scope.getNextSet();
            }
        });

        function clickInsideElement(e, className) {
            var el = e.srcElement || e.target;

            if (el.classList.contains(className)) {
                return el;
            } else {
                while (el = el.parentNode) {
                    if (el.classList && el.classList.contains(className)) {
                        return el;
                    }
                }
            }
            return false;
        }

        $scope.logout = function () {
            ewMessagingService.updateCcliTokens("", "");
            ewMessagingService.nukeCookie("https://ccli.com");
            ewMessagingService.nukeCookie("https://profile.ccli.com");
            ewMessagingService.nukeCookie("https://identityservices.ccli.com");
            ewMessagingService.loginStatus(constants[0].LoginStatus.loggedout);
            ewMessagingService.updateVariable(constants[0].SoftwareVariables.ccliAutoReportPrompted, false);
            ewMessagingService.updateVariable(constants[0].SoftwareVariables.ccliAutoReport, false);
            window.location = needsAuthenticationUrl;
        }

        $scope.moreInfo = function (currentValue) {
            if (typeof currentValue !== "boolean" && currentValue !== "true")
                currentValue = false;

            ewMessagingService.openBrowserModal("CCLI AutoReport", "ccliautoreport", $scope.pageData.host + "/ccli/moreinfo?autoreport=" + currentValue, "");
        }

        function checkIfPageNeedsAuthentication() {
            if ($scope.pageData.accessToken == undefined || $scope.pageData.accessToken == "") {
                window.location = needsAuthenticationUrl;
            }
        }

        function initResize() {
            window.addEventListener('mouseup', resizeCompleted);
        }

        function resizeCompleted() {
            const previewPane = document.querySelector('.ccli-preview');
            const resultsPane = document.querySelector('.ccli-results');
            const previewSize = previewPane.style.width;
            const resultsSize = resultsPane.style.width;
            //console.log(previewSize, resultsSize);
            ewMessagingService.updateVariable('sdpu_ccliSongsPreviewWidth', previewSize);
            ewMessagingService.updateVariable('sdpu_ccliSongsResultsWidth', resultsSize);
            $scope.pageData.ccliSongsPreviewWidth = previewSize;
            $scope.pageData.ccliSongsResultsWidth = resultsSize;

            var path = $scope.pageData.host + "/ccli?accessToken=" + $scope.pageData.accessToken + "&refreshToken=" + $scope.pageData.refreshToken + "&search=" + $scope.pageData.searchTerm;
            state = {
                ccliSongsResultsWidth: $scope.pageData.ccliSongsResultsWidth,
                ccliSongsPreviewWidth: $scope.pageData.ccliSongsPreviewWidth
            }
            history.pushState(state, path, path);

            window.removeEventListener('mouseup', resizeCompleted);
        }

        function loseFocus() {
            document.body.classList.add('lose-focus');
        }

        function gainFocus() {
            document.body.classList.remove('lose-focus');
        }

        angular.element(document).ready(function () {
            //console.log($scope.pageData.ccliSongsResultsWidth, $scope.pageData.ccliSongsPreviewWidth, history.state)
            if ($scope.pageData.ccliSongsResultsWidth === undefined && history.state != null) {
                $scope.pageData.ccliSongsResultsWidth = history.state.ccliSongsResultsWidth;
                $scope.pageData.ccliSongsPreviewWidth = history.state.ccliSongsPreviewWidth;
                $scope.$apply();
            }

            if ($scope.pageData.expires < 10000) {
                if ($scope.pageData.expires == "") {
                    // leave it alone and force a refresh since the software is not passing the time with the tokens
                }
                else {
                    // fallthrough passes in the seconds from now it will expire. Need to calculate when the token expires here
                    $scope.pageData.expires = new Date(new Date().getTime() + ($scope.pageData.expires * 1000)).getTime();
                }
            }

            if ($scope.pageData.host === "https://www.easyworship.com")
                $scope.pageData.host = "https://is3.easyworship.com";

            checkIfPageNeedsAuthentication();

            if ($scope.pageData.showAutoReport) {
                var closeUrl = $scope.pageData.host + "/ccli?accessToken=" + constants[0].SoftwareVariables.ccliAccess
                    + "&refreshToken=" + constants[0].SoftwareVariables.ccliRefresh
                    + "&autoReportPrompted=" + constants[0].SoftwareVariables.ccliAutoReportPrompted
                    + "&autoReport=" + constants[0].SoftwareVariables.ccliAutoReport
                    + "&expires=" + constants[0].SoftwareVariables.ccliExpires
                    + "&search=" + constants[0].SoftwareVariables.search;

                ewMessagingService.openBrowserModal("CCLI Auto-Report", "ccliautoreport", $scope.pageData.host + "/ccli/autoreport", closeUrl);
                return;
            }
                

            //listener for focus in window
            window.addEventListener('blur', loseFocus);
            window.addEventListener('focus', gainFocus);
            if (!document.hasFocus()) {
                loseFocus();
            }
            if (document.hasFocus()) {
                gainFocus();
            }

            // Adjust container heights to compensate for search bar outside of EW
            if ($scope.pageData.fallthrough) {
                $('.ccli-results').css('height', 'calc(100vh - 58px)');
                $('.ccli-preview').css('height', 'calc(100vh - 58px)');
            }

            const previewPane = document.querySelector('.ccli-preview');
            console.log('offsetWidth', previewPane.offsetWidth, 'conatains preview-small', previewPane.classList.contains("preview-small"))
            if (!previewPane.classList.contains("preview-small") && previewPane.offsetWidth < 460) {
                previewPane.classList.add("preview-small");
            }
            console.log('offsetWidth', previewPane.offsetWidth, 'conatains preview-small', previewPane.classList.contains("preview-small"))

            ewMessagingService.loginStatus(constants[0].LoginStatus.loggedin);

            window.oncontextmenu = function(e) {
                e.preventDefault();

                itemClickedOn = clickInsideElement(e, "custom-context-item");

                if (itemClickedOn) {
                    $scope.highlightRecord(itemClickedOn);
                    $scope.showPreview(JSON.parse(itemClickedOn.dataset.item));
                    ewMessagingService.rightClick(e.screenX, e.screenY);
                } else {
                    ewMessagingService.rightClick(e.screenX, e.screenY);
                }
            }

            if ($scope.pageData.searchTerm != undefined && $scope.pageData.searchTerm != "") {
                $scope.search();
            }
            else {
                $scope.getDefault();
            }

            ewMessagingService.initFunction(constants[0].SoftwareFunctions.search, "angular.element('#ccli_controller').scope().searchSong(\"" + constants[0].SoftwareVariables.search + "\")");
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.next, "angular.element('#ccli_controller').scope().goToNextSong()");
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.prev, "angular.element('#ccli_controller').scope().goToPrevSong()");
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.nextPage, "angular.element('#ccli_controller').scope().pageDown()");
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.prevPage, "angular.element('#ccli_controller').scope().pageUp()");
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.status, 'angular.element("#ccli_controller").scope().status("' + constants[0].SoftwareVariables.id + '",' + '"' + constants[0].SoftwareVariables.avlStatus + '")');
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.logout, "angular.element('#ccli_controller').scope().logout()");
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.moreInfo, 'angular.element("#ccli_controller").scope().moreInfo("' + constants[0].SoftwareVariables.ccliAutoReport + '")');
            
            ewMessagingService.initStyleFunctions();

            ewMessagingService.initImport(constants[0].SoftwareFunctions.importSong, "angular.element('#ccli_controller').scope().getLyrics");

            ewMessagingService.updateVariable(constants[0].SoftwareVariables.ccliReportingProvider, "CCLI");

            //listener for sending preview window size
            document.querySelector('.preview-resizer').addEventListener('mousedown', initResize);
        });
    };

    app.controller('ccliController', ['$scope', '$http', '$q', 'constants', 'ewMessagingService', ccliController]);
}(angular.module("softouch")));;
(function (app) {
    var ccliLoginController = function ($scope, constants, ewMessagingService) {
        window.peekCcliLogin = $scope;
        $scope.pageData = {};

        $scope.login = function () {
            ewMessagingService.openBrowserModal("CCLI Authentication", "ccliLogin", $scope.pageData.host + "/ccli/login", "");
        }

        $scope.tryAgain = function () {
            var url = $scope.pageData.host + "/ccli?accessToken=" + constants[0].SoftwareVariables.ccliAccess
                + "&refreshToken=" + constants[0].SoftwareVariables.ccliRefresh
                + "&autoReportPrompted=" + constants[0].SoftwareVariables.ccliAutoReportPrompted
                + "&autoReport=" + constants[0].SoftwareVariables.ccliAutoReport
                + "&expires=" + constants[0].SoftwareVariables.ccliExpires
                + "&search=" + constants[0].SoftwareVariables.search;

            ewMessagingService.navigate(url);
        }

        angular.element(document).ready(function () {
            ewMessagingService.initStyleFunctions();
        });
    };

    app.controller('ccliLoginController', ['$scope', 'constants', 'ewMessagingService', ccliLoginController]);
}(angular.module("softouch")));;
(function (app) {
    var ccliMoreInfoController = function ($scope, constants, ewMessagingService) {
        window.peekCcliMore = $scope;
        $scope.pageData = {};

        $scope.updateSoftware = function () {
            ewMessagingService.updateVariable(constants[0].SoftwareVariables.ccliAutoReport, $scope.pageData.autoReport);
        }

        $scope.enable = function () {
            $scope.pageData.autoReport = true;
            $scope.updateSoftware();

            var url = $scope.pageData.host + "/ccli?accessToken=" + constants[0].SoftwareVariables.ccliAccess
                + "&refreshToken=" + constants[0].SoftwareVariables.ccliRefresh
                + "&autoReportPrompted=" + constants[0].SoftwareVariables.ccliAutoReportPrompted
                + "&autoReport=" + constants[0].SoftwareVariables.ccliAutoReport
                + "&expires=" + constants[0].SoftwareVariables.ccliExpires
                + "&search=" + constants[0].SoftwareVariables.search;

            ewMessagingService.navigate(url, true);
        }

        $scope.disable = function () {
            $scope.pageData.autoReport = false;
            $scope.updateSoftware();

            var url = $scope.pageData.host + "/ccli?accessToken=" + constants[0].SoftwareVariables.ccliAccess
                + "&refreshToken=" + constants[0].SoftwareVariables.ccliRefresh
                + "&autoReportPrompted=" + constants[0].SoftwareVariables.ccliAutoReportPrompted
                + "&autoReport=" + constants[0].SoftwareVariables.ccliAutoReport
                + "&expires=" + constants[0].SoftwareVariables.ccliExpires
                + "&search=" + constants[0].SoftwareVariables.search;

            ewMessagingService.navigate(url, true);
        }

        angular.element(document).ready(function () {
            ewMessagingService.initStyleFunctions();
            ewMessagingService.updateVariable(constants[0].SoftwareVariables.ccliAutoReportPrompted, true);
        });
    };

    app.controller('ccliMoreInfoController', ['$scope', 'constants', 'ewMessagingService', ccliMoreInfoController]);
}(angular.module("softouch")));;
(function (app) {
    var checkoutController = function ($scope, dataService, cartService, historyService) {
        window.peekCheckout = $scope;

        $scope.submitted = false;
        $scope.postingForm = false;

        $scope.info = {};
        $scope.error = {};

        // init objects for anything that will have an ng-init in the server side form
        // otherwise scope will not reflect changes
        $scope.summary = {};
        $scope.newOrg = {};
        $scope.payment = { paymentMethod: 'card', setQuickBuyCard: true, useExistingCard: false };
        $scope.card = {};
        $scope.address = {};
        $scope.complete = {};
        $scope.pageData = {};

        $scope.terms_dialog = function () {
            $('#subscriptionTermsModal').modal();
        };

        $scope.membership_dialog = function () {
            $('#membershipModal').modal();
        };

        $scope.autoadvance = function (event) {
            if (!isDirectionalKey(event.which)) {
                var currentInput = $("#" + event.currentTarget.id);

                if (currentInput.val().length == currentInput.attr("data-advanceon")) {
                    $("#" + currentInput.attr("data-advanceto")).focus();
                }
            }
        };

        // Checkout summary page remove item from cart
        $scope.removeMe = function (itemId) {

            // remove the item from the app cart, and the server side data
            var item = {};
            item.CartDetailId = itemId;
            cartService.cartIt(item, false);

            // local page cleanup
            $scope.summary.itemCount -= 1;
            var itemToRemove = $("#" + itemId);

            $scope.summary.cartTotal = (Number($scope.summary.cartTotal) - Number(itemToRemove.attr("data-amount"))).toFixed(2);

            itemToRemove.slideUp(150);
        }

        // Registration page lookup/new org modal
        $scope.displayRegisterModal = function () {
            $("#register_step1").show();
            $("#register_newOrg").hide();
            $("#serialLookup").hide();
            $("#licenseLookup").hide();
            $("#registerContactUs").hide();
            $("#registerLookupMatch").hide();
            hideMessage();

            $("#registerModal").modal();
        };

        $scope.displayNewOrg = function () {
            $scope.submitted = false;
            $scope.newOrg = {};
            $scope.orgForm.$setUntouched();
            $("#register_step1").slideUp();
            $("#register_newOrg").slideDown();
        };

        $scope.displaySerialLookup = function () {
            $scope.softwareKey = {
                key1s: "",
                key2s: "",
                key3s: "",
                key4s: "",
                key5s: "",
            };
            $scope.locateForm.$setUntouched();
            $scope.submitted = false;
            $("#register_step1").slideUp();
            $("#serialLookup").slideDown();
        };

        $scope.displayRegisterContactUs = function () {
            $("#serialLookup").slideUp();
            $("#registerContactUs").slideDown();
        };

        $scope.displayLicenseLookup = function () {
            $("#register_step1").slideUp();
            $("#licenseLookup").slideDown();
        };

        // registration page add org save
        $scope.createOrganization = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.orgForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Creating Organization"];
            showInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    // If integrated store added the org, the return data is the proper integrated store url
                    var url = "/checkout/payment";

                    if ($("body").hasClass("integratedStore"))
                        url = data.Url;

                    window.location = url;
                }
            };

            var onError = function (reason) {
                $scope.postingForm = false;
                $scope.error.messages = [reason];
                showErrorMessage();
            };

            var data = {};
            data.Name = $scope.newOrg.name;
            data.Address = $scope.newOrg.address;
            data.IntegratedStore = $("body").hasClass("integratedStore");

            dataService.getSetData("/component/AddOrganization", data)
                .then(onSuccess, onError);
        };


        // Registration page lookup by serial
        $scope.locateOrganizationBySerial = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.locateForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Locating Organization"];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.pageData.lookupAccountId = data.AccountId;
                    $scope.pageData.lookupOrgName = data.OrgName;
                    $("#serialLookup").slideUp();
                    $("#registerLookupMatch").slideDown();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            var postData = {
                Key1: $scope.softwareKey.key1s,
                Key2: $scope.softwareKey.key2s,
                Key3: $scope.softwareKey.key3s,
                Key4: $scope.softwareKey.key4s,
                Key5: $scope.softwareKey.key5s
            };

            dataService.getSetData("/component/lookupAccountBySerial", postData)
                .then(onSuccess, onError);
        };

        // Registration page lookup by computer
        $scope.locateOrganizationByComputer = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.licenseForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Locating Organization"];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.pageData.lookupAccountId = data.AccountId;
                    $scope.pageData.lookupOrgName = data.OrgName;
                    $("#licenseLookup").slideUp();
                    $("#registerLookupMatch").slideDown();
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            var postData = {
                Key1: $scope.pageData.key1,
                Key2: $scope.pageData.key2,
                Key3: $scope.pageData.key3,
                Key4: $scope.pageData.key4,
                Key5: $scope.pageData.key5,
                Key6: $scope.pageData.key6,
                Key7: $scope.pageData.key7,
            };

            dataService.getSetData("/component/lookupAccountByComputer", postData)
                .then(onSuccess, onError);
        };

        $scope.clearErrors = function () {
            hideMessage();
        };

        $scope.submitPayment = function () {
            if ($scope.postingForm)
                return;

            $scope.submitted = true;

            hideMessage();

            if ($scope.payment.useExistingCard && $scope.payment.selectedCard == 0) {
                $scope.error.messages = ["An existing card must be selected to continue."];
                showErrorMessage();
                return;
            }

            if ($scope.payment.paymentMethod === 'card' && !$scope.payment.useExistingCard && !$scope.paymentForm.$valid) {
                $scope.error.messages = ["Please complete the required fields."];
                showErrorMessage();
                return;
            }

            if ($scope.payment.paymentMethod === 'paypal' && ($scope.payment.paypalPayerId === "" || $scope.payment.paypalPayerId === undefined)) {
                $scope.error.messages = ["Error retrieving paypal orderId, please contact support."];
                showErrorMessage();
                return;
            }

            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.info.messages = ["Submitting Order"];
            showInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    window.location = data.Url;
                }
            };

            var onError = function (reason) {
                $scope.postingForm = false;
                $scope.error.messages = [reason];
                showErrorMessage();
            };

            // ajax the data
            var data = {};
            data.ApplyStoreCredit = $scope.payment.applyStoreCredit;
            data.GuestPaymentEmail = $scope.payment.guestEmailAddress;
            data.CardId = $scope.payment.useExistingCard === true ? $scope.payment.selectedCard : 0;
            data.SetQuickBuyCard = $scope.payment.setQuickBuyCard;
            data.NewCreditCard = $scope.payment.useExistingCard === true ? {} : $scope.card;
            data.NewCreditCard.NewBillingAddress = $scope.payment.useExistingCard === true ? {} : $scope.address;
            data.NotifySoftware = $scope.pageData.notifySoftware;
            data.PayPalPayerId = $scope.payment.paypalPayerId;
            data.PayPalToken = $scope.payment.paypalToken;

            dataService.getSetData("/component/checkout", data)
                .then(onSuccess, onError);
        };

        $scope.createGuestAccount = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            var onSuccess = function (data) {
                $scope.postingForm = false;
                if (data.Error === true) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                } else {
                    $('#guest-password').slideUp(250);
                    $('#guest-success').slideDown(250);
                }
            };

            var onError = function (reason) {
                $scope.postingForm = false;
                alert(reason);
            };

            // ajax the data
            dataService.getSetData("/component/signupfromguest", $scope.complete)
                .then(onSuccess, onError);
        };

        $scope.printReceipt = function (id) {
            historyService.viewInvoice(id).then(function (data) { showInvoice(data) }, function (response) { console.log(response) });
        };

        function showInvoice(data) {
            var w = window.open();

            if (w == null) {
                $scope.info.messages = ["Please check your pop up blocker. Unable to display invoice."];
                showInfoMessage();
            } else {
                hideMessage();
                $(w.document.body).html(data);
            }
        }

        angular.element(document)
            .ready(function () {
                if ($("body").hasClass("checkout") && !$("body").hasClass("payment"))
                    return;

                if ($scope.pageData.cards !== undefined && $scope.pageData.cards.length > 0) {
                    $scope.payment.selectedCard = $scope.pageData.cards[0].RowId;
                    $scope.payment.useExistingCard = true;
                }

                paypal.Buttons({
                    style: {
                        height: 40
                    },
                    createOrder: function () {
                        hideMessage();

                        if ($scope.pageData.hasSubscription && !$scope.payment.agree) {
                            $scope.error.messages = ["Terms and conditions must be accpeted to continue."];
                            showErrorMessage();
                            $scope.$apply();
                            return;
                        }

                        if ($scope.payment.guestEmailAddress === "" && $scope.pageData.guestCheckout) {
                            $scope.error.messages = ["An email address is required to continue."];
                            showErrorMessage();
                            $scope.$apply();
                            return;
                        }

                        return fetch("/component/setexpresscheckout").then(function (res) {
                            return res.json();
                        }).then(function (data) {
                            $scope.payment.paypalToken = data.token;
                            return data.token;
                        });
                    },
                    onApprove: function (data) {
                        //$scope.payment.paypalOrderId = data.paymentID;
                        $scope.payment.paypalPayerId = data.payerID;
                        $scope.submitPayment();
                    }
                }).render('#paypal-button-container');
            });
    };

    app.controller('checkoutController', ['$scope', 'dataService', 'cartService', 'historyService', checkoutController]);
}(angular.module("softouch")));;
(function (app) {
    var communityController = function ($rootScope, $scope, $http, cookieService) {
        $scope.phpBB = {};

        var goGetit = function () {
            cookieService.setCookie('phpBB', true, 1);
            $('#supportIframe').attr('src', $scope.phpBB.url);
        }

        angular.element(document).ready(function () {
            var bob = cookieService.getCookie('phpBB');
            if (bob == "") { goGetit() } else {
                $('#supportIframe').attr('src', $scope.phpBB.url);
                cookieService.deleteCookie('phpBB');
            }
        });

    }
    app.controller('communityController', ['$rootScope', '$scope', '$http', 'cookieService', communityController]);
}(angular.module("softouch")));
(function (app) {
    var createController = function ($scope, dataService) {

        $scope.user = {};
        $scope.info = {};
        $scope.error = {};
        $scope.submitted = false;
        $scope.postingForm = false;
        //$scope.emailPattern = /^[a-z]+[a-z0-9._]+@[a-z]+\.[a-z.]{2,5}$/;
        $scope.emailPattern = /^[a-zA-Z0-9][a-zA-Z0-9._-]+@[0-9a-zA-Z-]+\.[a-zA-Z0-9]{2,5}/;
        $scope.passIsHidden = true;
        $scope.showPassText = 'SHOW';

        $scope.$on('$viewContentLoaded', function () {
            console.log("View Content Loaded")
        })

        $scope.togglePassword = function () {
            $scope.passIsHidden = !$scope.passIsHidden;
            if ($scope.passIsHidden) {
                $scope.showPassText = 'SHOW';
            }
            else {
                $scope.showPassText = 'HIDE'
            }
        }

        $scope.paste = function (e) {
            e.preventDefault();
            return false
        }

        $scope.membership_dialog = function () {
            $('#membershipModal').modal();
        }
        $scope.terms_dialog = function () {
            $('#termsOfUseModal').modal();
        }

        $scope.createAccount = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.createAccountForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Creating Account"];
            showInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    window.location = data.Url;
                }
            };

            var onError = function (reason) {
                $scope.error.messages = [reason];
                showErrorMessage();
            };

            dataService.getSetData("/component/signup", $scope.user)
                .then(onSuccess, onError);
        }
    }

    app.controller('createController', ['$scope', 'dataService', createController]);

}(angular.module("softouch")));;
(function (app) {
    var demoEmailController = function ($scope, dataService, constants) {
        $scope.demoEmail = {};
        $scope.demoEmail.signup = true;
        $scope.error = {};

        $scope.submit = function () {
            hideMessage();
            // if email is blank.
            if ($scope.demoEmail.email === undefined) {
                $scope.error.messages = ["Please fill in all fields."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    hideMessage();


                    $('#mobile').addClass('d-none');
                    $('#success').removeClass('d-none');
                    $('#fields').addClass('d-none');

                    //$scope.downloadDemo(response.DemoUrl);
                }
            };

            var onError = function (response) {
                console.log("boo :(")
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            var onGetBuildNumberSuccess = function (response) {
                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    var postUrl = "/component/DemoLinkEmail/";
                    var postData = { email: $scope.demoEmail.email, demoLink: response.DemoUrl };

                    dataService
                        .getSetData(postUrl, postData)
                        .then(onSuccess, onError);
                }
            };
            // if box is checked
            if ($scope.demoEmail.signup) {
                var postUrl = "/component/GettingStartedTutorialEmails/";
                var postData = { email: $scope.demoEmail.email };

                dataService
                    .getSetData(postUrl, postData)
                    .then(onSuccess, onError);
            }
            // send the email
            dataService
                .getSetData("/component/GetCurrentBuildUrl")
                .then(onGetBuildNumberSuccess, onError);
        };
    };

    app.controller('demoEmailController', ['$scope', 'dataService', 'constants', demoEmailController]);

}(angular.module("softouch")));;
(function (app) {
    var demoVideoController = function ($scope, dataService, constants) {
        $scope.tabPrefix = "figure";
        $scope.activeTab = 1;
        $scope.maxTabs = $(".video-features-iframe").length;
        $scope.download = {};
        $scope.download.signup = true;
        $scope.error = {};

        $scope.select_group = function (tabNumber) {
            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + tabNumber + "']").addClass('sel');
            $scope.activeTab = parseFloat(tabNumber);
        }

        $scope.select_next = function () {
            if ($scope.activeTab + 1 > $scope.maxTabs) {
                $scope.activeTab = 1;
            } else {
                $scope.activeTab += 1;
            }
            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        }

        $scope.select_previous = function () {
            if ($scope.activeTab - 1 < 1) {
                $scope.activeTab = $scope.maxTabs;
            } else {
                $scope.activeTab -= 1;
            }
            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        }

    }

    app.controller('demoVideoController', ['$scope', 'dataService', 'constants', demoVideoController]);

}(angular.module("softouch")));;
(function (app) {
    var detailsItemController = function ($scope, $rootScope, constants, productEventService) {

        $scope.product = {};

        $rootScope.$on('detailsItemSet', function (evt, data) {
            //if ($('#detailsModal').hasClass('show')) {
            //    $('#detailsModal').modal("toggle");
            //    //console.log("detailsModal has show and .modal('toggle') called")
            //}
            $scope.product = data.item;
            $scope.product.videoSrc = constants[0].BaseUrl.videoLargeBase + $scope.product.ProductId + '.mp4';
            setTimeout(function () {
                //console.log("openModal called", $scope.product)
                $("#detailsModal").modal('show');
            }, 800);

            var p = {
                productId: $scope.product.ProductId,
                eventId: 3
            };

            productEventService.insertProductEvent(p);
        });
    };

    app.controller('detailsItemController', ['$scope', '$rootScope', 'constants', 'productEventService', detailsItemController]);

}(angular.module("softouch")));;
(function (app) {
    var downloadItemController = function ($scope, $rootScope) {
        window.peekDownloadController = $scope
        $scope.products = {};
        
        $rootScope.$on('downloadItemSet', function (evt, data) {
            if (data.item.CollectionItemInfo.length > 0) {
                $scope.products = data.item.CollectionItemInfo;
            } else {
                $scope.products = [ data.item ];
            }
            //console.log(data)
            // Reset all download buttons to download for integrated store
            $("div[id^='downloadBtn']").each(function (idx, item) {
                $(item).html("Download");
            });

            $("#downloadDialog").modal();
        });
    }
    app.controller('downloadItemController', ['$scope', '$rootScope', downloadItemController]);

}(angular.module("softouch")));;
(function (app) {
    var downloadsController = function ($scope, $rootScope, downloadsService, itemService, organizationService) {

        $scope.pageData = {};
        $scope.downloads = [];
        $scope.free = [];
        $scope.displayFree = false;
        $scope.purchased = [];
        // --- dll menus data and selected items
        $scope.mediaSelected = {};

        $scope.orgSelected = {};
        $scope.orgs = {};
        organizationService.getOrgs();
        //-------------------------------------
        $scope.double = false;
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));

        $rootScope.isMac = (checkMac && !checkIpad && !checkiPhone);

        (itemService.itemData.selectedFilters.ipp.length > 0) ? $scope.pageSize = itemService.itemData.selectedFilters.ipp[0].value : $scope.pageSize = 25;
        $scope.mediaValue = { 'id': 74688, 'Name': 'all media' };

        $scope.toggleWide = function () {
            $('.toggleButton').toggleClass('active');
            $scope.double = !$scope.double;
        };

        function setMedia(data) {
            
            $scope.purchased = data.Purchased;
            $scope.free = data.Free;

            ($scope.displayFree) ? $scope.downloads = $scope.free : $scope.downloads = $scope.purchased;
            $scope.currentPage = initPageNum();
            calcPages();

            toggleNoItemsMessage($scope.downloads.length);

            toggleBodyCover();
        }

        function onErr(response) {
        }

        $scope.toggleData = function (id) {
            switch (id) {
                case 1:
                    $scope.downloads = $scope.purchased;
                    $scope.displayFree = false;
                    $scope.currentPage = initPageNum();
                    calcPages();
                    break;
                case 2:
                    $scope.downloads = $scope.free;
                    $scope.displayFree = true;
                    $scope.currentPage = initPageNum();
                    calcPages();
                    break;
            }

            $("#purchasedToggle > li div").removeClass("sel");
            $("#purchasedToggle li:nth-child(" + id + ") div").addClass("sel");

            toggleNoItemsMessage($scope.downloads.length);
        }

        $rootScope.$on('currentPageChanged', function (evt, data) {
            $scope.currentPage = data.currentPage;
            calcPages();
        });

        function calcPages() {
            if ($scope.downloads) {
                var filteredLength = $scope.downloads.filter(function(itm, idx) {
                        return (($scope.mediaValue.id & itm.Type) === itm.Type);
                    }).length;

                $scope.numberOfPages = (Math.ceil(filteredLength / $scope.pageSize));
            }

        }

        $scope.goNext = function () {
            $('html,body').scrollTop(0);
            ($scope.currentPage + 1 > $scope.numberOfPages) ? $scope.currentPage = $scope.numberOfPages : $scope.currentPage += 1;
            calcPages();

        }
        $scope.goPrev = function () {
            ($scope.currentPage - 1 < 1) ? $scope.currentPage = 1 : $scope.currentPage -= 1;
            $('html,body').scrollTop(0);
            calcPages();
        }

        var itemSelectedlistener = $rootScope.$on('itemSelected', function (evt, data) {
            switch (data.controlId) {
                case 'media':
                    $scope.mediaValue = data.item;
                    $scope.currentPage = initPageNum();
                    calcPages();
                    break;
                case 'org':
                    organizationService.selectedOrganization = data.item.org;
                    organizationService.changeOrg();
                    break;
                case 'ipp':
                    itemService.itemData.selectedFilters.ipp = [];
                    itemService.itemData.selectedFilters.ipp.push({
                        id: data.item.value, key: 'ipp', value: data.item.value
                    });
                    $scope.pageSize = data.item.value;
                    $scope.currentPage = initPageNum();
                    calcPages();
                    break;
            }

        });
        $scope.$on('$destroy', itemSelectedlistener);

        var orgslistener = $rootScope.$on('orgListReady', function (evt, data) {
            var tmpList = []
            $.each(data.orgList, function (index, value) {
                var tmpName = value.AccountName;
                var tmpId = value.AccountId;
                var tmpValue = value.AccountId;
                var org = value;
                (value.IsDefaultAccount) ? $scope.orgSelected = { name: tmpName, id: tmpId, value: tmpValue, org: org } : null;
                tmpList.push({ name: tmpName, id: tmpId, value: tmpValue, org: org });
            });
            $scope.orgs = tmpList;
        });
        $scope.$on('$destroy', orgslistener);

        var updatedOrgListener = $rootScope.$on('updatedOrg', function (evt, data) {
            var org = {};
            org.name = data.selectedOrganization.AccountName;
            org.id = data.selectedOrganization.AccountId;
            org.value = data.selectedOrganization.AccountId;
             org.org = data.selectedOrganization;
            $scope.orgSelected = org;
            initService();
        });
        $scope.$on('$destroy', updatedOrgListener);

        function initService() {
            toggleBodyCover(true);
            $rootScope.guestToken = $scope.pageData.guestToken;
            $scope.currentPage = 1;
            getDownloads();
        }

        var initPageNum = function () {
            var cp = 0;

            var filteredLength = $scope.downloads.filter(function (itm, idx) {
                return (($scope.mediaValue.id & itm.Type) === itm.Type);
            }).length;

            (filteredLength > 0) ? cp = 1 : cp = 0;
            return cp;
        }

        function getDownloads() {
            downloadsService.getDownLoads()
                .then(
                function (data) { setMedia(data); },
                function (data) { onErr(data); });
        }

        var ippListener = $rootScope.$on('ippChanged', function (event, data) {
            calcPages();
        });
        $scope.$on('$destroy', ippListener);


        angular.element(document)
            .ready(function() {
                initService();
            });
    }
    app.controller('downloadsController', ['$scope', '$rootScope', 'downloadsService', 'itemService', 'organizationService', downloadsController]);

}(angular.module("softouch")));;
(function (app) {
    var favoritesController = function ($scope, $rootScope, favoritesService, paginationService, itemService) {
        $scope.filterTitle = 'My Favorites';
        $scope.showFirstControl = true;
        $scope.showSecondControl = false;
        $scope.paginationControls = true;
        (itemService.itemData.selectedFilters.ipp.length > 0) ? $scope.pageSize = itemService.itemData.selectedFilters.ipp[0].value : $scope.pageSize = 25;
        $scope.mediaValue = {};
        $scope.favorites = [];
        $scope.filteredLength = 0;
        $scope.double = false;
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));

        $rootScope.isMac = (checkMac && !checkIpad && !checkiPhone);

        // --- dll menus data and selected items
        $scope.ippSelected = {};
        $scope.mediaSelected = {};
        //-------------------------------------

        $scope.toggleWide = function () {
            $('.toggleButton').toggleClass('active');
            $scope.double = !$scope.double;
        };

        var favoriteListener = $rootScope.$on('favorite', function (evt, data) {
            $scope.favorites = favoritesService.favoritesData;
            paginationService.previewData = favoritesService.favoritesData;
        });
        $scope.$on('$destroy', favoriteListener);

        var unfavoriteListener = $rootScope.$on('unfavorite', function (evt, data) {
            $scope.favorites = favoritesService.favoritesData;
            paginationService.previewData = favoritesService.favoritesData;
            calcPages();
        });
        $scope.$on('$destroy', unfavoriteListener);

        var ippListener = $rootScope.$on('ippChanged', function (event, data) {
            (itemService.itemData.selectedFilters.ipp.length > 0) ? $scope.pageSize = itemService.itemData.selectedFilters.ipp[0].value : $scope.pageSize = 25;
            initService();
        });
        $scope.$on('$destroy', ippListener);

        var setFavorites = function (data) {
            $scope.favorites = data;
            $scope.currentPage = initPageNum();
            calcPages();
            toggleBodyCover();
            $('#waitingdiv').css('display', 'block');
        }
        var onFavErr = function (response) {
            $scope.favorites = [];
            $scope.error = "unable to retreive favorites";
        }

        var itemSelectedlistener = $rootScope.$on('itemSelected', function (evt, data) {
            switch (data.controlId) {
                case 'media':
                    $scope.mediaValue = data.item;
                    $scope.currentPage = initPageNum();
                    calcPages();
                    break;
                case 'ipp':
                    itemService.itemData.selectedFilters.ipp = [];
                    itemService.itemData.selectedFilters.ipp.push({
                        id: data.item.value, key: 'ipp', value: data.item.value
                    });
                    $scope.pageSize = data.item.value;
                    $scope.currentPage = initPageNum();
                    calcPages();
                    break;
            }

        });
        $scope.$on('$destroy', itemSelectedlistener);


        $rootScope.$on('currentPageChanged', function (evt, data, obj) {
            $scope.currentPage = data.currentPage;
            calcPages();
        });

        $scope.goNext = function () {
            $('html,body').scrollTop(0);
            ($scope.currentPage + 1 > $scope.numberOfPages) ? $scope.currentPage = $scope.numberOfPages : $scope.currentPage += 1;
            calcPages();

        }
        $scope.goPrev = function () {
            ($scope.currentPage - 1 < 1) ? $scope.currentPage = 1 : $scope.currentPage -= 1;
            $('html,body').scrollTop(0);
            calcPages();
        }

        function calcPages() {
            var filteredLength = $scope.favorites.filter(function (itm, idx) {
                return (($scope.mediaValue.id & itm.Type) == itm.Type)
            }).length;
            $scope.filteredLength = filteredLength;
            $scope.numberOfPages = (Math.ceil(filteredLength / $scope.pageSize));
        }

        function initService() {
            toggleBodyCover(true);
            $scope.mediaValue = { 'id': 74688, 'Name': 'all media' };
            $scope.currentPage = initPageNum();
            getFavorites();
        };

        var initPageNum = function () {
            var cp = 0;

            var filteredLength = $scope.favorites.filter(function (itm, idx) {
                return (($scope.mediaValue.id & itm.Type) === itm.Type);
            }).length;

            (filteredLength > 0) ? cp = 1 : cp = 0;
            return cp;
        }

        function getFavorites() {
            favoritesService.getFavorites().then(
                function (favoritesData) { setFavorites(favoritesData) },
                function (favoritesData) { onFavErr(favoritesData) });
        };

        angular.element(document)
            .ready(function () {
                initService();
            });
    }
    app.controller('favoritesController', ['$scope', '$rootScope', 'favoritesService', 'paginationService', 'itemService', favoritesController]);
}(angular.module("softouch")));;
(function (app) {
    var featureController = function ($scope, dataService, constants) {
        $scope.activeProductType = constants[0].FeatureType.Mini;
        $scope.pageSize = 6;
        $scope.pageData = { Products: [], loadingData: [], pulledProducts: [] };

        for (var i = 1; i <= $scope.pageSize; i++)
            $scope.pageData.loadingData.push({});

        $scope.pageData.Products = $scope.pageData.loadingData;

        var getData = function () {
            if ($('body').hasClass('integratedStore')) {
                var sp = 'sp/' + $scope.activeProductType + '/ipp/' + $scope.pageSize;
                var payload = { 'filter': sp };

                $scope.pageData.Products = $scope.pageData.loadingData;

                dataService.getSetData(constants[0].BaseUrl.refreshView, payload).then(function (data) {
                    if (data.Error) {
                        // Should do something here
                    }
                    else {
                        $scope.pageData.pulledProducts.push({ key: $scope.activeProductType, value: data.Products });

                        $scope.pageData.Products = data.Products;
                    }
                });
            }
        };

        $scope.selectGroup = function (clickedItem, productTypeId) {
            $(".actNavCategory").removeClass('sel');
            $(clickedItem).addClass('sel');

            $scope.activeProductType = productTypeId;

            var products = $scope.pageData.pulledProducts.filter(function (itm) {
                return itm.key == $scope.activeProductType;
            });

            if (products.length === 0) {
                getData();
            } else {
                $scope.pageData.Products = products[0].value;
            }
        };

        angular.element(document).ready(function () {
            getData();
        });
    };
    app.controller('featureController', ['$scope', 'dataService', 'constants', featureController]);
}(angular.module("softouch")));;
(function (app) {
    var seasonalController = function ($rootScope, $scope, dataService, constants) {
        window.peekFeatured = $scope;
        $scope.active = {};
        $scope.seasonal = {};
        $scope.seasonal.activeProductType = constants[0].ProductType.Minimovie;
        $scope.season = {};
        $scope.data = {
            loadingData: [],
            miniMovies: [],
            titleMedia: [],
            countdown: [],
            collection: [],
        };
        var OrderBy = constants[0].SortedBy.Newest;

        for (i = 0; i < 16; i++) {
            $scope.data.loadingData.push({});
        }

        $scope.data.miniMovies = $scope.data.loadingData;
        $scope.data.backgrounds = $scope.data.loadingData;
        $scope.data.titleMedia = $scope.data.loadingData;
        $scope.data.countdown = $scope.data.loadingData;
        $scope.data.collection = $scope.data.loadingData;

        //Check Browser
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));
        $rootScope.isMac = (checkMac && !checkIpad && !checkiPhone);

        // Set the sort order of the products
        $('.toggle-item').click(function () {
            if (!$(this).hasClass("selected")) {
                $('.toggle-item').removeClass('selected');
                $(this).addClass("selected");
                if (OrderBy == constants[0].SortedBy.Newest) {
                    OrderBy = constants[0].SortedBy.Trending;
                }
                else {
                    OrderBy = constants[0].SortedBy.Newest;
                }
                $(".loading-gray-bars").removeClass('d-none');
                $('.thumb').addClass("d-none");
                $('.detailInfo').addClass('d-none');
                getData();
            };
        });

        var getData = function () {
            //console.log('getData')
            var commonFilterParams = '/t/' + $scope.active.seasonId + '/ipp/16/' + constants[0].ProductViewFilterKey.OrderBy + '/' + OrderBy;

            var sp1 = ('pty/' + constants[0].ProductType.Minimovie + commonFilterParams);
            var payload1 = { 'filter': sp1 };
            var sp2 = ('pty/' + constants[0].ProductType.Background + commonFilterParams);
            var payload2 = { 'filter': sp2 };
            var sp3 = ('pty/' + constants[0].ProductType.TitleMedia + commonFilterParams);
            var payload3 = { 'filter': sp3 };
            var sp4 = ('pty/' + constants[0].ProductType.Countdown + commonFilterParams);
            var payload4 = { 'filter': sp4 };
            var sp5 = ('bun/1' + commonFilterParams);
            console.log(sp5)
            var payload5 = { 'filter': sp5 };

            dataService.getSetData(constants[0].BaseUrl.refreshView, payload1).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#miniMovieSwiper').addClass('d-none');
                    }
                    else {
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                        $scope.data.miniMovies = data.Products;
                        $("#miniMovieSwiper .loading-gray-bars").addClass("d-none");
                        $('#miniMovieSwiper .thumb').removeClass('d-none');
                        $('#miniMovieSwiper .detailInfo').removeClass('d-none');
                        $scope.changeSwiperPagingHeight('#miniMovieSwiper');
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload3).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#titleMediaSwiper').addClass('d-none');
                    }
                    else {
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                        $scope.data.titleMedia = data.Products;
                        $("#titleMediaSwiper .loading-gray-bars").addClass("d-none");
                        $('#titleMediaSwiper .thumb').removeClass('d-none');
                        $('#titleMediaSwiper .detailInfo').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#titleMediaSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload4).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#countdownSwiper').addClass('d-none');
                    }
                    else {
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                        $scope.data.countdown = data.Products;
                        $("#countdownSwiper .loading-gray-bars").addClass("d-none");
                        $('#countdownSwiper .thumb').removeClass('d-none');
                        $('#countdownSwiper .detailInfo').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#countdownSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload5).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#collectionSwiper').addClass('d-none');
                        console.log("test")
                    }
                    else {
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                        $scope.data.collection = data.Products;
                        $("#collectionSwiper .loading-gray-bars").addClass("d-none");
                        $('#collectionSwiper .thumb').removeClass('d-none');
                        $('#collectionSwiper .detailInfo').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#collectionSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload2).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#backgroundSwiper').addClass('d-none');
                    }
                    else {
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                        $scope.data.backgrounds = data.Products;
                        $("#backgroundSwiper .loading-gray-bars").addClass("d-none");
                        $('#backgroundSwiper .thumb').removeClass('d-none');
                        $('#backgroundSwiper .detailInfo').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#backgroundSwiper");
                    }
                }
            });
        }

        $scope.loaded = function (test) {
            if ($scope.miniMovieSwiper != undefined) {
                $scope.miniMovieSwiper.update();
                $scope.backgroundSwiper.update();
                $scope.titleMediaSwiper.update();
                $scope.countdownSwiper.update();
                $scope.collectionSwiper.update();
            }

        }

        $scope.changeSwiperPagingHeight = function (swiper) {
            var imgheight = $(swiper + " .thumb-img").css("height");
            var topheight = $(swiper + " .swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        $scope.changeSwiperPagingHeightResize = function () {
            var imgheight = $(".thumb-img").css("height");
            var topheight = $(".swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        angular.element(document).ready(function () {
            //$scope.initObjects(true);
            $scope.miniMovieSwiper = new Swiper('#miniMovieSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: {
                    loadOnTransitionStart: true,
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.backgroundSwiper = new Swiper('#backgroundSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.titleMediaSwiper = new Swiper('#titleMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.countdownSwiper = new Swiper('#countdownSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.collectionSwiper = new Swiper('#collectionSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            getData();
            window.onresize = $scope.changeSwiperPagingHeightResize;
        });
    }
    app.controller('seasonalController', ['$rootScope', '$scope', 'dataService', 'constants', seasonalController]);
}(angular.module("softouch")));;
(function (app) {
    var featuredProducerController = function ($rootScope, $scope, dataService, constants, cartService) {
        window.peekFeaturedProducer = $scope;
        $scope.active = {};
        $scope.seasonal = {};
        $scope.seasonal.activeProductType = constants[0].ProductType.Minimovie;
        $scope.season = {};
        $scope.data = {
            loadingData: [],
            producerPack: {},
            miniMovies: [],
            titleMedia: [],
            countdown: [],
            collection: [],
            lowerThirds: [],
            socialMedia: [],
            overlays: [],
            lyricMedia: [],
        };

        var OrderBy = constants[0].SortedBy.Newest;

        for (i = 0; i < 16; i++) {
            $scope.data.loadingData.push({});
        }

        $scope.data.miniMovies = $scope.data.loadingData;
        $scope.data.backgrounds = $scope.data.loadingData;
        $scope.data.titleMedia = $scope.data.loadingData;
        $scope.data.countdown = $scope.data.loadingData;
        $scope.data.collection = $scope.data.loadingData;
        $scope.data.lowerThirds = $scope.data.loadingData;
        $scope.data.socialMedia = $scope.data.loadingData;
        $scope.data.overlays = $scope.data.loadingData;
        $scope.data.lyricMedia = $scope.data.loadingData;

        //Check Browser
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));
        $rootScope.isMac = (checkMac && !checkIpad && !checkiPhone);



        var getData = function () {
            //console.log('getData')

            dataService.getSetData("/component/GetProducerPacks").then(function (data) {
                if (data.Error) {
                    console.log(data)
                }
                else {
                    var filteredPacks = data.filter(function (itm, idx) { return itm.ProducerId == $scope.active.producerId });
                    $scope.data.producerPack = filteredPacks[0];
                    $scope.data.producerPack.roundedProductCount = floor10($scope.data.producerPack.TotalProductCount, 2);
                }
            });

            var commonFilterParams = constants[0].ProductViewFilterKey.Producers + '/' + $scope.active.producerId + '/' + constants[0].ProductViewFilterKey.ItemsPerPage + '/16/' + constants[0].ProductViewFilterKey.OrderBy + '/' + OrderBy;

            //miniMovie
            var sp1 = (constants[0].ProductViewFilterKey.ProductType + '/' + constants[0].ProductType.Minimovie + '/' + commonFilterParams);
            var payload1 = { 'filter': sp1 };
            //backgrounds
            var sp2 = (constants[0].ProductViewFilterKey.ProductType + '/' + constants[0].ProductType.Background + '/' + commonFilterParams);
            var payload2 = { 'filter': sp2 };
            //titleMedia
            var sp3 = (constants[0].ProductViewFilterKey.ProductType + '/' + constants[0].ProductType.TitleMedia + '/' + commonFilterParams);
            var payload3 = { 'filter': sp3 };
            //countdowns
            var sp4 = (constants[0].ProductViewFilterKey.ProductType + '/' + constants[0].ProductType.Countdown + '/' + commonFilterParams);
            var payload4 = { 'filter': sp4 };
            //collections
            var sp5 = (constants[0].ProductViewFilterKey.Bundles + '/' + commonFilterParams);
            var payload5 = { 'filter': sp5 };
            //lowerThirds
            var sp6 = (constants[0].ProductViewFilterKey.ProductType + '/' + constants[0].ProductType.LowerThirds + '/' + commonFilterParams);
            var payloadLowerThirds = { 'filter': sp6 };
            //socialMedia
            var sp7 = (constants[0].ProductViewFilterKey.ProductType + '/' + constants[0].ProductType.SocialMedia + '/' + commonFilterParams);
            var payloadSocialMedia = { 'filter': sp7 };
            //overlays
            var sp8 = (constants[0].ProductViewFilterKey.MediaType + '/' + constants[0].ProductMediaType.Overlays + '/' + commonFilterParams);
            var payloadOverlays = { 'filter': sp8 };
            //lyricMedia
            var sp9 = (constants[0].ProductViewFilterKey.ProductType + '/' + constants[0].ProductType.LyricMedia + '/' + commonFilterParams);
            var payloadLyricMedia = { 'filter': sp9 };

            dataService.getSetData(constants[0].BaseUrl.refreshView, payload1).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#miniMovieSwiper').addClass('d-none');
                    }
                    else {
                        $('#miniMovieSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.miniMovies = data.Products;
                        $scope.data.miniMoviesCount = data.ProductCount;
                        $("#miniMovieSwiper .loading-gray-bars").addClass("d-none");
                        $('#miniMovieSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#miniMovieSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload2).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#backgroundSwiper').addClass('d-none');
                    }
                    else {
                        $('#backgroundSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.backgrounds = data.Products;
                        $scope.data.backgroundsCount = data.ProductCount;
                        $("#backgroundSwiper .loading-gray-bars").addClass("d-none");
                        $('#backgroundSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#backgroundSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload3).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#titleMediaSwiper').addClass('d-none');
                    }
                    else {
                        $('#titleMediaSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.titleMedia = data.Products;
                        $scope.data.titleMediaCount = data.ProductCount;
                        $("#titleMediaSwiper .loading-gray-bars").addClass("d-none");
                        $('#titleMediaSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#titleMediaSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload4).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#countdownSwiper').addClass('d-none');
                    }
                    else {
                        $('#countdownSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.countdown = data.Products;
                        $scope.data.countdownCount = data.ProductCount;
                        $("#countdownSwiper .loading-gray-bars").addClass("d-none");
                        $('#countdownSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#countdownSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload5).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#collectionSwiper').addClass('d-none');
                    }
                    else {
                        $('#collectionSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.collection = data.Products;
                        $scope.data.collectionCount = data.ProductCount;
                        $("#collectionSwiper .loading-gray-bars").addClass("d-none");
                        $('#collectionSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#collectionSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payloadLowerThirds).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#lowerThirdsSwiper').addClass('d-none');
                    }
                    else {
                        $('#lowerThirdsSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.lowerThirds = data.Products;
                        $scope.data.lowerThirdsCount = data.ProductCount;
                        $("#lowerThirdsSwiper .loading-gray-bars").addClass("d-none");
                        $('#lowerThirdsSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#lowerThirdsSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payloadSocialMedia).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#socialMediaSwiper').addClass('d-none');
                    }
                    else {
                        $('#socialMediaSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.socialMedia = data.Products;
                        $scope.data.socialMediaCount = data.ProductCount;
                        $("#socialMediaSwiper .loading-gray-bars").addClass("d-none");
                        $('#socialMediaSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#socialMediaSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payloadOverlays).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#overlaysSwiper').addClass('d-none');
                    }
                    else {
                        $('#overlaysSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.overlays = data.Products;
                        $scope.data.overlaysCount = data.ProductCount;
                        $("#overlaysSwiper .loading-gray-bars").addClass("d-none");
                        $('#overlaysSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#overlaysSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payloadLyricMedia).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#lyricMediaSwiper').addClass('d-none');
                    }
                    else {
                        $('#LyricMediaSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.lyricMedia = data.Products;
                        $scope.data.lyricMediaCount = data.ProductCount;
                        $("#lyricMediaSwiper .loading-gray-bars").addClass("d-none");
                        $('#lyricMediaSwiper .thumb').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#lyricMediaSwiper");
                    }
                }
            });
        }

        $scope.loaded = function (test) {
            if ($scope.miniMovieSwiper != undefined) {
                $scope.miniMovieSwiper.update();
                $scope.backgroundSwiper.update();
                $scope.titleMediaSwiper.update();
                $scope.countdownSwiper.update();
                $scope.collectionSwiper.update();
            }
        }

             // Set the sort order of the products
        $('.toggle-item').click(function () {
            if (!$(this).hasClass("selected")) {
                $('.toggle-item').removeClass('selected');
                $(this).addClass("selected");
                if (OrderBy == constants[0].SortedBy.Newest) {
                    OrderBy = constants[0].SortedBy.Trending
                }
                else {
                    OrderBy = constants[0].SortedBy.Newest
                }
                getData();
            };
        });

        $scope.changeSwiperPagingHeight = function (swiper) {
            var imgheight = $(swiper + " .thumb-img").css("height");
            var topheight = $(swiper + " .swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        $scope.scrollToPromo = function () {
            document.getElementById("featured-promo").scrollIntoView();
        }

        $scope.addToCart = function (evt) {
            if ($scope.data.producerPack.ProductId !== null) {
                cartService.cartIt($scope.data.producerPack, true)
                    .then(function (data) {
                        var url = constants[0].Urls.checkoutSummary;

                        if ($("body").hasClass("integratedStore")) {
                        }

                        window.location.href = url;
                    });
            }
        };

        angular.element(document).ready(function () {
            //$scope.initObjects(true);
            $scope.miniMovieSwiper = new Swiper('#miniMovieSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: {
                    loadOnTransitionStart: true,
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.backgroundSwiper = new Swiper('#backgroundSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.titleMediaSwiper = new Swiper('#titleMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.countdownSwiper = new Swiper('#countdownSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.collectionSwiper = new Swiper('#collectionSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.lowerThirdsSwiper = new Swiper('#lowerThirdsSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.socialMediaSwiper = new Swiper('#socialMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.overlaysSwiper = new Swiper('#overlaysSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.lyricMediaSwiper = new Swiper('#lyricMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            getData();
            window.onresize = $scope.changeSwiperPagingHeight;
        });
    }
    app.controller('featuredProducerController', ['$rootScope', '$scope', 'dataService', 'constants', 'cartService', featuredProducerController]);
}(angular.module("softouch")));;
(function (app) {
    var filtersModalController = function ($scope, $rootScope, listService, producerService, dataFilterService ) {
        $scope.modalList = [];
        $scope.title = '';
        $scope.firstLetterSelected = { 'checked': true, 'letter': 'abcde', 'name': 'ABCDE' };
        $scope.Producers = [];

        $scope.orderByValue = 'key'; // modal orderby

        var modalListReadyListener = $rootScope.$on('modalListReady', function (event, data) {
            $scope.title = data.title;
            (data.orderByValue) ? $scope.orderByValue = 'value' : $scope.orderByValue = 'key';;
            if ($scope.title == 'Producers') {
                $scope.selectLetter({ 'checked': true, 'letter': 'abcde', 'name': 'ABCDE' });
                $scope.modalList = data.modalList;
            }
            else {
                $scope.selectLetter({ 'checked': true, 'letter': '%', 'name': '%' });
                $scope.modalList = data.modalList;
            }
        });

        function isMatch(obj) {
            return (!obj.checked);
        }

        $scope.$on('$destroy', modalListReadyListener);
       
        $scope.alpaMenu = listService.getStaticList('alpha');

        $scope.selectMe = function (itm) {
            itm.checked = !itm.checked;
            $scope.selectedList = $scope.modalList.filter(isChecked);
            $rootScope.$broadcast('ModalListSelected', {
                'selectedList': $scope.selectedList,
                'filterItem': itm,
                'add': itm.checked
            });
        };
        function isChecked(obj) {
            return (obj.checked);
        }
        function isNotChecked(obj) {
            return (!obj.checked);
        }
        
        $scope.selectLetter = function (item) {
            $.each($scope.alpaMenu, function (key, value) {
                (item.letter.toUpperCase() == value.letter.toUpperCase()) ? value.checked = true : value.checked = false;
            });
            $scope.firstLetterSelected = item;
            item.checked = true;
        };

    }
    app.controller('filtersModalController', ['$scope', '$rootScope', 'listService', 'producerService', 'dataFilterService', filtersModalController]);
}(angular.module("softouch")));;
(function (app) {
    var headerSecondaryController = function ($scope, $rootScope) {
        window.x = $scope;
        $scope.search = {};
        $scope.search.phrase = "";
        $scope.isIntegratedStore = $("body").hasClass("integratedStore");
        $scope.loggedInOrg = {};

        if ($scope.isIntegratedStore) {
            $('.only-integrated-store').addClass('show');
        }

        // smallest desktop 993
        // largest mobile 992
        $scope.closeGettingSmaller = false;
        $scope.closeGettingLarger = false;
        if ($(document).width() >= 993) {
            $scope.closeGettingSmaller = true;
        } else {
            $scope.closeGettingLarger = true;
        }

        var elementResizedListener = $rootScope.$on('elementResized', function (evt, data) {
            var bodyCover = $("#bodyCover");
            var height = $(".body-content").height() + $(".footer-container").height() + 40;

            bodyCover.css("height", height);

            var width = $(document).width();
            if (bodyCover.css("display") === "block") {
                if ($scope.closeGettingLarger && width > 992) {
                    $scope.closeGettingLarger = false;
                    $scope.closeGettingSmaller = true;
                    toggleBodyCover();
                }
                if ($scope.closeGettingSmaller && width < 993) {
                    toggleBodyCover();
                    $scope.closeGettingLarger = true;
                    $scope.closeGettingSmaller = false;
                }
            }
        });
        $scope.$on('$destroy', elementResizedListener);

        $scope.toggleSearchBox = function (state) {
            if (state === 'on') {
                var navWidth = 0;
                var viewportWidth = window.innerWidth;
                var bodyWidth = $('body').width()
                var scrollbarWidth = viewportWidth - bodyWidth;

                //console.log("Viewport: " + viewportWidth);
                //console.log("Body: " + bodyWidth);
                //console.log("Scroll Bar: " + scrollbarWidth);

                var itemTotal = $('.secondary-nav > .nav-item').length;
                //console.log('Number of Items: ' + itemTotal);
                $('.secondary-nav .nav-item').each(function (i) {
                    var itemVisible = $(this).css('visibility') == 'hidden' ? 'No' : 'Yes';
                    //console.log('Item ' + i + ' Visible?: ' + itemVisible);

                    if (i != 0 && itemVisible == 'Yes') {
                        var itemWidth = $(this).width();
                        //console.log('Width of Item ' + i + ': ' + itemWidth);
                        navWidth += itemWidth;
                    } else {
                        //console.log('Skip Item ' + i);
                    }
                });

                //console.log('Nav Width: ' + navWidth);

                $('#searchBar').width(navWidth + scrollbarWidth);

                toggleBodyCover(true);
            } else {
                toggleBodyCover();
            }

            if ($(document).width() >= 992) {
                $('#search-input').focus();
            }
        };

        $scope.keysearch = function (evt) {
            if (evt != undefined) {
                if (evt.which === 13 || evt.which === 1) {
                    window.location.href = "/media/search/" + $scope.search.phrase;
                }

                if (evt.which === 27) {
                    $scope.toggleSearchBox();
                }


            } else {
                window.location.href = "/media/search/" + $scope.search.phrase;
            }
        };

        $scope.updateDropdownImage = function (subitemId) {
            $('.dropdown-image').removeClass('show');
            $('#' + subitemId + 'DropdownImage').addClass('show');
            //$('.dropdown-image').css('background-image', 'url(' + item + ')');
        };

        $scope.resetDropdownImage = function (itemId) {
            $('.dropdown-image').removeClass('show');
            $('.jq-dropdown-image-toggle').addClass('show');
            //$('.dropdown-image').css('background-image', 'url(' + item + ')');
        };

        $rootScope.$on("orgListReady", function (event, data) {
            $scope.loggedInOrg = data.orgList.filter(function (org) {
                return org.IsDefaultAccount === true;
            })[0];
        });

        $rootScope.$on("updatedOrg", function (event, data) {
            $scope.loggedInOrg = data.selectedOrganization;
        });
    };

    app.controller('headerSecondaryController', ['$scope', '$rootScope', headerSecondaryController]);
}(angular.module("softouch")));;
(function (app) {
    var homeController = function ($rootScope, $scope, constants, pricingService, dataService)
    {
        window.peekHome = $scope;
        $scope.YTParsed = "Nothing to see yet...";
        $scope.items = [];
        $scope.data = {
            loadingData: [],
        };
        $scope.pageData = {
            oneTimePurchase: {},
            subscriptionTypes: [],
            currentSubscription: {},
        };
        $scope.selectedMembers = '0';

        $scope.scrolled = false;

        $scope.togglePanel = function(panel){
            $('#' + panel + '-panel').toggleClass("active-panel");
        }




        $scope.$watch('selectedMembers', function ()
        {
            var indicator = document.getElementById("checkbox-indicator");
            //transforms:
            //0:    transform: translateX(0rem);
            //1:    transform: translateX(5.525rem);
            //2:    transform: translateX(12rem);
            //3:    transform: translateX(18.6rem);
            //4:    transform: translateX(24.7rem);
            var transform = "translateX(0rem)";

            switch ($scope.selectedMembers)
            {
                case '0': transform = "translateX(0rem)";
                    break;
                case '1': transform = "translateX(5.525rem)";
                    break;
                case '2': transform = "translateX(12rem)";
                    break;
                case '3': transform = "translateX(18.6rem)";
                    break;
                case '4': transform = "translateX(24.7rem)";
                    break;
            }

            indicator.style.setProperty("transform", transform);
        }
        );

        function allowScroll()
        {
            $scope.scrolled = false;
        }

        window.addEventListener('scroll', function (event)
        {
            if (!$scope.scrolled)
            {
                $scope.scrolled = true;
                $scope.timeout = setTimeout(allowScroll, 1000)
            }
            else
            {
                clearTimeout($scope.timeout)
                $scope.timeout = setTimeout(allowScroll, 1000)

            }
        })

        $scope.getPlans = function ()
        {
            pricingService.getPricing()
                .then(function (data)
                {
                    if (data.Error)
                    {
                        return null;
                    }
                    else
                    {
                        /*console.log("getPlans", data);*/
                        $scope.pageData.currentSubscription = data.currentSubscription;
                        $scope.pageData.subscriptionTypes = data.softwareOptions;
                        $scope.pageData.oneTimePurchase = data.oneTimePurchase;
                        $scope.pageData.premiumCount = data.premiumCount;
                        $scope.otp = $scope.pageData.oneTimePurchase.Campus;
                        $scope.pageData.storeCreditBalance = data.storeCreditBalance;

                        return
                    }
                });
        };

        //$scope.fixDate = function (dateToFix)
        //{
        //    var currentDate = new Date();
        //    var oldDate = new Date(dateToFix);
        //    var oldYear = oldDate.getFullYear();
        //    var currentYear = currentDate.getFullYear();
        //    var oldMonth = oldDate.getMonth();
        //    var currentMonth = currentDate.getMonth();
        //    var currentDay = currentDate.getDate();
        //    var oldDay = oldDate.getDate();

        //    var yearDiff = currentYear - oldYear;
        //    var monthDiff = currentMonth - oldMonth;
        //    var weekDiff = (currentDay / 7) - (currentDay / 7);
        //    var dayDiff = currentDay - oldDay;
        //    var timePassed = yearDiff > 0 ? yearDiff > 1 ? yearDiff + " years ago" : yearDiff + " year ago" : monthDiff > 0 ? monthDiff > 1 ? monthDiff + " months ago" : monthDiff + " month ago" : weekDiff > 0 ? weekDiff > 1 ? weekDiff + " weeks ago" : weekDiff + " week ago" : dayDiff > 0 ? dayDiff > 1 ? dayDiff + " days ago" : dayDiff + " day ago" : "";
        //    console.log(timePassed);
        //    return timePassed;
        //}

        for (i = 0; i < 20; i++)
        {
            $scope.data.loadingData.push({});
            $scope.items.push({});
        }

        $scope.data.trendingMedia = $scope.data.loadingData;

        var getData = function ()
        {
            //console.log('getData')
            var commonFilterParams = '/ipp/20/';

            //Trending Media
            var sp1 = (constants[0].ProductViewFilterKey.OrderBy + '/' + constants[0].SortedBy.Trending + commonFilterParams);
            var payload1 = { 'filter': sp1 };

            //Trending Media
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload1).then(function (data)
            {
                if (data.Error)
                {
                    console.log(data.Error)
                }
                else
                {
                    if (data.Products.length == 0)
                    {
                        $('#trendingMediaSwiper').addClass('d-none');
                    }
                    else
                    {
                        $scope.data.trendingMedia = data.Products;
                        $scope.$applyAsync(function ()
                        {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#trendingMediaSwiper .loading-gray-bars").addClass("d-none");
                            $('#trendingMediaSwiper .thumb').removeClass('d-none');
                            $('#trendingMediaSwiper .detailInfo').removeClass('d-none');
                            $("#trendingMediaSwiper .swiper-navigation").removeClass("d-none");
                            $("#trendingMediaSwiper .swiper-slide-view-more").addClass("d-block");
                            $scope.changeSwiperPagingHeight('#trendingMediaSwiper');
                            $scope.MediaSwiper.update();
                        });
                    }
                }
            });
        }

        $scope.changeSwiperPagingHeight = function ()
        {
            var imgheight = $(".thumb-img").css("height");
            var topheight = $(".swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
            imgheight = $("#staffPicksSwiper .swiper-slide").css("height");
            topheight = $("#staffPicksSwiper .swiperTitleJQ").css("height");
            $("#staffPicksSwiper .JQHeight").css('height', imgheight).css('top', topheight);
        };

        //$scope.showYT = function ()
        //{
        //    console.log($scope.YT);
        //    $scope.YTParsed = JSON.stringify($scope.YT, null, 2)
        //}
        

        angular.element(document).ready(function ()
        {
            $scope.getPlans();
            //some stuff here
            $scope.YTSwiper = new Swiper('#YTPlaylist', {
                slidesPerView: 1,
                spaceBetween: 20,
                slidesPerGroup: 1,
                /*loop: true,*/
                on: {
                    imagesReady: function ()
                    {
                        console.log("here");
                    }

                },
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                observer: true,
                observeParents: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    2000: {
                        slidesPerView: 6,
                        spaceBetween: 30,
                        slidesPerGroup: 6,
                    },
                    2400: {
                        slidesPerView: 8,
                        spaceBetween: 30,
                        slidesPerGroup: 8,
                    },
                    3000: {
                        slidesPerView: 10,
                        spaceBetween: 30,
                        slidesPerGroup: 10,
                    }
                }
            })

            $scope.MediaSwiper = new Swiper('#trendingMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 20,
                slidesPerGroup: 1,
                /*loop: true,*/
                on: {
                    imagesReady: function ()
                    {
                        console.log("here");
                    }

                },
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                observer: true,
                observeParents: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    2000: {
                        slidesPerView: 6,
                        spaceBetween: 30,
                        slidesPerGroup: 6,
                    },
                    2400: {
                        slidesPerView: 8,
                        spaceBetween: 30,
                        slidesPerGroup: 8,
                    },
                    3000: {
                        slidesPerView: 10,
                        spaceBetween: 30,
                        slidesPerGroup: 10,
                    },

                }
            })

            $scope.reviewSwiper = new Swiper('#reviewSwiper', {
                slidesPerView: 4,
                spaceBetween: 30,
                slidesPerGroup: 4,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                loop: true,
                lazy: true,
                observer: true,
                observeParents: true,
                /*loopAdditionalSlides: 3,*/
                /*loopedSlides: 6,*/
                /*loopFillGroupWithBlank: true,*/
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 1px
                    1: {
                        slidesPerView: 1,
                        spaceBetween: 50,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 650px
                    650: {
                        slidesPerView: 2,
                        spaceBetween: 50,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 3,
                        spaceBetween: 50,
                        slidesPerGroup: 3,
                    },
                }
            });

            dataService.getSetData("/component/HomePageYTPlaylist", { playlistId: "PLVb_FXR2YxxgJ68QvYaDFA0o2dPmjjtP8" })
                .then(response => JSON.parse(response))
                .then(data =>
                {
                    $scope.YT = data;
                    $scope.items = data.items;
                }).then( () => getData())
    

            

        });
    }
    app.controller('homeController', ['$rootScope', '$scope', 'constants', 'pricingService', 'dataService', homeController]);
}(angular.module("softouch")));;
(function (app) {
    var integratedMediaSearchController = function ($scope, $http, $q, $location, constants, dataService, ewMessagingService) {
        window.peekIntMediaSearch = $scope;

        $scope.pageData = {};
        $scope.pageData.filters = {};
        $scope.pageData.filterString;
        $scope.pageData.getMediaResults = {};
        $scope.pageData.selectedItem = null;
        $scope.pageData.media = [];
        $scope.pageData.totalItems = 0;
        $scope.pageData.pullingData = false;
        $scope.pageData.searchKeyword = '';
        $scope.pageData.canUseResetFilter = false;
        $scope.pageData.showSimilarTags = false;

        $scope.search = function (term) {
            console.log(term, $scope.pageData.filters.s.Items[0]);
            if ($scope.pageData.filters.s.Items[0] == undefined) {
                let searchItem = {
                    Id: '',
                    IsSelected: true,
                }
                $scope.pageData.filters.s.Items.push(searchItem);
            }
            if (term == null) {
                console.log('in if of search');
                $scope.pageData.filters.s.Items[0].Id = "";
                $scope.pageData.filters.s.Items[0].IsSelected = true;
            }
            else {
                console.log('in else of search', $scope.pageData.filters.s);
                $scope.pageData.filters.s.Items[0].Id = term;
                $scope.pageData.filters.s.Items[0].IsSelected = true;
            }
            
            console.log('after if and else', $scope.pageData.filters.s);
            $scope.getMedia();
        };

        function getFilterStringFromUrl() {
            var url = $location.absUrl();
            if (url.charAt(url.length - 1) == '/') {
                url = url.substring(0, url.length - 1)
            };

            var filtersPosition = url.indexOf("IntegratedMediaSearch");
            if (filtersPosition !== -1) {
                var filter = url.substring(filtersPosition + 21, url.length);
            }
            var queryStringPosition = filter.indexOf("?");
            if (queryStringPosition !== -1) {
                var filter = filter.substring(0, queryStringPosition);
            }
            return filter;
        }

        // This controls the browser history 
        /*$scope.pushStateAndChangeUrl = function (filterString) {
            *//*if (skipMediaRequest != "gotoPage")
                $('html, body').animate({ scrollTop: 0 }, 'fast');*//*

            //var filterString = $scope.getSelectedFilterString();
            var url = $location.absUrl();
            if (url.charAt(url.length - 1) == '/') {
                url = url.substring(0, url.length - 1)
            };

            var filtersPosition = url.indexOf("IntegratedMediaSearch");
            if (filtersPosition !== -1) {
                url = url.substring(0, filtersPosition + 21);
            }
            url = url + filterString;
            *//*var url = $location.absUrl();*//*
            console.log('history state', history.state, url);

            history.replaceState({ filter: filterString }, '');
        };*/

        function replaceState() {
            let state = {
                filter: $scope.pageData.filterString,
                imageSize: $scope.pageData.imageSize,
                outputAspectRatio: $scope.pageData.outputAspectRatio,
                searchKeyword: $scope.pageData.searchKeyword,
                premiumMediaResultsWidth: $scope.pageData.premiumMediaResultsWidth,
                premiumMediaPreviewWidth: $scope.pageData.premiumMediaPreviewWidth,
            };
            history.replaceState(state, '');
            console.log('replaceState', history.state);
        }

        // Makes a call for the data
        $scope.getMedia = function (append) {
            if (append == undefined)
                append = false;

            //$scope.setSelectedFiltersFromPageData();

            if (!append)
                $scope.pageData.filters.pg.Items[0].Id = 1;

            $scope.pageData.filterString = $scope.getSelectedFilterString();
            $scope.setSelectedFiltersFromPageData();
            replaceState();

            var data = { 'filter': $scope.pageData.filterString, 'getFileHash': true };

            if ($scope.lastPromise !== undefined) {
                $scope.lastPromise.abort();
            }

            //console.log('data before refreshView', data);
            $scope.lastPromise = dataService.getSetDataWithAbort("/component/refreshView", data)
                .then(function (data) {
                    if (data.Error) {
                        /*  *******************************************************************NEEEEED TO SET UP WHAT TO DO ON ERROR!!!!!!!*************************************************************************  */
                        /*$scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                        $('.thumb').removeClass('d-none');
                        $('#results').removeClass('disabled');
                        $scope.pageData.media = {};*/
                    } else {
                        processResponse(data, append);
                    }
                });

        };

        var processResponse = function (response, append) {
            $scope.pageData.getMediaResults = response;
            if (append) {
                $scope.pageData.media = $scope.pageData.media.concat(response.Products);
            }
            else {
                $scope.pageData.totalItems = response.ProductCount;
                $scope.pageData.media = response.Products;
                $scope.showPreview(response.Products[0]);
                if (document.querySelector('.media-thumbnail') != null)
                    $scope.highlightRecord(document.querySelector('.media-thumbnail'));
            }
            $scope.pageData.pullingData = false;

            // If no results, hide preview pane and stop execution
            if ($scope.pageData.media.length < 1) {
                $scope.pageData.media = false;
                return;
            }
        };

        var processResponseError = function (response) {
            $q.reject("http status: " + response.status + " : " + response.data);
        };

        $scope.getNextSet = function () {
            if ($scope.pageData.pullingData) {
                return;
            }

            $scope.pageData.pullingData = true;

            $scope.pageData.filters.pg.Items[0].Id++;

            $scope.getMedia(true)
        }

        function checkAspectRatio() {
            if ($scope.pageData.selectedItem) {
                detailItem = $scope.pageData.selectedItem.DetailItems.find(function (item) {
                    return item.DetailId === $scope.pageData.selectedItem.CartDetailId;
                });
                /*console.log('testing', $scope.pageData.outputAspectRatio, detailItem.Width / detailItem.Height);*/
                if ($scope.pageData.outputAspectRatio > (detailItem.Width / detailItem.Height)) {
                    if (!document.querySelector('.media-wrapper').classList.contains('wide-aspect')) {
                        document.querySelector('.media-wrapper').classList.add('wide-aspect');
                    }
                }
                else {
                    if (document.querySelector('.media-wrapper').classList.contains('wide-aspect')) {
                        document.querySelector('.media-wrapper').classList.remove('wide-aspect');
                    }
                }
            }
        }

        $scope.showPreview = function (item) {
            // If detailsCard is displayed, hide when switching records
            let detailsCard = document.getElementById("ewiDetailsCard");
            if (detailsCard.classList.contains("show")) {
                $scope.toggleDetailsCard();
            }

            $scope.pageData.selectedItem = item;
            var myIdx = $scope.pageData.media.findIndex(function (resultItem) {
                return resultItem.CartDetailId === item.CartDetailId;
            });
            // 0 based so add 1 to reflect the correct visual record
            myIdx++;

            checkAspectRatio();

            item ? id = item.CartDetailId : id = null;
            item ? hashes = item.MaxQualityFileHashes : hashes = "";

            /*mason start here*/
            var data = {
                ProductId: item.ProductId,
            };
            
            dataService.getSetData("/component/GetCategorizationDataForProduct", data)
                .then(function (data) {
                    if (data.Error) {
                        console.log(data.Error);
                    } else {
                        $scope.pageData.selectedItem.MediaStyles = [];
                        $scope.pageData.selectedItem.MediaTopics = [];
                        $scope.pageData.selectedItem.MediaSeasons = [];
                        data.MediaStyles.forEach(function (element) {
                            if (element.RowId != undefined && element.RowId < 2000) {
                                $scope.pageData.selectedItem.MediaStyles.push(element);
                            }
                        })
                        data.MediaTopics.forEach(function (element) {
                            if (element.RowId != undefined && element.RowId < 2000) {
                                $scope.pageData.selectedItem.MediaTopics.push(element);
                            }
                        })
                        data.MediaSeasons.forEach(function (element) {
                            if (element.RowId != undefined && element.RowId < 2000) {
                                $scope.pageData.selectedItem.MediaTopics.push(element);
                            }
                        })
                    }
                });

            ewMessagingService.recordChanged(id, myIdx, $scope.pageData.totalItems, constants[0].SoftwareMediaType.media, { hashes: hashes });
        }


        // ************** write this with vanilla javascript ******************
        $scope.highlightRecord = function (target) {
            $(".media-thumbnail-container").removeClass("selected");
            $(target.parentElement).addClass("selected");
            checkandscroll(target.parentElement);
        }

        function checkandscroll(checkElm) {
            console.log("checkandscroll", checkElm.getBoundingClientRect(), checkElm.offsetTop);
            if (checkElm.offsetTop < 100) {
                document.querySelector('.media-results').scrollTo(0, 0);
            }
            //element is lower than the view area
            if ((checkElm.getBoundingClientRect().top + checkElm.getBoundingClientRect().height) > document.querySelector('.media-results').getBoundingClientRect().height)
                document.querySelector('.media-results').scrollTo(0, (checkElm.offsetTop + checkElm.getBoundingClientRect().height - document.querySelector('.media-results').getBoundingClientRect().height))
            //element is higher the view area
            if (checkElm.getBoundingClientRect().top < 22) {
                document.querySelector('.media-results').scrollTo(0, checkElm.offsetTop - 22)
            }
        }

        function applyChangeItem(newItem, selectedItem) {
            //console.log(newItem, selectedItem, newItem.dataset.item !== selectedItem.dataset.item)
            if (newItem != null && newItem.classList.contains('media-thumbnail-container') && newItem.dataset.item !== selectedItem.dataset.item) {
                selectedItem.classList.remove('selected');
                newItem.classList.add('selected');
                $scope.showPreview(JSON.parse(newItem.dataset.item));
                checkandscroll(newItem);
                $scope.$apply();
            }
        }

        $scope.clearAllTags = function clearAllTags() {
            $scope.pageData.filters.g.Items = [];
            $scope.pageData.showSimilarTags = false;
            $scope.getMedia();
        }

        // Called each time a filter is selected or removed
        $scope.toggleFilterState = function (evt, filterItem, filter, parentItem, parentFilter) {
            console.log(evt, filterItem, filter, parentItem, parentFilter);
            //evt.parentElement.parentElement.scroll({ top: 0, left: 0, behavior: 'smooth'});
            //if filter item needs to be checked for log in
            //var skipMediaRequestNeedToLogin = false;

            /*if (filterItem !== undefined) {
                if (filterItem.CheckLogin === true && !userService.userData.loggedIn && !$("body").hasClass("integratedStore")) {
                    window.location.href = '/account/login';
                    return;
                }

                // Special actions to perform outside the normal filterItem behavior
                if (filterItem.specialAction !== undefined) {
                    switch (filterItem.specialAction) {
                        case "setHex":
                            $scope.colorPicker.color.hexString = filter.co.Item[0].Id;
                            break;
                        // The tag boxes call toggleState special case to clear color selection
                        case "clearColorSelection":
                            clearColorSwatch();
                            clearColorFilterAndResetColorPicker();
                            clearBlackAndWhiteFilterItems();
                            $scope.resetPaginationToPageOne();
                            $scope.pushStateAndGetData();
                            return;
                    }
                }
            }*/

            // Special handling for clearing the search with in filter group
            /*if (filter !== undefined) {
                if (filter.searchField !== undefined && filter.searchField !== null && filter.searchField !== "") {
                    filter.searchField = "";
                    filter.Items.forEach(function (filterItem) {
                        filterItem.isHidden = false;
                        $("#av" + filter.Key + filterItem.Id).html(filterItem.Text);
                    });

                    $scope.showMore(filter);
                }
            }*/

            // Normal filter processing
            if (filter) {
                
                if (filter.Key === 'co') {
                    clearBlackAndWhiteFilterItems();
                    clearColorSwatch();

                    if (evt !== undefined) {
                        // a color swatch was clicked
                        var swatchRgb = $('.' + evt.className).css('background-color');

                        // If rgbString equals the selected swatch
                        // And the rgbString is not the init color
                        // Then clear the colors
                        // Otherwise make the swatch active
                        if ($scope.colorPicker.color.rgbString === swatchRgb && $scope.colorPicker.color.rgbString !== $scope.initColor) {

                            clearColorFilterAndResetColorPicker();
                        }
                        else {
                            $scope.colorPicker.color.rgbString = swatchRgb;
                            $("." + evt.className).addClass("active");
                            setPageDataFilterColorItems();
                        }
                    }
                    else {
                        // color picker changed value
                        setPageDataFilterColorItems();
                    }

                    $scope.updateHexValue();
                }
                else {
                    if (filter.IsMultiSelect) {
                        filterItem.IsSelected = !filterItem.IsSelected;
                        // set label for filter
                        if (parentFilter) {
                            if (parentFilter.filterItemsSelected === undefined)
                                parentFilter.filterItemsSelected = [];
                            if (filterItem.IsSelected && parentItem !== undefined && parentItem.IsSelected === false) {
                                parentItem.IsSelected = true;
                                parentFilter.filterItemsSelected.push(parentItem.Text);
                            }
                            if (filterItem.IsSelected) {
                                parentFilter.filterItemsSelected.push(filterItem.Text);
                            }
                            if (!filterItem.IsSelected) 
                                parentFilter.filterItemsSelected.splice(parentFilter.filterItemsSelected.indexOf(filterItem.Text), 1)
                        }
                        else {
                            if (filter.filterItemsSelected === undefined)
                                filter.filterItemsSelected = [];
                            if (filterItem.IsSelected)
                                filter.filterItemsSelected.push(filterItem.Text);
                            if (!filterItem.IsSelected) {
                                filter.filterItemsSelected.splice(filter.filterItemsSelected.indexOf(filterItem.Text), 1)
                                if (filterItem.Subfilter.Key !== null) {
                                    filterItem.Subfilter.Items.forEach(function (item) {
                                        item.IsSelected = false;
                                        var indexOfFilter = filter.filterItemsSelected.indexOf(item.Text);
                                        if (indexOfFilter >= 0)
                                            filter.filterItemsSelected.splice(indexOfFilter, 1)
                                    });
                                }
                            }
                        }
                        //console.log(filter.filterItemsSelected);
                    }
                    else {
                        if (!filterItem.IsSelected) {
                            filter.Items.forEach(function (item) {
                                item.IsSelected = false;

                                //removeItemFromFiltersToHide(item);
                            });
                            filter.filterItemsSelected[0] = filterItem.Text;
                            filterItem.IsSelected = true;
                            closeDropdown();
                            //console.log('filter.filterItemsSelected', filter.filterItemsSelected);
                        }
                    }
                }
            }
            else {
                // The tag boxes do not pass in a filter, just a filter item
                filterItem.IsSelected = !filterItem.IsSelected;
            }
            /*if (filterItem !== undefined) {
                if (filterItem.IsSelected) {
                    if (filterItem.FilterKeysToHide.length > 0)
                        addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                    applyFilterItemDefaults(filterItem, filter);
                }
                else {
                    //if (filterItem.FilterKeysToHide.length > 0)
                        //removeItemFromFiltersToHide(filterItem);
                }
            }*/

            $scope.getMedia();
        };

        $scope.setFilterValues = function (urlFilterString) {
            // Now set the selected filter from the cached string values
            var elements = urlFilterString
                .replace(new RegExp("^\\/"), "") // remove leading forward slash
                .replace(new RegExp("\\/$"), "") // remove trailing forward slash
                .split("/");

            // keep track of the category so all media can be checked if nothing is selected
            var categorySelected = false;

            for (var i = 0; i < elements.length; i += 2) {
                var urlFilterKey = elements[i];
                // Could be singular or multiple seperated with a -
                var urlFilterItemValue = elements[i + 1];

                var filter = findFilter(urlFilterKey);

                if (filter === null)
                    continue;

                // Color falls out normal processing so check here and process if the key matches
                if (urlFilterKey === "co") {
                    if (urlFilterItemValue.indexOf("-") === -1)
                        continue;

                    var ids = urlFilterItemValue.split("-");

                    if (ids.length !== 3)
                        continue;

                    $scope.pageData.filters[urlFilterKey].Items = [
                        {
                            Id: ids[0],
                            IsSelected: true
                        },
                        {
                            Id: ids[1],
                            IsSelected: true
                        },
                        {
                            Id: ids[2],
                            IsSelected: true
                        }
                    ];


                    $scope.colorPicker.color.rgb = { r: ids[0], g: ids[1], b: ids[2] };
                    $scope.updateHexValue();

                    continue;
                }

                if (urlFilterKey === "g") {
                    $scope.pageData.showSimilarTags = true;
                }

                if (urlFilterKey === "b") {
                    categorySelected = true;
                    $scope.pageData.filters["b"].Items[0].IsSelected = false;
                    if ($scope.pageData.filters["b"].filterItemsSelected != undefined)
                        $scope.pageData.filters["b"].filterItemsSelected.pop();
                }

                switch (filter.SelectionBehavior) {
                    case "assignment":
                        filter.Items =
                            [{ Id: decodeURIComponent(urlFilterItemValue), IsSelected: true }];
                        break;

                    case "list":
                        var ids;

                        if (urlFilterItemValue.indexOf("-") !== -1) {
                            ids = urlFilterItemValue.split("-");
                        }
                        else {
                            ids = [urlFilterItemValue];
                        }

                        ids.forEach(function (urlId) {
                            var itemSet = false;

                            filter.Items.forEach(function (filterItem) {
                                if (filterItem.Id === urlId) {
                                    filterItem.IsSelected = true;
                                    itemSet = true;

                                    //add label
                                    if (filter.filterItemsSelected === undefined)
                                        filter.filterItemsSelected = [];
                                    if (filterItem.IsSelected) {
                                        filter.IsSelected = true;
                                        filter.filterItemsSelected.push(filterItem.Text);
                                    }

                                    /*if (filterItem.FilterKeysToHide.length > 0)
                                        addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);*/

                                    //applyFilterItemDefaults(filterItem);
                                }
                            });

                            // If a match was not found need to add the element to the list
                            // This is from the more like tags
                            if (!itemSet) {
                                filter.Items.push({ Id: urlId, IsSelected: true });
                            }
                        });
                        break;

                    default: //bit
                        filter.Items.forEach(function (filterItem) {
                            if ((filterItem.Id & urlFilterItemValue) > 0) {
                                filterItem.IsSelected = true;

                                if (filterItem.FilterKeysToHide.length > 0)
                                    addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                                //applyFilterItemDefaults(filterItem);
                            }
                        });
                }
            }

            // Push the token to root scope, so the download will work
            // don't need this in integrated store
            /*if ($scope.pageData.filters.gct.Items.length > 0) {
                $rootScope.guestToken = $scope.pageData.filters.gct.Items[0].Id;
            }*/

            // Check all media if no category is selected.
            if (!categorySelected) {
                $scope.pageData.filters["b"].Items[0].IsSelected = true;
                $scope.pageData.filters["b"].filterItemsSelected.push(filterItem.Text);
            }
        };

        function findFilter(keyToFind) {
            var filterToReturn = null;

            for (var key in $scope.pageData.filters) {
                if (key === keyToFind)
                    return $scope.pageData.filters[key];

                $scope.pageData.filters[key].Items.forEach(function (filterItem) {
                    if (filterItem.Subfilter !== undefined && filterItem.Subfilter !== null && filterItem.Subfilter.Key === keyToFind)
                        filterToReturn = filterItem.Subfilter;
                });

                if (filterToReturn !== null)
                    return filterToReturn;
            }

            return null;
        }

        function clearAllFilters() {
            $scope.pageData.filters.g.Items = [];
            $scope.pageData.showSimilarTags = false;
            for (var key in $scope.pageData.filters) {
                // skip search
                if (key === "s") {
                    continue;
                }
                //commented out because not color filter right now
                /*else if (key === "co") {
                    clearColorFilterAndResetColorPicker();
                    continue;
                }*/
                $scope.pageData.filters[key].filterItemsSelected = [];
                //console.log(key, $scope.pageData.filters[key]);
                $scope.pageData.filters[key].Items.forEach(function (filterItem) {
                    filterItem.IsSelected = false;
                });
            }

            // commented out no color filter on int search right now.
            /*$scope.clearHexValue();*/
        }

        $scope.resetFilters = function (pushState) {
            clearAllFilters();
            applyFiltersDefaults();
            $scope.getMedia();
        };


        $scope.setSelectedFiltersFromPageData = function () {
            $scope.pageData.selectedFilters = [];

            /*if ($scope.pageData.filters.co.Items.length === 3 || $scope.pageData.filters.bw.Items.length === 1)
                $scope.pageData.selectedFilters.push({ Text: "Color", specialAction: "clearColorSelection" });*/
            if ($scope.pageData.filters.g.Items.length > 0)
                $scope.pageData.showSimilarTags = true;

            for (var key in $scope.pageData.filters) {
                setSelectedFilters($scope.pageData.filters[key]);
            }
        };

        function setSelectedFilters(filter) {
            //console.log(filter.Key);
            if (filter.Key != "pr" && filter.Key != "sty")
                return;

            filter.Items.forEach(function (item) {
                if (item.IsSelected) {
                    $scope.pageData.selectedFilters.push(item);
                }
                if (item.Subfilter !== undefined && item.Subfilter.Key !== null)
                    setSelectedFilters(item.Subfilter);
            });
        }

        //set defaults of if no filter string provided.
        var applyFiltersDefaults = function (filterItem, filter) {
            /*Sets only Premium*/
            $scope.pageData.filters.prm.Items[0].IsSelected = true;

            /*Sets Category to be preselected as first option(All Media)*/
            $scope.pageData.filters.b.Items[0].IsSelected = true;
            $scope.pageData.filters.b.filterItemsSelected = [];
            $scope.pageData.filters.b.filterItemsSelected.push($scope.pageData.filters.b.Items[0].Text);

            /*Sets Collections to be excluded*/
            let collectionItem = {
                Id: constants[0].ProductType.Collection,
                IsSelected: true,
            }
            $scope.pageData.filters.x.Items.push(collectionItem);

            /*Sets PG to pg 1*/
            if ($scope.pageData.filters.pg.Items.length == 0) {
                let pagingItem = {
                    Id: 1,
                    IsSelected: true,
                }
                $scope.pageData.filters.pg.Items.push(pagingItem);
            }
            else {
                $scope.pageData.filters.pg.Items[0].IsSelected = true;
            }
        }

        function applySearchFromPageLoad() {
            //console.log($scope.pageData.searchKeyword);
            let searchItem = {
                Id: $scope.pageData.searchKeyword,
                IsSelected: true,
            }
            $scope.pageData.filters.s.Items.push(searchItem);
        }

        $scope.getSelectedFilterString = function () {

            var selectedFiltersString = "";
            var shownFiltersSelected = [];

            for (var key in $scope.pageData.filters) {
                var filter = $scope.pageData.filters[key];
                selectedFiltersString += loopfilterItems(filter);
                if (filter.filterItemsSelected && filter.filterItemsSelected.length > 0 && ((filter.Key == 'b' && filter.filterItemsSelected != 'All Media') || filter.Key == 'mt' || filter.Key == 'sec' || filter.Key == 't')) {
                    //console.log(filter.filterItemsSelected, filter);
                    shownFiltersSelected.push(filter.filterItemsSelected);
                }
                /*if ((filter.Key == 'b') || filter.Key == 'mt' || filter.Key == 'sec' || filter.Key == 't') {
                    console.log('********************************* shown filter selected ***********************************************', filterItem, filter);
                    shownFiltersSelected.push(filterItem);
                }*/
            }

            //console.log('shownFilstersSelected', shownFiltersSelected.length);
            if (shownFiltersSelected.length > 0) {
                $scope.pageData.canUseResetFilter = true;
            }
            else if (shownFiltersSelected.length == 0) {
                $scope.pageData.canUseResetFilter = false;
            }
            //console.log('canUseResetFilter', $scope.pageData.canUseResetFilter);

            return selectedFiltersString;
        };

        function loopfilterItems(filter) {
            var filterSegment = "";
            var subSegments = [];

            filter.Items.forEach(function (filterItem) {
                if (filterItem.IsSelected) {
                    if (filter.SelectionBehavior === "list") {
                        if (filterSegment.length > 0) {
                            filterSegment += "-" + filterItem.Id;
                        }
                        else {
                            filterSegment = String(filterItem.Id);
                        }
                    }
                    else {
                        if (filterSegment.length > 0) {
                            filterSegment = String(parseInt(filterSegment) + parseInt(filterItem.Id));
                        }
                        else {
                            filterSegment = String(filterItem.Id);
                        }
                    }

                    if (filterItem.Subfilter !== undefined && filterItem.Subfilter.Key !== null) {
                        var subSegment = loopfilterItems(filterItem.Subfilter);
                        if (subSegment.length > 0) {
                            subSegments.push(subSegment);
                        }
                    }
                }
            });

            

            var returnString = "";

            if (filterSegment.length > 0) {
                returnString = "/" + filter.Key + "/" + filterSegment;
            }

            if (subSegments.length > 0) {
                subSegments.forEach(function (item) { returnString += item; });
            }

            return returnString;
        }

        // Hides filter group items that do not match the search term
        $scope.searchFilterGroup = function (filter) {
            /*if (filter.NumberToDisplay !== filter.Items.length)
                $scope.showMore(filter);*/

            //console.log('searchFilterGroup', filter);

            var i = 0;
            filter.Items.forEach(function (filterItem) {
                var indexOfSearchTerm = filterItem.Text.toLowerCase().indexOf(filter.searchField.toLowerCase());

                filterItem.isHidden = indexOfSearchTerm === -1;

                if (!filterItem.isHidden) {
                    var preIndexCharacters = "";

                    if (indexOfSearchTerm > 0) {
                        preIndexCharacters = filterItem.Text.substring(0, indexOfSearchTerm);
                    }

                    var indexCharacters = filterItem.Text.substring(indexOfSearchTerm, indexOfSearchTerm + filter.searchField.length);
                    var postIndexCharacters = filterItem.Text.substring(indexOfSearchTerm + filter.searchField.length);

                    $("#sel" + filter.Key + filterItem.Id).html(preIndexCharacters + "<b>" + indexCharacters + "</b>" + postIndexCharacters);
                    $("#av" + filter.Key + filterItem.Id).html(preIndexCharacters + "<b>" + indexCharacters + "</b>" + postIndexCharacters);
                }

                // Select first result on Enter press
                if (event !== undefined && event.key === 'Enter' && filterItem.isHidden === false && i === 0) {
                    $scope.toggleFilterState(undefined, filterItem, filter);
                    i++;
                }
            });
        };

        $scope.nextItem = function nextItem() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            applyChangeItem(selectedItem.nextElementSibling, selectedItem);
        }

        $scope.prevItem = function prevItem() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            applyChangeItem(selectedItem.previousElementSibling, selectedItem);
        }

        $scope.moveUp = function moveUp() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            let loopnumber = Math.round(document.querySelector('.media-results').clientWidth / selectedItem.getBoundingClientRect().width);
            let loopingItem = selectedItem;
            for (i = 0; i < loopnumber; i++) {
                if (loopingItem.previousElementSibling !== null)
                    loopingItem = loopingItem.previousElementSibling;
            }
            applyChangeItem(loopingItem, selectedItem);
        }

        $scope.moveDown = function moveDown() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            let loopnumber = Math.round(document.querySelector('.media-results').clientWidth / selectedItem.getBoundingClientRect().width);
            let loopingItem = selectedItem;
            for (i = 0; i < loopnumber; i++) {
                if (loopingItem.nextElementSibling !== null)
                    loopingItem = loopingItem.nextElementSibling;
            }
            applyChangeItem(loopingItem, selectedItem);
        }

        $scope.pageUp = function pageUp() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            let rowNumber = Math.round(document.querySelector('.media-results').clientWidth / selectedItem.getBoundingClientRect().width);
            let heightNumber = Math.round(document.querySelector('.media-results').clientHeight / selectedItem.getBoundingClientRect().height);
            let loopnumber = rowNumber * heightNumber;
            let loopingItem = selectedItem;
            for (i = 0; i < loopnumber; i++) {
                if (loopingItem.previousElementSibling !== null && loopingItem.previousElementSibling.classList.contains('media-thumbnail-container'))
                    loopingItem = loopingItem.previousElementSibling;
            }
            applyChangeItem(loopingItem, selectedItem);
        }

        $scope.pageDown = function pageDown() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            let rowNumber = Math.round(document.querySelector('.media-results').clientWidth / selectedItem.getBoundingClientRect().width);
            let heightNumber = Math.round(document.querySelector('.media-results').clientHeight / selectedItem.getBoundingClientRect().height);
            let loopnumber = rowNumber * heightNumber;
            let loopingItem = selectedItem;
            for (i = 0; i < loopnumber; i++) {
                if (loopingItem.nextElementSibling !== null && loopingItem.nextElementSibling.classList.contains('media-thumbnail-container'))
                    loopingItem = loopingItem.nextElementSibling;
            }
            applyChangeItem(loopingItem, selectedItem);
        }

        $scope.selectFirstItem = function selectFirstItem() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            let firstItem = document.querySelector('.media-thumbnail-container');
            applyChangeItem(firstItem, selectedItem);
        }

        $scope.selectLastItem = function selectLastItem() {
            let selectedItem = document.querySelector('.media-thumbnail-container.selected');
            let allItems = document.getElementsByClassName('media-thumbnail-container');
            let lastItem = allItems[allItems.length - 1];
            //console.log(lastItem, allItems);
            applyChangeItem(lastItem, selectedItem);
        }

        //adds selecting with arrow keys anywhere on the page.
        window.addEventListener("keydown", function (e) {
            //console.log(e);
            if (["ArrowUp", "ArrowDown", "ArrowRight", "ArrowLeft", "PageUp", "PageDown", "Home", "End"].indexOf(e.code) > -1) {
                e.preventDefault();
                let selectedItem = document.querySelector('.media-thumbnail-container.selected');
                if (e.code === "ArrowRight") {
                    $scope.nextItem();
                }
                else if (e.code === "ArrowLeft") {
                    $scope.prevItem();
                }
                else if (e.code === "ArrowUp") {
                    $scope.moveUp();
                }
                else if (e.code === "ArrowDown") {
                    $scope.moveDown();
                }
                else if (e.code === "PageUp") {
                    $scope.pageUp();
                }
                else if (e.code === "PageDown") {
                    $scope.pageDown();
                }
                else if (e.code === "Home") {
                    $scope.selectFirstItem();
                }
                else if (e.code === "End") {
                    $scope.selectLastItem();
                }
            }
        }, false);

        //Play and stop preview on hover.
        //adds the empty function to the element.
        HTMLElement.prototype.empty = function () {
            var that = this;
            while (that.hasChildNodes()) {
                that.removeChild(that.lastChild);
            }
        };

        $scope.playThis = function (e, product) {
            if (product.ProductId > 0) {
                var myIdx = $scope.pageData.media.findIndex(function (item) {
                    return item.ProductId === product.ProductId;
                });
                // 0 based so add 1 to reflect the correct visual record
                myIdx++;

                ewMessagingService.mouseOver(product.CartDetailId, myIdx, constants[0].SoftwareMediaType.media, { hashes: product.MaxQualityFileHashes });
            }

            if (!this.item.IsImage && this.item.TypeText != "Collections") {
                canPlay = true;
                let vp = e.target.getElementsByTagName('video')[0];
                if (vp) {
                    let loadingDiv = e.target.querySelector('.preview-loader');
                    loadingDiv.innerHTML = "<label>●</label><label>●</label><label>●</label><label>●</label><label>●</label><label>●</label>"
                    if (!(vp.currentTime > 0 && !vp.paused && !vp.ended && vp.readyState > 2)) {
                        //console.log('readyState', vp.readyState, 'currentTime', vp.currentTime, 'played', vp.played);
                        vp.play();
                        vp.onplaying = function (event) {
                            vp.classList.remove('jq-video-hide');
                            loadingDiv.empty();
                        };
                    }
                }
            }
        };

        $scope.stopThis = function (e) {
            //cmp.canPlay = false;
            if (!this.item.IsImage && this.item.TypeText != "Collections") {
                let vp = e.target.getElementsByTagName('video')[0];
                //let img = e.target.getElementsByTagName('img')[0];
                if (vp) {
                    vp.classList.add('jq-video-hide');
                    if (vp.readyState == 4) {
                        vp.pause();
                        vp.currentTime = 0;
                    };
                    if (vp.readyState != 4) {
                        vp.onplaying = function (event) {
                            vp.pause();
                        };
                    };
                    e.target.querySelector('.preview-loader').empty();
                }
            };
        };

        $scope.changeThumbSize = function (height, outputaspectratio) {
            //console.log(height, outputaspectratio);
            $scope.pageData.outputAspectRatio = outputaspectratio;
            let newWidth = height * (16 / 9) + 22; // 22 is padding of .media-thumbnail combined with padding and border of .media-thumbnail-img
            let newGrid = newWidth + 20; // 20 is margin of .media-thumbnail
            newWidth = newWidth.toFixed(2);
            newGrid = newGrid.toFixed(2);
            $scope.stylesheet.insertRule(".media-thumbnail { width: " + newWidth + "px !important;}", 0);
            $scope.stylesheet.insertRule(".media-results-grid { grid-template-columns: repeat(auto-fill, minmax(" + newGrid + "px, 1fr)) !important;}", 1);

            if (newWidth <= 155 && !document.querySelector('.media-results').classList.contains('sm-thumbnail')) {
                document.querySelector('.media-results').classList.remove('md-thumbnail');
                document.querySelector('.media-results').classList.add('sm-thumbnail');
            }
            else if (newWidth > 155 && newWidth <= 200 && !document.querySelector('.media-results').classList.contains('md-thumbnail')) {
                document.querySelector('.media-results').classList.remove('sm-thumbnail');
                document.querySelector('.media-results').classList.add('md-thumbnail');
            }
            else if (newWidth > 200 && (document.querySelector('.media-results').classList.contains('sm-thumbnail') || document.querySelector('.media-results').classList.contains('md-thumbnail'))) {
                document.querySelector('.media-results').classList.remove('sm-thumbnail');
                document.querySelector('.media-results').classList.remove('md-thumbnail');
            }
            //console.log("Starting with " + $scope.stylesheet.cssRules.length + " rules");
            //console.log($scope.stylesheet.cssRules);

            while ($scope.stylesheet.cssRules.length >= 3) {
                $scope.stylesheet.deleteRule($scope.stylesheet.cssRules.length - 1);
                //console.log("Length after deleting a rule: " + $scope.stylesheet.cssRules.length);
                //console.log($scope.stylesheet.cssRules);
            }

            /*$scope.stylesheet.deleteRule(3);
            $scope.stylesheet.deleteRule(2);*/
            document.querySelector('.media-wrapper').style.aspectRatio = outputaspectratio;
            checkAspectRatio();

            $scope.pageData.imageSize = height;
            $scope.pageData.outputAspectRatio = outputaspectratio;
            replaceState();
        }
        
        $scope.status = function (id, status) {
            /*
            status = 0; I don't have it.
            status = 1; I am downloading it.
            status = 2; I have it.
            */
            //console.log("Status function called. id:" + id + " status:" + status);
            if (status == 0) {
                changeToDontOwn(id);
            }
            else if (status == 1) {
                changeToLoading(id);
            }
            else if (status == 2) {
                changeToInSoftware(id);
            }
        }

        function changeToDontOwn(id) {
            //console.log('change to dont own', id)
            let element = document.getElementById(id);
            let downloadButton = element.querySelector('.icon-im-download-button');
            let loader = element.querySelector('.loading-svg');
            let own = element.querySelector('.JQ-item-in-software');
            if (own.classList.contains('show')) {
                own.classList.remove('show');
            }
            if (loader.classList.contains('show')) {
                loader.classList.remove('show');
            }
            if (downloadButton.classList.contains('d-none')) {
                downloadButton.classList.remove('d-none');
            }
            if ($scope.pageData.selectedItem.CartDetailId == id) {
                //console.log('selected item == status item');
                if (document.getElementById('JQ-preview-download').classList.contains('d-none')) {
                    document.getElementById('JQ-preview-download').classList.remove('d-none');
                }
                if (document.getElementById('JQ-preview-loading').classList.contains('show')) {
                    document.getElementById('JQ-preview-loading').classList.remove('show');
                }
                if (document.getElementById('JQ-preview-in-software').classList.contains('show')) {
                    document.getElementById('JQ-preview-in-software').classList.remove('show');
                }
            }
        }

        function changeToLoading(id) {
            //console.log('change to loading', id)
            let element = document.getElementById(id);
            let downloadButton = element.querySelector('.icon-im-download-button');
            let loader = element.querySelector('.loading-svg');
            let own = element.querySelector('.JQ-item-in-software');
            if (own.classList.contains('show')) {
                own.classList.remove('show');
            }
            if (!loader.classList.contains('show')) {
                loader.classList.add('show');
            }
            if (!downloadButton.classList.contains('d-none')) {
                downloadButton.classList.add('d-none');
            }
            if ($scope.pageData.selectedItem.CartDetailId == id) {
                //console.log('selected item == status item');
                if (document.getElementById('JQ-preview-in-software').classList.contains('show')) {
                    document.getElementById('JQ-preview-in-software').classList.remove('show');
                }
                if (!document.getElementById('JQ-preview-loading').classList.contains('show')) {
                    document.getElementById('JQ-preview-loading').classList.add('show');
                }
                if (!document.getElementById('JQ-preview-download').classList.contains('d-none')) {
                    document.getElementById('JQ-preview-download').classList.add('d-none');
                }
            }
        }

        function changeToInSoftware(id) {
            //console.log('change to InSoftware', id)
            let element = document.getElementById(id);
            let downloadButton = element.querySelector('.icon-im-download-button');
            let loader = element.querySelector('.loading-svg');
            let own = element.querySelector('.JQ-item-in-software');
            if (!own.classList.contains('show')) {
                own.classList.add('show');
            }
            if (loader.classList.contains('show')) {
                loader.classList.remove('show');
            }
            if (!downloadButton.classList.contains('d-none')) {
                downloadButton.classList.add('d-none');
            }
            if ($scope.pageData.selectedItem.CartDetailId == id) {
                console.log('selected item == status item');
                if (!document.getElementById('JQ-preview-in-software').classList.contains('show')) {
                    document.getElementById('JQ-preview-in-software').classList.add('show');
                }
                if (document.getElementById('JQ-preview-loading').classList.contains('show')) {
                    document.getElementById('JQ-preview-loading').classList.remove('show');
                }
                if (!document.getElementById('JQ-preview-download').classList.contains('d-none')) {
                    document.getElementById('JQ-preview-download').classList.add('d-none');
                }
            }
        }

        $scope.download = function (id, action) {
            var product = $scope.pageData.media.find(function (item) {
                return item.CartDetailId == id;
            });
            //console.log("***************** Javascript download ******************* "+id, product)
            if (product.IsDownloadable) {
                ewMessagingService.mediaDownload(product, action);
            }
            else if (!product.IsDownloadable) {
                $scope.openUpgradeWindow();
            }
        }

        $scope.addToFilter = function addToFilter(filter,id) {
            //console.log(filter, id, $scope.pageData.filterString, $scope.pageData.filterString.indexOf('filter'));
            for (var i = 0; i < filter.Items.length; i++) {
                if (filter.Items[i].Id == id) {
                    //console.log('***************filter item found!!!', filter.Items[i]);
                    if (filter.Items[i].IsSelected != true) {
                        $scope.toggleFilterState(null, filter.Items[i], filter);
                    }
                }
            }
            //filter.Items
            //$scope.setFilterValues($scope.pageData.filterString);
        };

        //$scope.viewMore = async function () {
        //    //const response = await fetch("/media/morelike/" + $scope.pageData.selectedItem.CartDetailId);
        //    //console.log("/media/morelike/" + $scope.pageData.selectedItem.ProductId + "?noredirect=true")
        //    const response = await fetch("/media/morelike/" + $scope.pageData.selectedItem.ProductId + "?noredirect=true");
        //    const data = await response.text();
        //    //console.log(data);
        //    clearAllFilters();
        //    applyFiltersDefaults();
        //    $scope.setFilterValues(data);
        //    $scope.getMedia();
        //    //console.log($scope.pageData.filters)
        //    //window.location.href = "/media/morelike/" + cmp.product.ProductId;
        //};

        $scope.viewMore = function () {
            $http({
                method: "get",
                url: "/media/morelike/" + $scope.pageData.selectedItem.ProductId + "?noredirect=true"
            })
                .then(function (response) {
                    clearAllFilters();
                    applyFiltersDefaults();
                    $scope.setFilterValues(response.data);
                    $scope.getMedia();
                });
        }

        //Gets next page of results as scroll
        document.querySelector('.media-results').addEventListener('scroll', function () {
            if (Math.abs(this.scrollHeight - this.clientHeight - this.scrollTop) < 500) {
                $scope.getNextSet();
            }
        });

        //checks if you clicked inside element 
        function clickInsideElement(e, className) {
            var el = e.srcElement || e.target;
            if (el === undefined)
                el = e
            if (el.classList.contains(className)) {
                return el;
            } else {
                while (el = el.parentNode) {
                    if (el.classList && el.classList.contains(className)) {
                        return el;
                    }
                }
            }
            return false;
        }

        function closeDropdown() {
            let visableFilter = document.querySelector('.media-results .visible');
            if (visableFilter) {
                let dropdown = visableFilter.querySelector('.scrollable');
                if (dropdown)
                    dropdown.scroll(0, 0);
                visableFilter.classList.remove('visible');
                document.removeEventListener("click", checkClickForDropdown);
                document.removeEventListener("contextmenu", checkClickForDropdown);
            }
            $scope.pageData.filters.t.searchField = '';
            $scope.searchFilterGroup($scope.pageData.filters.t);
        }

        function checkClickForDropdown() {
            //console.log('checkclickfordropdown')
            if (clickInsideElement(event, 'JQ-dropdown') === false) {
                closeDropdown();
            }
        }

        function loseFocus() {
            document.body.classList.add('lose-focus');
            closeDropdown();
        }

        function gainFocus() {
            document.body.classList.remove('lose-focus');
            //console.log('gain focus')
        }

        $scope.viewInLibrary = function (item) {
            //console.log('viewInLibrary from angular controller', item);

            item ? id = item.CartDetailId : id = null;
            item ? hashes = item.MaxQualityFileHashes : hashes = "";

            ewMessagingService.viewInLibrary(id, constants[0].SoftwareMediaType.media, { hashes: hashes });
        }

        $scope.toggleDetailsCard = function () {
            let detailsCard = document.getElementById("ewiDetailsCard");
            let preview = document.getElementById("previewWrapper");

            detailsCard.classList.toggle("show");
            preview.classList.toggle("show");
        }

        $scope.openUpgradeWindow = function openUpgradeWindow() {
            var title = 'Premium Subscription';
            var name = 'Premium Subscription';
            var url = $scope.pageData.host + '/purchasepremiumsoftware';
            
            ewMessagingService.openBrowserModal(title, name, url)
        }

        function initResize() {
            window.addEventListener('mouseup', resizeCompleted);
        }

        function resizeCompleted() {
            const previewPane = document.querySelector('.media-preview');
            const resultsPane = document.querySelector('.media-results');
            const previewSize = previewPane.style.width;
            const resultsSize = resultsPane.style.width;
            //console.log(previewSize, resultsSize);
            ewMessagingService.updateVariable('sdpu_premiumMediaPreviewWidth', previewSize);
            ewMessagingService.updateVariable('sdpu_premiumMediaResultsWidth', resultsSize);

            $scope.pageData.premiumMediaPreviewWidth = previewSize;
            $scope.pageData.premiumMediaResultsWidth = resultsSize;
            replaceState();

            window.removeEventListener('mouseup', resizeCompleted);
        }

        angular.element(document).ready(function () {
            //console.log('history.state', history.state);
            if ($scope.pageData.imageSize === undefined && history.state != null) {
                $scope.pageData.filterString = history.state.filter;
                $scope.pageData.imageSize = history.state.imageSize;
                $scope.pageData.outputAspectRatio = history.state.outputAspectRatio;
                $scope.pageData.searchKeyword = history.state.searchKeyword;
                $scope.pageData.premiumMediaResultsWidth = history.state.premiumMediaResultsWidth;
                $scope.pageData.premiumMediaPreviewWidth = history.state.premiumMediaPreviewWidth;
                $scope.$apply();
            }

            const previewPane = document.querySelector('.media-preview');
            if (!previewPane.classList.contains("preview-small") && previewPane.offsetWidth < 460) {
                previewPane.classList.add("preview-small");
            }

            ewMessagingService.initFunction(constants[0].SoftwareFunctions.search, 'angular.element("#int_media_controller").scope().search("' + constants[0].SoftwareVariables.search + '")');
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.next, 'angular.element("#int_media_controller").scope().moveDown()');
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.prev, 'angular.element("#int_media_controller").scope().moveUp()');
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.nextPage, 'angular.element("#int_media_controller").scope().pageDown()');
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.prevPage, 'angular.element("#int_media_controller").scope().pageUp()');
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.setSize, 'angular.element("#int_media_controller").scope().changeThumbSize( "sdpb_imagesize", "sdpb_outputaspectratio")');
            ewMessagingService.initFunction(constants[0].SoftwareFunctions.status, 'angular.element("#int_media_controller").scope().status("' + constants[0].SoftwareVariables.id + '",' + '"' + constants[0].SoftwareVariables.avlStatus + '")');
            ewMessagingService.initImport(constants[0].SoftwareFunctions.importMedia, "angular.element('#int_media_controller').scope().download");
            ewMessagingService.initStyleFunctions();

            //right click sends message to software
            window.oncontextmenu = function (e) {
                e.preventDefault();
                
                let resultsWindow = clickInsideElement(e, "media-results");
                let itemClickedOn = clickInsideElement(e, "media-thumbnail");
                if (resultsWindow) {
                    if (itemClickedOn) {
                        $scope.highlightRecord(itemClickedOn);
                        $scope.showPreview(JSON.parse(itemClickedOn.parentElement.dataset.item));
                        $scope.$apply();
                    } else {
                        itemClickedOn = null;
                    }
                    ewMessagingService.rightClick(e.screenX, e.screenY);
                }
            }

            //adds dropdown functionallity to filter-dropdwon/anchor class
            var dropdowns = document.getElementsByClassName('JQ-dropdown');
            for (var i = 0; i < dropdowns.length; i++) {
                dropdowns[i].getElementsByClassName('anchor')[0].onclick = function (evt) {
                    if (this.parentElement.classList.contains('visible')) {
                        closeDropdown();
                        $scope.$apply();
                    }
                    else {
                        let openDropdown = document.querySelector('.media-results .visible');
                        if (openDropdown != null)
                            openDropdown.classList.remove('visible');
                        this.parentElement.classList.add('visible');
                        document.addEventListener("click", checkClickForDropdown);
                        document.addEventListener("contextmenu", checkClickForDropdown);
                    }
                }
            }

            //listener for focus in window
            window.addEventListener('blur', loseFocus);
            window.addEventListener('focus', gainFocus);
            if (!document.hasFocus()) {
                loseFocus();
            }
            if (document.hasFocus()) {
                gainFocus();
            }

            //listener for sending preview window size
            document.querySelector('.resize-handle').addEventListener('mousedown', initResize);
            //Init the first media request based on if there is a filter string in url and if there is a search keyword provided.
           /* console.log('searchFromServer', $scope.pageData.filters.s.Items[0])*/
            applySearchFromPageLoad();
            /*var filterFromUrl = getFilterStringFromUrl();
            console.log('pagedata.filtersting', $scope.pageData.filterString);*/
            if ($scope.pageData.filterString != undefined) {
                $scope.setFilterValues($scope.pageData.filterString);
            }
            if ($scope.pageData.filterString == undefined) {
                applyFiltersDefaults();
            }
            $scope.getMedia();

            //create and add custom stylesheet that can be edited.
            var sheet = document.createElement('style')
            sheet.innerHTML = ".media-thumbnail { width: 220px !important;}";
            document.body.appendChild(sheet);
            $scope.stylesheet = document.styleSheets[document.styleSheets.length - 1];

            
            $scope.changeThumbSize($scope.pageData.imageSize, $scope.pageData.outputAspectRatio);
        });
    };

    app.controller('integratedMediaSearchController', ['$scope', '$http', '$q', '$location', 'constants', 'dataService', 'ewMessagingService', integratedMediaSearchController]);
}(angular.module("softouch")));;
(function (app) {
    var iosBetaController = function ($scope, dataService) {
        $scope.error = {};
        $scope.download = {};

        $scope.submit = function () {
            hideMessage();

            if ($scope.download.email === undefined) {
                $scope.error.messages = ["email is required."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    hideMessage();

                    $('#fields').slideUp(250);
                    $('#download').slideDown(250);
                }
            };

            var onError = function (response) {
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            var postUrl = "/component/iosbeta/";
            var postData = { email: $scope.download.email };

            dataService
                .getSetData(postUrl, postData)
                .then(onSuccess, onError);
        }
    }

    app.controller('iosBetaController', ['$scope', 'dataService', iosBetaController]);

}(angular.module("softouch")));
(function (app) {
    var items2Controller = function ($rootScope, $scope, dataService, constants, $location, userService) {
        window.peekItems = $scope;
        $scope.pageData = {
            filters: {},
            moreFiltersCaption: "See More",
            currentPage: { id: 1 }, // have to keep this since the customSelect uses lowercase id
            orderBy: { id: 2 }, // have to keep this since the customSelect uses lowercase id. Need to modify the select to take a selected value and then match id.value to value
            loadingData: { Products: [] },
            selectedFilters: [],
            filtersToHideBasedOnSelections: [],
            sortTrending: constants[0].SortedBy.Trending,
            sortNew: constants[0].SortedBy.Newest
        };

        $scope.error = {};

        for (var i = 1; i <= 48; i++) $scope.pageData.loadingData.Products.push({});
        $scope.pageData.media = $scope.pageData.loadingData;

        var clearColorSwatch = function () {
            $(".color-swatches div").removeClass("active");
        }

        var clearColorFilterAndResetColorPicker = function () {
            $scope.pageData.filters.co.Items = [];
            $scope.colorPicker.color.rgb = { r: 255, g: 255, b: 255 };
        };

        var clearBlackAndWhiteFilterItems = function () {
            $(".color-swatch-bw").removeClass("active");
            $scope.pageData.filters.bw.Items = [];
        };

        var setPageDataFilterColorItems = function () {
            $scope.pageData.filters.co.Items = [
                {
                    Id: $scope.colorPicker.color.rgb.r,
                    IsSelected: true
                },
                {
                    Id: $scope.colorPicker.color.rgb.g,
                    IsSelected: true
                },
                {
                    Id: $scope.colorPicker.color.rgb.b,
                    IsSelected: true
                }
            ];
        };

        $scope.setSelectedTab = function (modalTab) {
            $scope.pageData.selectedModalTab = modalTab;
        };

        $scope.matchModalTab = function (filterItem) {
            if ($scope.pageData.selectedModalTab === undefined || $scope.pageData.selectedModalTab === "")
                return true;

            switch ($scope.pageData.selectedModalTab) {
                case "Top Producers":
                    return filterItem.TopTen;

                case "#":
                    var reg = new RegExp('^[0-9].*$');
                    return reg.test(filterItem.Text);

                default:
                    var matched = false;

                    for (var n = 0; n <= $scope.pageData.selectedModalTab.length - 1 && !matched; n++) {
                        var testLetter = $scope.pageData.selectedModalTab.substring(n, n + 1);
                        matched = testLetter.toUpperCase() === filterItem.Text.substring(0, 1).toUpperCase();
                    }

                    return matched;
            }
        };

        $scope.selectedFiltersCrumbFilter = function (item) {
            if (item.loading === undefined || item.loading === "")
                return true;
        };

        // Toggles display of filters while in mobile
        $scope.toggleFiltersDisplay = function () {
            if ($('#filterContainer').hasClass('off')) {
                toggleFullBodyCover(true);
                $('#filterContainer').removeClass('off');
                $('#filterContainer').addClass('on');
            }
            else {
                toggleFullBodyCover(false);
                $('html').css('overflow-x', 'hidden');
                $('html').css('overflow-y', 'auto');
            }
        };

        $scope.hasSelectedItems = function (filterItems) {
            var hasSelected = false;

            filterItems.forEach(function (item) {
                if (item.IsSelected)
                    hasSelected = true;
            });

            return hasSelected;
        };

        $scope.setSelectedFiltersFromPageData = function () {
            $scope.pageData.selectedFilters = [];

            if ($scope.pageData.filters.co.Items.length === 3 || $scope.pageData.filters.bw.Items.length === 1)
                $scope.pageData.selectedFilters.push({ Text: "Color", specialAction: "clearColorSelection" });

            for (var key in $scope.pageData.filters) {
                setSelectedFilters($scope.pageData.filters[key]);
            }
        };

        function setSelectedFilters(filter) {
            
            if (!filter.IncludeInFiltersBar && !filter.DisplayInSelectedCrumbsOnly)
                return;

            if (filter.Key === "co" || filter.Key === "bw")
                return;

            filter.Items.forEach(function (item) {
                if (item.IsSelected)
                    $scope.pageData.selectedFilters.push(item);

                if (item.Subfilter !== undefined && item.Subfilter.Key !== null)
                    setSelectedFilters(item.Subfilter);
            });
        }

        // Expands and contracts the filter group
        $scope.toggleFilterGroupExpansion = function (filter) {
            if (!filter.HasExpandButton)
                return;

            if (filter.MoreBehavior != null && filter.NumberToDisplay === filter.Items.length) {
                $scope.showMore(filter);
            }

            if (filter.IsExpanded) {
                filter.IsExpanded = false;
                $("#" + filter.Key + 'Search').slideUp(100);
                $("#" + filter.Key).slideUp();
                $('#' + filter.Key + 'FilterExpand').hide();
            }
            else {
                filter.IsExpanded = true;
                $("#" + filter.Key + 'Search').slideDown(100);
                $("#" + filter.Key).slideDown();
                $('#' + filter.Key + 'FilterExpand').show();
            }
        };

        // This controls the browser history 
        $scope.pushStateAndGetData = function (skipMediaRequest) {
            if (skipMediaRequest != "gotoPage")
                $('html, body').animate({ scrollTop: 0 }, 'fast');
            
            var filterString = $scope.getSelectedFilterString();

            var path = "/media/filters" + filterString;
            history.pushState(null, path, path);

            if (skipMediaRequest === true)
                return;

            $scope.getMedia(filterString);
        };

        // Filter group show more button
        $scope.showMore = function (filter) {
            switch (filter.MoreBehavior) {
                case "remove-limit":
                    if (filter.NumberToDisplay === filter.Items.length) {
                        if (filter.IsSortedByTopTen) {
                            filter.orderBy = ["-TopTen"];
                            filter.orderBy.push("Text");
                        }
                        else if (filter.IsSortedByDisplayIndex) {
                            filter.orderBy = ["DisplayIndex"];
                            filter.orderBy.push("Text");
                        }

                        filter.NumberToDisplay = filter.holdNumberToDisplay;
                        $("#filterItems" + filter.Key).animate({
                            "max-height": "40vh"
                        }, 500, function () {
                                $(this).css({ "overflow": "hidden", "max-height": "40vh" });
                        });
                        filter.showMoreCaption = "+ More";
                    }
                    else {
                        if (filter.IsSortedByTopTen || filter.IsSortedByDisplayIndex) {
                            filter.orderBy = ["Text"];
                        }

                        filter.NumberToDisplay = filter.Items.length;
                        $("#filterItems" + filter.Key).animate({
                            "max-height": "40vh"
                        }, 500, function () {
                                $(this).css({ "overflow": "auto" });
                        });
                        filter.showMoreCaption = "- Less";
                    }

                    break;
                case "modal":
                    $scope.pageData.modalFilter = filter;
                    if (filter.ModalTabs.length > 0)
                        $scope.setSelectedTab(filter.ModalTabs[0]);
                    else
                        $scope.setSelectedTab("");

                    $('#FiltersModal').modal();
                    break;
            }
        };

        // Called from next and previous pagination buttons
        $scope.gotoPage = function (page) {
            if (page < 1 || page > $scope.pageData.media.LastPage)
                return;
            //scroll to top
            window.scrollTo(0, 0);

            // Set the page to display
            $scope.pageData.currentPage.id = page;

            // Set the page filter to the requested page
            $scope.pageData.filters.pg.Items = [{ Id: page, IsSelected: 1 }];

            $scope.pushStateAndGetData('gotoPage');
        };

        // Reset page filter to page 1 
        // result of filter change, clear group, clear all
        $scope.resetPaginationToPageOne = function () {
            $scope.pageData.filters.pg.Items = [{ Id: 1, IsSelected: false }];
            $scope.pageData.currentPage.id = 1;
        };

        $scope.setProductSort = function (evt, orderBy) {
            if (!evt.currentTarget.classList.contains("selected")) {
                $('.toggle-item').removeClass('selected');
                $(evt.currentTarget).addClass("selected");

                $scope.pageData.filters["o"].Items = [{ Id: orderBy, IsSelected: true }];
                $scope.pageData.orderBy.id = orderBy;

                $scope.resetPaginationToPageOne();
                $scope.pushStateAndGetData();
            };
        };

        // Hides filter group items that do not match the search term
        $scope.searchFilterGroup = function (filter) {
            if (filter.NumberToDisplay !== filter.Items.length)
                $scope.showMore(filter);

            var i = 0;
            filter.Items.forEach(function (filterItem) {
                var indexOfSearchTerm = filterItem.Text.toLowerCase().indexOf(filter.searchField.toLowerCase());

                filterItem.isHidden = indexOfSearchTerm === -1;

                if (!filterItem.isHidden) {
                    var preIndexCharacters = "";

                    if (indexOfSearchTerm > 0) {
                        preIndexCharacters = filterItem.Text.substring(0, indexOfSearchTerm);
                    }

                    var indexCharacters = filterItem.Text.substring(indexOfSearchTerm, indexOfSearchTerm + filter.searchField.length);
                    var postIndexCharacters = filterItem.Text.substring(indexOfSearchTerm + filter.searchField.length);

                    $("#sel" + filter.Key + filterItem.Id).html(preIndexCharacters + "<b>" + indexCharacters + "</b>" + postIndexCharacters);
                    $("#av" + filter.Key + filterItem.Id).html(preIndexCharacters + "<b>" + indexCharacters + "</b>" + postIndexCharacters);
                }

                // Select first result on Enter press
                if (event !== undefined && event.key === 'Enter' && filterItem.isHidden === false && i === 0) {
                    $scope.toggleFilterState(undefined, filterItem, filter);
                    i++;
                }
            });
        };

        // Called each time a filter is selected or removed
        $scope.toggleFilterState = function (evt, filterItem, filter, parentItem) {
            $scope.pageData.blurb = "";

            //if filter item needs to be checked for log in
            var skipMediaRequestNeedToLogin = false;

            if (filterItem !== undefined) {
                if (filterItem.CheckLogin === true && !userService.userData.loggedIn && !$("body").hasClass("integratedStore")) {
                    window.location.href = '/account/login';
                    return;
                }

                // Special actions to perform outside the normal filterItem behavior
                if (filterItem.specialAction !== undefined) {
                    switch (filterItem.specialAction) {
                        case "setHex":
                            $scope.colorPicker.color.hexString = filter.co.Item[0].Id;
                            break;
                        // The tag boxes call toggleState special case to clear color selection
                        case "clearColorSelection":
                            clearColorSwatch();
                            clearColorFilterAndResetColorPicker();
                            clearBlackAndWhiteFilterItems();
                            $scope.resetPaginationToPageOne();
                            $scope.pushStateAndGetData();
                            return;
                    }
                }
            }

            // Special handling for clearing the search with in filter group
            if (filter !== undefined) {
                if (filter.searchField !== undefined && filter.searchField !== null && filter.searchField !== "") {
                    filter.searchField = "";
                    filter.Items.forEach(function (filterItem) {
                        filterItem.isHidden = false;
                        $("#av" + filter.Key + filterItem.Id).html(filterItem.Text);
                    });

                    $scope.showMore(filter);
                }
            }

            // Normal filter processing
            if (filter) {
                if (filter.Key === 'co') {
                    clearBlackAndWhiteFilterItems();
                    clearColorSwatch();
                    
                    if (evt !== undefined) {
                        // a color swatch was clicked
                        var swatchRgb = $('.' + evt.className).css('background-color');

                        // If rgbString equals the selected swatch
                        // And the rgbString is not the init color
                        // Then clear the colors
                        // Otherwise make the swatch active
                        if ($scope.colorPicker.color.rgbString === swatchRgb && $scope.colorPicker.color.rgbString !== $scope.initColor) {
                            
                            clearColorFilterAndResetColorPicker();
                        }
                        else {
                            $scope.colorPicker.color.rgbString = swatchRgb;
                            $("." + evt.className).addClass("active");
                            setPageDataFilterColorItems();
                        }
                    }
                    else {
                        // color picker changed value
                        setPageDataFilterColorItems();
                    }

                    $scope.updateHexValue();
                }
                else if (filter.Key === 'bw') {
                    clearColorSwatch();
                    clearColorFilterAndResetColorPicker();

                    if ($(".color-swatch-bw").hasClass("active")) {
                        clearBlackAndWhiteFilterItems();
                    }
                    else {
                        $(".color-swatch-bw").addClass("active");
                        $scope.pageData.filters.bw.Items = [{ Id: true, IsSelected: true }];
                    }
                }
                else if (filter.Key === "ec") {
                    $scope.pageData.filters.ec.Items = [{ Id: true, IsSelected: evt.checked }];
                }
                else {
                    if (filter.IsMultiSelect) {
                        filterItem.IsSelected = !filterItem.IsSelected;
                    }
                    else {
                        if (!filterItem.IsSelected) {
                            filter.Items.forEach(function (item) {
                                item.IsSelected = false;

                                removeItemFromFiltersToHide(item);
                            });

                            filterItem.IsSelected = true;
                        }
                    }

                    if (filterItem.IsSelected && parentItem !== undefined && parentItem.IsSelected === false) {
                        parentItem.IsSelected = true;
                    }

                    if (!filterItem.IsSelected && filterItem.Subfilter.Key !== null) {
                        filterItem.Subfilter.Items.forEach(function (item) { item.IsSelected = false; });
                    }
                }
            }
            else {
                // The tag boxes do not pass in a filter, just a filter item
                filterItem.IsSelected = !filterItem.IsSelected;
            }

            if (filterItem !== undefined) {
                if (filterItem.IsSelected) {
                    if (filterItem.FilterKeysToHide.length > 0)
                        addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                    applyFilterItemDefaults(filterItem, filter);
                }
                else {
                    if (filterItem.FilterKeysToHide.length > 0)
                        removeItemFromFiltersToHide(filterItem);
                }
            }

            // Now that all filters are in the proper state get data based on what is selected.
            $scope.resetPaginationToPageOne();
            $scope.pushStateAndGetData(skipMediaRequestNeedToLogin);
            setTimeout(function () {
                $scope.showExpandButton();
            }, 1);
        };

        var applyFilterItemDefaults = function (filterItem, filter) {
            if (filterItem.AutoCheckCollections >= 0) {
                if (filterItem.AutoCheckCollections === 1)
                    $scope.pageData.filters.bun.Items[0].IsSelected = true;
                else {
                    if (filter !== undefined && filter.Key != "bun")
                        $scope.pageData.filters.bun.Items[0].IsSelected = false;
                }
            }

            if (filterItem.GroupCollections >= 0) {
                if (filterItem.GroupCollections)
                    $scope.pageData.filters.ec.Items[0] = { Id: true, IsSelected: true };
                else
                    $scope.pageData.filters.ec.Items[0] = {};
            }
        }

        var removeItemFromFiltersToHide = function (filterItem) {
            $scope.pageData.filtersToHideBasedOnSelections = $scope.pageData.filtersToHideBasedOnSelections.filter(function (value, index, arr) {
                return !filterItem.FilterKeysToHide.includes(value);
            })
        }

        var addFiterKeysToFiltersToHide = function (filterKeys) {
            $scope.pageData.filtersToHideBasedOnSelections = $scope.pageData.filtersToHideBasedOnSelections.concat(filterKeys);

            // deselect the items for that filter key
            filterKeys.forEach(function (filterKey) {
                $scope.pageData.filters[filterKey].Items.forEach(function (filterItem) { filterItem.IsSelected = false; });
            });
        }

        $scope.clearHexValue = function () {
            $('#hexColorBox').val('');
        };

        $scope.updateHexValue = function () {
            var hex = $scope.colorPicker.color.hexString;
            $('#hexColorBox').val(hex);
        };

        $scope.executeSearch = function () {
            $scope.pageData.blurb = "";

            if ($scope.pageData.filters.s.Items[0].Id == null)
                $scope.pageData.filters.s.Items[0].Id = "";

            $scope.pageData.filters.s.Items[0].IsSelected = true;

            $scope.resetPaginationToPageOne();
            $scope.pushStateAndGetData();
        };

        $scope.clearSearch = function () {
            $scope.pageData.blurb = "";
            $scope.pageData.filters.s.Items[0].Id = '';
            if ($scope.pageData.filters.s.Items[0].IsSelected == true) {
                $scope.pageData.filters.s.Items[0].IsSelected = false;
                $scope.resetPaginationToPageOne();
                $scope.pushStateAndGetData();
            }
        };

        // Called when the clear is clicked on a filter group
        $scope.clearFilterGroupSelections = function (filter) {
            $scope.pageData.blurb = "";
            filter.Items.forEach(function (filterItem) {
                filterItem.IsSelected = false;

                if (filter.Key == "co") {
                    clearColorFilterAndResetColorPicker();
                    clearColorSwatch();
                    $scope.clearHexValue();
                }
            });

            $scope.resetPaginationToPageOne();

            $scope.pushStateAndGetData();
        };

        $scope.expandTags = function () {
            $('#tagsWrapper').toggleClass('expanded');

            if ($('#tagsWrapper').hasClass('expanded'))
                $scope.pageData.moreFiltersCaption = "See Less";
            else
                $scope.pageData.moreFiltersCaption = "See More";
        };

        $scope.clearAllFilters = function (pushState) {
            for (var key in $scope.pageData.filters) {
                // skip search
                if (key === "s") {
                    continue;
                }
                else if (key === "co") {
                    clearColorFilterAndResetColorPicker();
                    continue;
                }
                
                $scope.pageData.filters[key].Items.forEach(function (filterItem) {
                    filterItem.IsSelected = false;
                });
            }

            $scope.clearHexValue();

            if (pushState) {
                $scope.pageData.blurb = "";
                $scope.resetPaginationToPageOne();
                $scope.pushStateAndGetData();
                setTimeout(function () {
                    $scope.showExpandButton();
                }, 1);
            }
        };

        // Get the filter string from the url
        $scope.getFilterStringFromUrl = function () {
            var url = $location.absUrl();

            var tokenPosition = url.indexOf("token/");
            if (tokenPosition !== -1) {
                return "mm/2/gct/" + url.substring(tokenPosition + 6);
            }
            tokenPosition = url.indexOf("token=");
            if (tokenPosition !== -1) {
                return "mm/2/gct/" + url.substring(tokenPosition + 6, url.lastIndexOf("&"));
            }
            var queryStringPosition = url.indexOf("?");
            if (queryStringPosition > 0)
                url = url.substring(0, queryStringPosition);

            var filtersPosition = url.indexOf("filters");
            if (filtersPosition !== -1) {
                return url.substring(filtersPosition + 7);
            }

            var searchPosition = url.indexOf("search/");
            if (searchPosition !== -1) {
                return "s/" + url.substring(searchPosition + 7);
            }

            var producerPosition = url.indexOf("producer/");
            if (producerPosition !== -1) {
                return "pr/" + url.substring(producerPosition + 9, url.lastIndexOf("/"));
            }

            var tagPosition = url.indexOf("tag/");
            if (tagPosition !== -1) {
                return "g/" + url.substring(tagPosition + 4, url.lastIndexOf("/"));
            }

            // Need to determine the bit value based on the product name
            var mediaPosition = url.indexOf("media/");
            var productName = url.substring(mediaPosition + 6).toLowerCase();

            var baseFilter = "b/";

            switch (productName) {
                case "backgrounds":
                    return baseFilter + constants[0].ProductType.Background;
                case "sermonvideos":
                case "minimovies":
                    return baseFilter + constants[0].ProductType.Minimovie;
                case "countdowns":
                    return baseFilter + constants[0].ProductType.Countdown;
                case "collections":
                    return baseFilter + constants[0].ProductType.Collection;
                case "worshiptracks":
                    return baseFilter + constants[0].ProductType.WorshipTracks;
                default:
                    return "";
            }
        };

        // Take a filter string and parse it.
        // Then set the selected properties on the pageData.filters.
        $scope.setFilterValues = function (urlFilterString) {
            // First clear all filters
            $scope.clearAllFilters(false);

            if (urlFilterString === "")
                return;

            // Now set the selected filter from the cached string values
            var elements = urlFilterString
                .replace(new RegExp("^\\/"), "") // remove leading forward slash
                .replace(new RegExp("\\/$"), "") // remove trailing forward slash
                .split("/");

            for (var i = 0; i < elements.length; i += 2) {
                var urlFilterKey = elements[i];
                // Could be singular or multiple seperated with a -
                var urlFilterItemValue = elements[i + 1];

                var filter = findFilter(urlFilterKey);

                if (filter === null) 
                    continue;
                    

                // Color falls out normal processing so check here and process if the key matches
                if (urlFilterKey === "co") {
                    if (urlFilterItemValue.indexOf("-") === -1)
                        continue;

                    var ids = urlFilterItemValue.split("-");

                    if (ids.length !== 3)
                        continue;

                    $scope.pageData.filters[urlFilterKey].Items = [
                        {
                            Id: ids[0],
                            IsSelected: true
                        },
                        {
                            Id: ids[1],
                            IsSelected: true
                        },
                        {
                            Id: ids[2],
                            IsSelected: true
                        }
                    ];


                    $scope.colorPicker.color.rgb = { r: ids[0], g: ids[1], b: ids[2] };
                    $scope.updateHexValue();

                    continue;
                }

                switch (filter.SelectionBehavior) {
                    case "assignment":
                        filter.Items =
                            [{ Id: decodeURIComponent(urlFilterItemValue), IsSelected: true }];
                        break;

                    case "list":
                        var ids;

                        if (urlFilterItemValue.indexOf("-") !== -1) {
                            ids = urlFilterItemValue.split("-");
                        }
                        else {
                            ids = [urlFilterItemValue];
                        }

                        ids.forEach(function (urlId) {
                            var itemSet = false;

                            filter.Items.forEach(function (filterItem) {
                                if (filterItem.Id === urlId) {
                                    filterItem.IsSelected = true;
                                    itemSet = true;

                                    if (filterItem.FilterKeysToHide.length > 0)
                                        addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                                    applyFilterItemDefaults(filterItem);
                                }
                            });
                            
                            // If a match was not found need to add the element to the list
                            // This is from the more like tags
                            if (!itemSet) {
                                filter.Items.push({ Id: urlId, IsSelected: true });
                            }
                        });
                        break;

                    default: //bit
                        filter.Items.forEach(function (filterItem) {
                            if ((filterItem.Id & urlFilterItemValue) > 0) {
                                filterItem.IsSelected = true;

                                if (filterItem.FilterKeysToHide.length > 0)
                                    addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                                applyFilterItemDefaults(filterItem);
                            }
                        });
                }
            }

            if ($scope.pageData.filters.g.Items.length > 0) {
                // Check for selected tags and get the text for the selected ids
                var tagIds = [];

                $scope.pageData.filters.g.Items.forEach(function (filterItem) {
                    tagIds.push(filterItem.Id);
                    // This keeps empty tags from showing in the crumb section
                    filterItem.loading = "loading";
                });

                var data = { ids: tagIds.join(",") };

                dataService.getSetData("/component/GetTagsByIds", data)
                    .then(function (data) {
                        if (data.Error) {
                            $scope.error.messages = data.ErrorMessages;
                            showErrorMessage();
                        } else {
                            $scope.pageData.filters.g.Items.forEach(function (filterItem) {
                                data.forEach(function (tag) {
                                    if (tag.Id == filterItem.Id) {
                                        filterItem.Text = tag.Name;
                                        filterItem.loading = "";
                                    }
                                });
                            });

                            setTimeout(function () {
                                $scope.showExpandButton();
                            }, 1);
                        }
                    });
            }
            // Push the token to root scope, so the download will work
            if ($scope.pageData.filters.gct.Items.length > 0) {
                $rootScope.guestToken = $scope.pageData.filters.gct.Items[0].Id;
            }
        };

        function findFilter(keyToFind) {
            var filterToReturn = null;

            for (var key in $scope.pageData.filters) {
                if (key === keyToFind)
                    return $scope.pageData.filters[key];

                $scope.pageData.filters[key].Items.forEach(function (filterItem) {
                    if (filterItem.Subfilter !== undefined && filterItem.Subfilter !== null && filterItem.Subfilter.Key === keyToFind)
                        filterToReturn = filterItem.Subfilter;
                });

                if (filterToReturn !== null)
                    return filterToReturn;
            }

            return null;
        }

        // Remove "More Filters" button if wrapper is less than 80px
        // TODO: Turn into some sort of helper as it is in softouch.custom.js
        $scope.showExpandButton = function () {
            if ($('#tagsWrapper').height() < '80') {
                $('#tagsExpand').hide();
            } else {
                $('#tagsExpand').show();
            }
        };

        // Used to get the filter key/id pairs from the pageData.filters object
        $scope.getSelectedFilterString = function () {

            var selectedFiltersString = "";

            for (var key in $scope.pageData.filters) {
                selectedFiltersString += loopfilterItems($scope.pageData.filters[key]);
            }

            return selectedFiltersString;
        };

        function loopfilterItems(filter) {
            var filterSegment = "";
            var subSegments = [];

            filter.Items.forEach(function (filterItem) {
                if (filterItem.IsSelected) {
                    if (filter.SelectionBehavior === "list") {
                        if (filterSegment.length > 0) {
                            filterSegment += "-" + filterItem.Id;
                        }
                        else {
                            filterSegment = String(filterItem.Id);
                        }
                    }
                    else {
                        if (filterSegment.length > 0) {
                            filterSegment = String(parseInt(filterSegment) + parseInt(filterItem.Id));
                        }
                        else {
                            filterSegment = String(filterItem.Id);
                        }
                    }

                    if (filterItem.Subfilter !== undefined && filterItem.Subfilter.Key !== null) {
                        var subSegment = loopfilterItems(filterItem.Subfilter);
                        if (subSegment.length > 0) {
                            subSegments.push(subSegment);
                        }
                    }
                }
            });

            var returnString = "";

            if (filterSegment.length > 0) {
                returnString = "/" + filter.Key + "/" + filterSegment;
            }

            if (subSegments.length > 0) {
                subSegments.forEach(function (item) { returnString += item; });
            }

            return returnString;
        }

        $scope.populatePagesList = function () {
            $scope.pageData.pages = [];

            for (var i = 1; i <= $scope.pageData.media.LastPage; i++) {
                $scope.pageData.pages.push({ id: i, name: 'page ' + i + ' of ' + $scope.pageData.media.LastPage });
            }

            $rootScope.$broadcast('pageListReady', { pages: $scope.pageData.pages });
        };

        $scope.getMediaIfFavoritesFilterSelected = function () {
            var refreshData = false;

            $scope.pageData.filters.mm.Items.forEach(function (filterItem) {
                if (filterItem.Id == 1 && filterItem.IsSelected) {
                    refreshData = true;
                    $("video").addClass("jq-video-hide");
                }
            });

            if (refreshData)
                $scope.getMedia($scope.getSelectedFilterString());
        };

        // Makes a call for the data based on url string
        $scope.getMedia = function (filterString) {
            $scope.setSelectedFiltersFromPageData();

            var data = { 'filter': filterString };

            if ($scope.lastPromise !== undefined) {
                $scope.lastPromise.abort();
            }

            hideMessage();

            $('#results').addClass('disabled d-none');
            $(".loading-gray-bars").removeClass("d-none");
            $(".thumb").addClass("d-none");
            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');

            $scope.pageData.media = $scope.pageData.loadingData;

            $scope.lastPromise = dataService.getSetDataWithAbort("/component/refreshView", data)
                .then(function (data) {
                    if (data.Error) {
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                        $('.thumb').removeClass('d-none');
                        $('#results').removeClass('disabled');
                        $scope.pageData.media = {};
                    } else {
                        $('.thumb-img').attr('src', constants[0].BaseUrl.thumbnailPlaceholder);
                        $scope.pageData.media = data;
                        $scope.populatePagesList();
                        $(".loading-gray-bars").addClass("d-none");
                        $('.thumb').removeClass('d-none');
                        $('#results').removeClass('d-none');
                        $('#results').removeClass('disabled');
                    }
                });
        };

        $scope.initialize = function () {
            if ($(".iro__colorPicker").length === 0) {
                $scope.colorPicker = new iro.ColorPicker("#colorPicker", {
                    width: 183
                });

                $scope.colorPicker.on('color:init', function (color) {
                    // Set the initial color
                    $scope.initColor = color.rgbString;
                });

                $scope.colorPicker.on('color:change', function (color) {
                    // As the color changes update the hex box
                    $('#hexColorBox').val(color.hexString);
                });

                $scope.colorPicker.on('input:end', function (color) {
                    console.log('I am here!');
                    console.log(color);
                    // If the first color changed
                    //if (color.index === 0) {
                        $scope.toggleFilterState(undefined, undefined, {Key: "co"});
                    //}
                });
            }

            var urlFilterString = $scope.getFilterStringFromUrl();

            var indexPositionOfPageFilter = urlFilterString.indexOf("pg/");
            if (indexPositionOfPageFilter !== -1) {
                var indexOfNextFilterSegment = urlFilterString.indexOf("/", indexPositionOfPageFilter + 3);
                if (indexOfNextFilterSegment === -1)
                    $scope.pageData.currentPage.id = urlFilterString.substring(indexPositionOfPageFilter + 3);
                else
                    $scope.pageData.currentPage.id = urlFilterString.substring(indexPositionOfPageFilter + 3, indexOfNextFilterSegment);
            }

            var indexPositionOfOrderBy = urlFilterString.indexOf("o/");
            if (indexPositionOfOrderBy !== -1) {
                $scope.pageData.orderBy.id = urlFilterString.substring(indexPositionOfOrderBy + 2, indexPositionOfOrderBy + 3);
            }

            for (var key in $scope.pageData.filters) {
                $scope.pageData.filters[key].showMoreCaption = "+ More";
                $scope.pageData.filters[key].holdNumberToDisplay = $scope.pageData.filters[key].NumberToDisplay;

                if ($scope.pageData.filters[key].HasExpandButton && !$scope.pageData.filters[key].IsExpanded) {
                    $("#" + $scope.pageData.filters[key].Key + 'Search').css("display", "none");
                    $("#" + $scope.pageData.filters[key].Key).css("display", "none");
                    $("#" + $scope.pageData.filters[key].Key + 'FilterExpand').css("display", "none");
                }
            }

            $scope.setFilterValues(urlFilterString);

            // Now that there are defaults, don't rely on the url filter to be correct
            // Pull the values from the page filters
            $scope.getMedia($scope.getSelectedFilterString());
        };

        // Fires when the orderBy or page selector is changed
        $rootScope.$on('itemSelected', function (evt, data) {
            switch (data.controlId) {
                case 'pageSort':
                    $scope.pageData.filters["o"].Items = [{ Id: data.item.id, IsSelected: true }];
                    $scope.resetPaginationToPageOne();
                    $scope.pushStateAndGetData();
                    break;
                case 'pageSelector':
                    $scope.gotoPage(data.item.id);
                    break;
            }
        });

        $rootScope.$on('updatedOrg', function (evt, data) {
            $scope.getMedia($scope.getSelectedFilterString());
        });

        $rootScope.$on('unfavorite', function () {
            $scope.getMediaIfFavoritesFilterSelected();
        });

        $rootScope.$on('loggedOut', function () {
            var needToRefreshData = false;
            $scope.pageData.filters.mm.Items.forEach(function (filterItem) {
                if (filterItem.IsSelected) {
                    needToRefreshData = true;
                    filterItem.IsSelected = false;
                }
            });

            if (needToRefreshData) {
                $scope.pushStateAndGetData();
            }
        });

        // ***********   Modal *************
        $('#myModal').on('shown.bs.modal', function () {
            $('#myInput').trigger('focus');
        });

        // This is the browser back and forward buttons
        // Need to reset the filters based on what was selected on the cached page
        window.onpopstate = function (event) {
            $scope.initialize();
        };

        // This fires the first time the page loads
        angular.element(document).ready(function () {
            $scope.initialize();
        });
    };

    app.controller('items2Controller', ['$rootScope', '$scope', 'dataService', 'constants', '$location', 'userService', items2Controller]);}
(angular.module("softouch")));;
(function (app) {
    var itemsController = function ($rootScope, $scope, dataService, constants, $location, userService) {
        window.peekItems = $scope;
        $scope.pageData = {
            filters: {},
            moreFiltersCaption: "See More",
            currentPage: { id: 1 }, // have to keep this since the customSelect uses lowercase id
            orderBy: { id: 2 }, // have to keep this since the customSelect uses lowercase id. Need to modify the select to take a selected value and then match id.value to value
            loadingData: { Products: [] },
            selectedFilters: [],
            filtersToHideBasedOnSelections: [],
            sortTrending: constants[0].SortedBy.Trending,
            sortNew: constants[0].SortedBy.Newest
        };

        $scope.error = {};

        $scope.scrolled = false;

        function allowScroll()
        {
            $scope.scrolled = false;
        }

        window.addEventListener('scroll', function (event)
        {
            if (!$scope.scrolled)
            {
                $scope.scrolled = true;
                $scope.timeout = setTimeout(allowScroll, 500)
            }
            else
            {
                clearTimeout($scope.timeout)
                $scope.timeout = setTimeout(allowScroll, 500)

            }
        })

        for (var i = 1; i <= 48; i++) $scope.pageData.loadingData.Products.push({});
        $scope.pageData.media = $scope.pageData.loadingData;

        var clearColorSwatch = function () {
            $(".color-swatches div").removeClass("active");
        }

        var clearColorFilterAndResetColorPicker = function () {
            $scope.pageData.filters.co.Items = [];
            $scope.colorPicker.color.rgb = { r: 255, g: 255, b: 255 };
        };

        var clearBlackAndWhiteFilterItems = function () {
            $(".color-swatch-bw").removeClass("active");
            $scope.pageData.filters.bw.Items = [];
        };

        var setPageDataFilterColorItems = function () {
            $scope.pageData.filters.co.Items = [
                {
                    Id: $scope.colorPicker.color.rgb.r,
                    IsSelected: true
                },
                {
                    Id: $scope.colorPicker.color.rgb.g,
                    IsSelected: true
                },
                {
                    Id: $scope.colorPicker.color.rgb.b,
                    IsSelected: true
                }
            ];
        };

        $scope.setSelectedTab = function (modalTab) {
            $scope.pageData.selectedModalTab = modalTab;
        };

        /*$scope.matchModalTab = function (filterItem) {
            if ($scope.pageData.selectedModalTab === undefined || $scope.pageData.selectedModalTab === "")
                return true;

            switch ($scope.pageData.selectedModalTab) {
                case "Top Producers":
                    return filterItem.TopTen;

                case "#":
                    var reg = new RegExp('^[0-9].*$');
                    return reg.test(filterItem.Text);

                default:
                    var matched = false;

                    for (var n = 0; n <= $scope.pageData.selectedModalTab.length - 1 && !matched; n++) {
                        var testLetter = $scope.pageData.selectedModalTab.substring(n, n + 1);
                        matched = testLetter.toUpperCase() === filterItem.Text.substring(0, 1).toUpperCase();
                    }

                    return matched;
            }
        };*/

        $scope.selectedFiltersCrumbFilter = function (item) {
            if (item.loading === undefined || item.loading === "")
                return true;
        };

        // Toggles display of filters while in mobile
        $scope.toggleFiltersDisplay = function () {
            if ($('#filterContainer').hasClass('off')) {
                toggleFullBodyCover(true);
                $('#filterContainer').removeClass('off');
                $('#filterContainer').addClass('on');
            }
            else {
                toggleFullBodyCover(false);
                $('html').css('overflow-x', 'hidden');
                $('html').css('overflow-y', 'auto');
            }
        };

        $scope.hasSelectedItems = function (filterItems) {
            var hasSelected = false;

            filterItems.forEach(function (item) {
                if (item.IsSelected)
                    hasSelected = true;
            });

            return hasSelected;
        };

        $scope.setSelectedFiltersFromPageData = function () {
            $scope.pageData.selectedFilters = [];

            if ($scope.pageData.filters.co.Items.length === 3 || $scope.pageData.filters.bw.Items.length === 1)
                $scope.pageData.selectedFilters.push({ Text: "Color", specialAction: "clearColorSelection" });

            for (var key in $scope.pageData.filters) {
                setSelectedFilters($scope.pageData.filters[key]);
            }
        };

        function setSelectedFilters(filter) {
            if (!filter.IncludeInFiltersBar && !filter.DisplayInSelectedCrumbsOnly)
                return;

            if (filter.Key === "co" || filter.Key === "bw")
                return;

            if (filter.Key === "b") {
                var noCategorySelected = true;
                filter.Items.forEach(function (item) {
                    if (item.IsSelected) {
                        $scope.pageData.selectedFilters.push(item);
                        $scope.setCategoryInfo(item.Text);
                        noCategorySelected = false;
                    }
                    if (item.Subfilter !== undefined && item.Subfilter.Key !== null)
                        setSelectedFilters(item.Subfilter);
                });
                if (noCategorySelected)
                    $scope.setCategoryInfo();
                document.title = $scope.pageData.selectedCategory + " - EasyWorship Media"
                return
            }

            filter.Items.forEach(function (item) {
                if (item.IsSelected) {
                    $scope.pageData.selectedFilters.push(item);
                }
                if (item.Subfilter !== undefined && item.Subfilter.Key !== null)
                    setSelectedFilters(item.Subfilter);
            });
        }

        // changes Category Title and subtitle under it, this section is also in BaseMediaController.
        $scope.setCategoryInfo = function (selectedCategory) {
            switch (selectedCategory) {
                case "Backgrounds":
                    $scope.pageData.selectedCategory = "Worship Backgrounds";
                    $scope.pageData.smallBlurb = "Expand your church's worship presentation with our wide variety of lyric backgrounds.";
                    break;
                case "Countdowns":
                    $scope.pageData.selectedCategory = "Church Countdowns";
                    $scope.pageData.smallBlurb = "Professional pre-service countdowns for any church service, worship event, or holiday.";
                    break;
                case "Lower Thirds":
                    $scope.pageData.selectedCategory = "Lower Thirds";
                    $scope.pageData.smallBlurb = "Make text stand out on your camera feed during your church service with one of these lower thirds.";
                    break;
                case "Lyric Media":
                    $scope.pageData.selectedCategory = "Lyric Media";
                    $scope.pageData.smallBlurb = "Engaging lyric videos that help create a worship atmosphere.";
                    break;
                case "Mini Movies":
                    $scope.pageData.selectedCategory = "Mini Movies";
                    $scope.pageData.smallBlurb = "Church videos for worship, sermons, holidays, events, or to help transition between service sections.";
                    break;
                case "Overlays":
                    $scope.pageData.selectedCategory = "Overlays";
                    $scope.pageData.smallBlurb = "Transparent video layers, such as text and elements, to create a unique church presentation theme.";
                    break;
                case "Social Media":
                    $scope.pageData.selectedCategory = "Social Media";
                    $scope.pageData.smallBlurb = "Connect with your church online via our blank and ready-made social images.";
                    break;
                case "Title Media":
                    $scope.pageData.selectedCategory = "Title Media";
                    $scope.pageData.smallBlurb = "From holiday greetings to service sections, themed titles make your church presentation feel professional.";
                    break;
                case "Ultrawide":
                    $scope.pageData.selectedCategory = "Ultrawide";
                    $scope.pageData.smallBlurb = "Make your lyrics, announcements, and sermons pop on double-wide and triple-wide screens.";
                    break;
                case "Elements":
                    $scope.pageData.selectedCategory = "Elements";
                    $scope.pageData.smallBlurb = "Transparent video layers to create a unique church presentation theme.";
                    break;
                default:
                    $scope.pageData.selectedCategory = "All Media";
                    $scope.pageData.smallBlurb = "Complete your church presentation with the best countdowns, worship backgrounds, sermon videos, lyric media, and more.";
                    break;
            }
        }


        // Expands and contracts the filter group
        $scope.toggleFilterGroupExpansion = function (filter) {
            if (!filter.HasExpandButton)
                return;

            if (filter.MoreBehavior != null && filter.NumberToDisplay === filter.Items.length) {
                $scope.showMore(filter);
            }

            if (filter.IsExpanded) {
                filter.IsExpanded = false;
                $("#" + filter.Key + 'Search').slideUp(100);
                $("#" + filter.Key).slideUp();
                $('#' + filter.Key + 'FilterExpand').hide();
            }
            else {
                filter.IsExpanded = true;
                $("#" + filter.Key + 'Search').slideDown(100);
                $("#" + filter.Key).slideDown();
                $('#' + filter.Key + 'FilterExpand').show();
            }
        };

        // This controls the browser history 
        $scope.pushStateAndGetData = function (skipMediaRequest) {
            if (skipMediaRequest != "gotoPage")
                $('html, body').animate({ scrollTop: 0 }, 'fast');
            
            var filterString = $scope.getSelectedFilterString();

            var path = "/media/filters" + filterString;
            history.pushState(null, path, path);

            if (skipMediaRequest === true)
                return;

            $scope.getMedia(filterString);
        };

        // Filter group show more button
        $scope.showMore = function (filter) {
            switch (filter.MoreBehavior) {
                case "remove-limit":
                    if (filter.NumberToDisplay === filter.Items.length) {
                        if (filter.IsSortedByTopTen) {
                            filter.orderBy = ["-TopTen"];
                            filter.orderBy.push("Text");
                        }
                        else if (filter.IsSortedByDisplayIndex) {
                            filter.orderBy = ["DisplayIndex"];
                            filter.orderBy.push("Text");
                        }

                        filter.NumberToDisplay = filter.holdNumberToDisplay;
                        $("#filterItems" + filter.Key).animate({
                            "max-height": "40vh"
                        }, 500, function () {
                                $(this).css({ "overflow": "hidden", "max-height": "40vh" });
                        });
                        filter.showMoreCaption = "+ More";
                    }
                    else {
                        if (filter.IsSortedByTopTen || filter.IsSortedByDisplayIndex) {
                            filter.orderBy = ["Text"];
                        }

                        filter.NumberToDisplay = filter.Items.length;
                        $("#filterItems" + filter.Key).animate({
                            "max-height": "40vh"
                        }, 500, function () {
                                $(this).css({ "overflow": "auto" });
                        });
                        filter.showMoreCaption = "- Less";
                    }

                    break;
                /*case "modal":
                    $scope.pageData.modalFilter = filter;
                    if (filter.ModalTabs.length > 0)
                        $scope.setSelectedTab(filter.ModalTabs[0]);
                    else
                        $scope.setSelectedTab("");

                    $('#FiltersModal').modal();
                    break;*/
            }
        };

        // Called from next and previous pagination buttons
        $scope.gotoPage = function (page) {
            if (page < 1 || page > $scope.pageData.media.LastPage)
                return;
            //scroll to top
            window.scrollTo(0, 0);

            // Set the page to display
            $scope.pageData.currentPage.id = page;

            // Set the page filter to the requested page
            $scope.pageData.filters.pg.Items = [{ Id: page, IsSelected: 1 }];

            $scope.pushStateAndGetData('gotoPage');
        };

        // Reset page filter to page 1 
        // result of filter change, clear group, clear all
        $scope.resetPaginationToPageOne = function () {
            $scope.pageData.filters.pg.Items = [{ Id: 1, IsSelected: false }];
            $scope.pageData.currentPage.id = 1;
        };

        $scope.setProductSort = function (evt, orderBy) {
            if (!evt.currentTarget.classList.contains("selected")) {
                if (evt.currentTarget.classList.contains("toggle-item")) {
                $('.toggle-item').removeClass('selected');
                $(evt.currentTarget).addClass("selected");
                }

                $scope.pageData.filters["o"].Items = [{ Id: orderBy, IsSelected: true }];
                $scope.pageData.orderBy.id = orderBy;

                $scope.resetPaginationToPageOne();
                $scope.pushStateAndGetData();
            };
        };

        // Hides filter group items that do not match the search term
        $scope.searchFilterGroup = function (filter) {
            if (filter.NumberToDisplay !== filter.Items.length)
                $scope.showMore(filter);

            var i = 0;
            filter.Items.forEach(function (filterItem) {
                var indexOfSearchTerm = filterItem.Text.toLowerCase().indexOf(filter.searchField.toLowerCase());

                filterItem.isHidden = indexOfSearchTerm === -1;

                if (!filterItem.isHidden) {
                    var preIndexCharacters = "";

                    if (indexOfSearchTerm > 0) {
                        preIndexCharacters = filterItem.Text.substring(0, indexOfSearchTerm);
                    }

                    var indexCharacters = filterItem.Text.substring(indexOfSearchTerm, indexOfSearchTerm + filter.searchField.length);
                    var postIndexCharacters = filterItem.Text.substring(indexOfSearchTerm + filter.searchField.length);

                    $("#sel" + filter.Key + filterItem.Id).html(preIndexCharacters + "<b>" + indexCharacters + "</b>" + postIndexCharacters);
                    $("#av" + filter.Key + filterItem.Id).html(preIndexCharacters + "<b>" + indexCharacters + "</b>" + postIndexCharacters);
                }

                // Select first result on Enter press
                if (event !== undefined && event.key === 'Enter' && filterItem.isHidden === false && i === 0) {
                    $scope.toggleFilterState(undefined, filterItem, filter);
                    i++;
                }
            });
        };

        // Called each time a filter is selected or removed
        $scope.toggleFilterState = function (evt, filterItem, filter, parentItem) {
            $scope.pageData.blurb = "";

            //if filter item needs to be checked for log in
            var skipMediaRequestNeedToLogin = false;

            if (filterItem !== undefined) {
                if (filterItem.CheckLogin === true && !userService.userData.loggedIn && !$("body").hasClass("integratedStore")) {
                    window.location.href = '/account/login';
                    return;
                }

                // Special actions to perform outside the normal filterItem behavior
                if (filterItem.specialAction !== undefined) {
                    switch (filterItem.specialAction) {
                        case "setHex":
                            $scope.colorPicker.color.hexString = filter.co.Item[0].Id;
                            break;
                        // The tag boxes call toggleState special case to clear color selection
                        case "clearColorSelection":
                            clearColorSwatch();
                            clearColorFilterAndResetColorPicker();
                            clearBlackAndWhiteFilterItems();
                            $scope.resetPaginationToPageOne();
                            $scope.pushStateAndGetData();
                            return;
                    }
                }
            }

            // Special handling for clearing the search with in filter group
            if (filter !== undefined) {
                if (filter.searchField !== undefined && filter.searchField !== null && filter.searchField !== "") {
                    filter.searchField = "";
                    filter.Items.forEach(function (filterItem) {
                        filterItem.isHidden = false;
                        $("#av" + filter.Key + filterItem.Id).html(filterItem.Text);
                    });

                    $scope.showMore(filter);
                }
            }

            // Normal filter processing
            if (filter) {
                if (filter.Key === 'co') {
                    clearBlackAndWhiteFilterItems();
                    clearColorSwatch();
                    
                    if (evt !== undefined) {
                        // a color swatch was clicked
                        var swatchRgb = $('.' + evt.className).css('background-color');

                        // If rgbString equals the selected swatch
                        // And the rgbString is not the init color
                        // Then clear the colors
                        // Otherwise make the swatch active
                        if ($scope.colorPicker.color.rgbString === swatchRgb && $scope.colorPicker.color.rgbString !== $scope.initColor) {
                            
                            clearColorFilterAndResetColorPicker();
                        }
                        else {
                            $scope.colorPicker.color.rgbString = swatchRgb;
                            $("." + evt.className).addClass("active");
                            setPageDataFilterColorItems();
                        }
                    }
                    else {
                        // color picker changed value
                        setPageDataFilterColorItems();
                    }

                    $scope.updateHexValue();
                }
                else if (filter.Key === 'bw') {
                    clearColorSwatch();
                    clearColorFilterAndResetColorPicker();

                    if ($(".color-swatch-bw").hasClass("active")) {
                        clearBlackAndWhiteFilterItems();
                    }
                    else {
                        $(".color-swatch-bw").addClass("active");
                        $scope.pageData.filters.bw.Items = [{ Id: true, IsSelected: true }];
                    }
                }
                else if (filter.Key === "ec") {
                    $scope.pageData.filters.ec.Items = [{ Id: true, IsSelected: evt.checked }];
                }
                else {
                    if (filter.IsMultiSelect) {
                        filterItem.IsSelected = !filterItem.IsSelected;
                    }
                    else {
                        if (!filterItem.IsSelected) {
                            filter.Items.forEach(function (item) {
                                item.IsSelected = false;

                                removeItemFromFiltersToHide(item);
                            });

                            filterItem.IsSelected = true;
                        }
                    }

                    if (filterItem.IsSelected && parentItem !== undefined && parentItem.IsSelected === false) {
                        parentItem.IsSelected = true;
                    }

                    if (!filterItem.IsSelected && filterItem.Subfilter.Key !== null) {
                        filterItem.Subfilter.Items.forEach(function (item) { item.IsSelected = false; });
                    }
                }
            }
            else {
                // The tag boxes do not pass in a filter, just a filter item
                filterItem.IsSelected = !filterItem.IsSelected;
            }

            if (filterItem !== undefined) {
                if (filterItem.IsSelected) {
                    if (filterItem.FilterKeysToHide.length > 0)
                        addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                    applyFilterItemDefaults(filterItem, filter);
                }
                else {
                    if (filterItem.FilterKeysToHide.length > 0)
                        removeItemFromFiltersToHide(filterItem);
                }
            }

            // Now that all filters are in the proper state get data based on what is selected.
            $scope.resetPaginationToPageOne();
            $scope.pushStateAndGetData(skipMediaRequestNeedToLogin);
            setTimeout(function () {
                $scope.showExpandButton();
            }, 1);
        };

        var applyFilterItemDefaults = function (filterItem, filter) {
            if ($scope.pageData.currentPage.id > 1) {
                // A url with predfined filters was sent in, so ignore defaults
                return;
            }

            if (filterItem.AutoCheckCollections >= 0) {
                if (filterItem.AutoCheckCollections === 1)
                    $scope.pageData.filters.bun.Items[0].IsSelected = true;
                else {
                    if (filter !== undefined && filter.Key != "bun")
                        $scope.pageData.filters.bun.Items[0].IsSelected = false;
                }
            }

            if (filterItem.AutoCheckPremium === 1) 
                $scope.pageData.filters.prm.Items[0].IsSelected = true;

            if (filterItem.GroupCollections >= 0) {
                if (filterItem.GroupCollections)
                    $scope.pageData.filters.ec.Items[0] = { Id: true, IsSelected: true };
                else
                    $scope.pageData.filters.ec.Items[0] = {};
            }
        }

        var removeItemFromFiltersToHide = function (filterItem) {
            $scope.pageData.filtersToHideBasedOnSelections = $scope.pageData.filtersToHideBasedOnSelections.filter(function (value, index, arr) {
                if (filterItem.FilterKeysToHide.indexOf(value) >= 0)
                    return false;
                else
                    return true;
            })
        }

        var addFiterKeysToFiltersToHide = function (filterKeys) {
            $scope.pageData.filtersToHideBasedOnSelections = $scope.pageData.filtersToHideBasedOnSelections.concat(filterKeys);

            // deselect the items for that filter key
            filterKeys.forEach(function (filterKey) {
                $scope.pageData.filters[filterKey].Items.forEach(function (filterItem) { filterItem.IsSelected = false; });
            });
        }

        $scope.clearHexValue = function () {
            $('#hexColorBox').val('');
        };

        $scope.updateHexValue = function () {
            var hex = $scope.colorPicker.color.hexString;
            $('#hexColorBox').val(hex);
        };

        $scope.executeSearch = function () {
            $scope.pageData.blurb = "";

            if ($scope.pageData.filters.s.Items[0].Id == null)
                $scope.pageData.filters.s.Items[0].Id = "";

            $scope.pageData.filters.s.Items[0].IsSelected = true;

            $scope.resetPaginationToPageOne();
            $scope.pushStateAndGetData();
        };

        $scope.clearSearch = function () {
            $scope.pageData.blurb = "";
            $scope.pageData.filters.s.Items[0].Id = '';
            if ($scope.pageData.filters.s.Items[0].IsSelected == true) {
                $scope.pageData.filters.s.Items[0].IsSelected = false;
                $scope.resetPaginationToPageOne();
                $scope.pushStateAndGetData();
            }
        };

        // Called when the clear is clicked on a filter group
        $scope.clearFilterGroupSelections = function (filter) {
            $scope.pageData.blurb = "";
            filter.Items.forEach(function (filterItem) {
                filterItem.IsSelected = false;

                if (filter.Key == "co") {
                    clearColorFilterAndResetColorPicker();
                    clearColorSwatch();
                    $scope.clearHexValue();
                }
            });

            $scope.resetPaginationToPageOne();

            $scope.pushStateAndGetData();
        };

        $scope.expandTags = function () {
            $('#tagsWrapper').toggleClass('expanded');

            if ($('#tagsWrapper').hasClass('expanded'))
                $scope.pageData.moreFiltersCaption = "See Less";
            else
                $scope.pageData.moreFiltersCaption = "See More";
        };

        $scope.clearAllFilters = function (pushState) {
            for (var key in $scope.pageData.filters) {
                // skip search
                if (key === "s") {
                    continue;
                }
                else if (key === "co") {
                    clearColorFilterAndResetColorPicker();
                    continue;
                }
                
                $scope.pageData.filters[key].Items.forEach(function (filterItem) {
                    filterItem.IsSelected = false;
                });
            }

            $scope.clearHexValue();

            if (pushState) {
                $scope.pageData.blurb = "";
                $scope.resetPaginationToPageOne();
                $scope.pushStateAndGetData();
                setTimeout(function () {
                    $scope.showExpandButton();
                }, 1);
            }
        };

        // Get the filter string from the url
        $scope.getFilterStringFromUrl = function () {
            var url = $location.absUrl();

            var tokenPosition = url.indexOf("token/");
            if (tokenPosition !== -1) {
                return "mm/2/gct/" + url.substring(tokenPosition + 6);
            }
            tokenPosition = url.indexOf("token=");
            if (tokenPosition !== -1) {
                return "mm/2/gct/" + url.substring(tokenPosition + 6, url.lastIndexOf("&"));
            }
            var queryStringPosition = url.indexOf("?");
            if (queryStringPosition > 0)
                url = url.substring(0, queryStringPosition);

            var filtersPosition = url.indexOf("filters");
            if (filtersPosition !== -1) {
                return url.substring(filtersPosition + 7);
            }

            var searchPosition = url.indexOf("search/");
            if (searchPosition !== -1) {
                return "s/" + url.substring(searchPosition + 7);
            }

            var producerPosition = url.indexOf("producer/");
            if (producerPosition !== -1) {
                return "pr/" + url.substring(producerPosition + 9, url.lastIndexOf("/"));
            }

            var tagPosition = url.indexOf("tag/");
            if (tagPosition !== -1) {
                return "g/" + url.substring(tagPosition + 4, url.lastIndexOf("/"));
            }

            // Need to determine the bit value based on the product name
            var mediaPosition = url.indexOf("media/");
            var productName = url.substring(mediaPosition + 6).toLowerCase();

            var baseFilter = "b/";

            switch (productName) {
                case "backgrounds":
                    return baseFilter + constants[0].ProductType.Background;
                case "sermonvideos":
                case "minimovies":
                    return baseFilter + constants[0].ProductType.Minimovie;
                case "countdowns":
                    return baseFilter + constants[0].ProductType.Countdown;
                case "collections":
                    return baseFilter + constants[0].ProductType.Collection;
                case "worshiptracks":
                    return baseFilter + constants[0].ProductType.WorshipTracks;
                default:
                    return "";
            }
        };

        // Take a filter string and parse it.
        // Then set the selected properties on the pageData.filters.
        $scope.setFilterValues = function (urlFilterString) {
            // First clear all filters
            $scope.clearAllFilters(false);

            if (urlFilterString === "") {
                var filterItem = $scope.pageData.filters["b"].Items[0];
                filterItem.IsSelected = true;
                applyFilterItemDefaults(filterItem);
                return;
            }
                

            // Now set the selected filter from the cached string values
            var elements = urlFilterString
                .replace(new RegExp("^\\/"), "") // remove leading forward slash
                .replace(new RegExp("\\/$"), "") // remove trailing forward slash
                .split("/");

            // keep track of the category so all media can be checked if nothing is selected
            var categorySelected = false;

            for (var i = 0; i < elements.length; i += 2) {
                var urlFilterKey = elements[i];
                // Could be singular or multiple seperated with a -
                var urlFilterItemValue = elements[i + 1];

                var filter = findFilter(urlFilterKey);

                if (filter === null) 
                    continue;

                // Color falls out normal processing so check here and process if the key matches
                if (urlFilterKey === "co") {
                    if (urlFilterItemValue.indexOf("-") === -1)
                        continue;

                    var ids = urlFilterItemValue.split("-");

                    if (ids.length !== 3)
                        continue;

                    $scope.pageData.filters[urlFilterKey].Items = [
                        {
                            Id: ids[0],
                            IsSelected: true
                        },
                        {
                            Id: ids[1],
                            IsSelected: true
                        },
                        {
                            Id: ids[2],
                            IsSelected: true
                        }
                    ];


                    $scope.colorPicker.color.rgb = { r: ids[0], g: ids[1], b: ids[2] };
                    $scope.updateHexValue();

                    continue;
                }

                if (urlFilterKey === "b") {
                    categorySelected = true;
                }

                switch (filter.SelectionBehavior) {
                    case "assignment":
                        filter.Items =
                            [{ Id: decodeURIComponent(urlFilterItemValue), IsSelected: true }];
                        break;

                    case "list":
                        var ids;

                        if (urlFilterItemValue.indexOf("-") !== -1) {
                            ids = urlFilterItemValue.split("-");
                        }
                        else {
                            ids = [urlFilterItemValue];
                        }

                        ids.forEach(function (urlId) {
                            var itemSet = false;

                            filter.Items.forEach(function (filterItem) {
                                if (filterItem.Id === urlId) {
                                    filterItem.IsSelected = true;
                                    itemSet = true;

                                    if (filterItem.FilterKeysToHide.length > 0)
                                        addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                                    applyFilterItemDefaults(filterItem);
                                }
                            });
                            
                            // If a match was not found need to add the element to the list
                            // This is from the more like tags
                            if (!itemSet) {
                                filter.Items.push({ Id: urlId, IsSelected: true });
                            }
                        });
                        break;

                    default: //bit
                        filter.Items.forEach(function (filterItem) {
                            if ((filterItem.Id & urlFilterItemValue) > 0) {
                                filterItem.IsSelected = true;

                                if (filterItem.FilterKeysToHide.length > 0)
                                    addFiterKeysToFiltersToHide(filterItem.FilterKeysToHide);

                                applyFilterItemDefaults(filterItem);
                            }
                        });
                }
            }

            if ($scope.pageData.filters.g.Items.length > 0) {
                // Check for selected tags and get the text for the selected ids
                var tagIds = [];

                $scope.pageData.filters.g.Items.forEach(function (filterItem) {
                    tagIds.push(filterItem.Id);
                    // This keeps empty tags from showing in the crumb section
                    filterItem.loading = "loading";
                });

                var data = { ids: tagIds.join(",") };

                dataService.getSetData("/component/GetTagsByIds", data)
                    .then(function (data) {
                        if (data.Error) {
                            $scope.error.messages = data.ErrorMessages;
                            showErrorMessage();
                        } else {
                            $scope.pageData.filters.g.Items.forEach(function (filterItem) {
                                data.Products.forEach(function (tag) {
                                    if (tag.Id == filterItem.Id) {
                                        filterItem.Text = tag.Name;
                                        filterItem.loading = "";
                                    }
                                });
                            });

                            setTimeout(function () {
                                $scope.showExpandButton();
                            }, 1);
                        }
                    });
            }
            // Push the token to root scope, so the download will work
            if ($scope.pageData.filters.gct.Items.length > 0) {
                $rootScope.guestToken = $scope.pageData.filters.gct.Items[0].Id;
            }

            // Check all media if no category is selected.
            if (!categorySelected) {
                $scope.pageData.filters["b"].Items[0].IsSelected = true;
            }
        };

        function findFilter(keyToFind) {
            var filterToReturn = null;

            for (var key in $scope.pageData.filters) {
                if (key === keyToFind)
                    return $scope.pageData.filters[key];

                $scope.pageData.filters[key].Items.forEach(function (filterItem) {
                    if (filterItem.Subfilter !== undefined && filterItem.Subfilter !== null && filterItem.Subfilter.Key === keyToFind)
                        filterToReturn = filterItem.Subfilter;
                });

                if (filterToReturn !== null)
                    return filterToReturn;
            }

            return null;
        }

        // Remove "More Filters" button if wrapper is less than 80px
        // TODO: Turn into some sort of helper as it is in softouch.custom.js
        $scope.showExpandButton = function () {
            if ($('#tagsWrapper').height() < '80') {
                $('#tagsExpand').hide();
            } else {
                $('#tagsExpand').show();
            }
        };

        // Used to get the filter key/id pairs from the pageData.filters object
        $scope.getSelectedFilterString = function () {

            var selectedFiltersString = "";

            for (var key in $scope.pageData.filters) {
                selectedFiltersString += loopfilterItems($scope.pageData.filters[key]);
            }
            return selectedFiltersString;
        };

        function loopfilterItems(filter) {
            var filterSegment = "";
            var subSegments = [];

            filter.Items.forEach(function (filterItem) {
                if (filterItem.IsSelected) {
                    if (filter.SelectionBehavior === "list") {
                        if (filterSegment.length > 0) {
                            filterSegment += "-" + filterItem.Id;
                        }
                        else {
                            filterSegment = String(filterItem.Id);
                        }
                    }
                    else {
                        if (filterSegment.length > 0) {
                            filterSegment = String(parseInt(filterSegment) + parseInt(filterItem.Id));
                        }
                        else {
                            filterSegment = String(filterItem.Id);
                        }
                    }

                    if (filterItem.Subfilter !== undefined && filterItem.Subfilter.Key !== null) {
                        var subSegment = loopfilterItems(filterItem.Subfilter);
                        if (subSegment.length > 0) {
                            subSegments.push(subSegment);
                        }
                    }
                }
            });

            var returnString = "";

            if (filterSegment.length > 0) {
                returnString = "/" + filter.Key + "/" + filterSegment;
            }

            if (subSegments.length > 0) {
                subSegments.forEach(function (item) { returnString += item; });
            }

            return returnString;
        }

        $scope.populatePagesList = function () {
            $scope.pageData.pages = [];

            for (var i = 1; i <= $scope.pageData.media.LastPage; i++) {
                $scope.pageData.pages.push({ id: i, name: 'page ' + i + ' of ' + $scope.pageData.media.LastPage });
            }

            $rootScope.$broadcast('pageListReady', { pages: $scope.pageData.pages });
        };

        $scope.getMediaIfFavoritesFilterSelected = function () {
            var refreshData = false;

            $scope.pageData.filters.mm.Items.forEach(function (filterItem) {
                if (filterItem.Id == 1 && filterItem.IsSelected) {
                    refreshData = true;
                    $("video").addClass("jq-video-hide");
                }
            });

            if (refreshData)
                $scope.getMedia($scope.getSelectedFilterString());
        };

        // Makes a call for the data based on url string
        $scope.getMedia = function (filterString) {
            $scope.setSelectedFiltersFromPageData();

            var data = { 'filter': filterString };

            if ($scope.lastPromise !== undefined) {
                $scope.lastPromise.abort();
            }

            hideMessage();

            $('#results').addClass('disabled d-none');
            $(".loading-gray-bars").removeClass("d-none");
            $(".thumb").addClass("d-none");
            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');

            $scope.pageData.media = $scope.pageData.loadingData;

            $scope.lastPromise = dataService.getSetDataWithAbort("/component/refreshView", data)
                .then(function (data) {
                    if (data.Error) {
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                        $('.thumb').removeClass('d-none');
                        $('#results').removeClass('disabled');
                        $scope.pageData.media = {};
                    } else {
                        $('.thumb-img').attr('src', constants[0].BaseUrl.thumbnailPlaceholder);
                        $scope.pageData.media = data;
                        $scope.populatePagesList();
                        $(".loading-gray-bars").addClass("d-none");
                        $('.thumb').removeClass('d-none');
                        $('#results').removeClass('d-none');
                        $('#results').removeClass('disabled');
                    }
                });
        };

        $scope.initialize = function () {
            if ($(".iro__colorPicker").length === 0) {
                $scope.colorPicker = new iro.ColorPicker("#colorPicker", {
                    width: 183
                });

                $scope.colorPicker.on('color:init', function (color) {
                    // Set the initial color
                    $scope.initColor = color.rgbString;
                });

                $scope.colorPicker.on('color:change', function (color) {
                    // As the color changes update the hex box
                    $('#hexColorBox').val(color.hexString);
                });

                $scope.colorPicker.on('input:end', function (color) {
                    /*console.log('I am here!');
                    console.log(color);*/
                    // If the first color changed
                    //if (color.index === 0) {
                        $scope.toggleFilterState(undefined, undefined, {Key: "co"});
                    //}
                });
            }

            var urlFilterString = $scope.getFilterStringFromUrl();

            var indexPositionOfPageFilter = urlFilterString.indexOf("pg/");
            if (indexPositionOfPageFilter !== -1) {
                var indexOfNextFilterSegment = urlFilterString.indexOf("/", indexPositionOfPageFilter + 3);
                if (indexOfNextFilterSegment === -1)
                    $scope.pageData.currentPage.id = urlFilterString.substring(indexPositionOfPageFilter + 3);
                else
                    $scope.pageData.currentPage.id = urlFilterString.substring(indexPositionOfPageFilter + 3, indexOfNextFilterSegment);
            }
            if (indexPositionOfPageFilter === -1)
                $scope.pageData.currentPage.id = 1;

            var indexPositionOfOrderBy = urlFilterString.indexOf("o/");
            if (indexPositionOfOrderBy !== -1) {
                $scope.pageData.orderBy.id = urlFilterString.substring(indexPositionOfOrderBy + 2, indexPositionOfOrderBy + 3);
            } else {
                $scope.pageData.orderBy.id = 2;
            }

            for (var key in $scope.pageData.filters) {
                $scope.pageData.filters[key].showMoreCaption = "+ More";
                $scope.pageData.filters[key].holdNumberToDisplay = $scope.pageData.filters[key].NumberToDisplay;

                if ($scope.pageData.filters[key].HasExpandButton && !$scope.pageData.filters[key].IsExpanded) {
                    $("#" + $scope.pageData.filters[key].Key + 'Search').css("display", "none");
                    $("#" + $scope.pageData.filters[key].Key).css("display", "none");
                    $("#" + $scope.pageData.filters[key].Key + 'FilterExpand').css("display", "none");
                }
            }

            $scope.setFilterValues(urlFilterString);

            // Now that there are defaults, don't rely on the url filter to be correct
            // Pull the values from the page filters
            $scope.getMedia($scope.getSelectedFilterString());
        };

        // Fires when the orderBy or page selector is changed
        $rootScope.$on('itemSelected', function (evt, data) {
            switch (data.controlId) {
                case 'pageSort':
                    $scope.pageData.filters["o"].Items = [{ Id: data.item.id, IsSelected: true }];
                    $scope.resetPaginationToPageOne();
                    $scope.pushStateAndGetData();
                    break;
                case 'pageSelector':
                    $scope.gotoPage(data.item.id);
                    break;
            }
        });

        $rootScope.$on('updatedOrg', function (evt, data) {
            $scope.getMedia($scope.getSelectedFilterString());
        });

        $rootScope.$on('unfavorite', function () {
            $scope.getMediaIfFavoritesFilterSelected();
        });

        $rootScope.$on('loggedOut', function () {
            $scope.pageData.filters.mm.Items.forEach(function (filterItem) {
                if (filterItem.IsSelected) {
                    filterItem.IsSelected = false;
                }
            });
            $scope.getMedia($scope.getSelectedFilterString());
        });

        $rootScope.$on('executeFilterOnItmPage', function () {
            $scope.initialize();
        });

        // ***********   Modal *************
        $('#myModal').on('shown.bs.modal', function () {
            $('#myInput').trigger('focus');
        });

        // This is the browser back and forward buttons
        // Need to reset the filters based on what was selected on the cached page
        /*window.onpopstate = function (event) {
            if (window.location.pathname.includes('media/filters')) {
                if ($('#detailsModal').hasClass('show')) {
                    $('#detailsModal').modal('hide');
                }
                else {
                    $scope.initialize();
                }
            }
            else {
               let item = JSON.parse(sessionStorage.getItem(window.location.pathname));
               $rootScope.$broadcast('detailsItemSet', { 'item': item });
            }
        };*/

        $('#detailsModal').on('hide.bs.modal', function (e) {
            if (window.location.pathname.indexOf('media/filters') == -1) {
                var filterString = $scope.getSelectedFilterString();
                var path = "/media/filters" + filterString;
                history.pushState(null, path, path);
            }
        });

        // This fires the first time the page loads
        angular.element(document).ready(function () {
            $scope.initialize();
        });
    };

    app.controller('itemsController', ['$rootScope', '$scope', 'dataService', 'constants', '$location', 'userService', itemsController]);}
(angular.module("softouch")));;
(function (app) {
    var itemsPageController = function ($scope, $rootScope, $http, $filter, $location, dataService, dataFilterService, $location, $window, itemService, constants, listService, producerService, urlService, cookieService) {

        var check1 = (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
        var check2 = (/Mobi/.test(navigator.userAgent));
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));

        $scope.isMac = (checkMac && !checkIpad && !checkiPhone);

        //alert($scope.isMac);
        //alert(navigator.userAgent);

        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        $scope.isMobile = check1 || check1;
        $scope.pageloaded = false;
        $scope.ippSelected = {};
        $scope.orderSelected = {};
        $scope.double = false;

        $scope.previewUrl = constants[0].BaseUrl.previewImage_thumbnails;

        // if the page is navigated to by history
        // popstate will pull from the history object the page data.
        // then sets the cookie for data consumption
        window.onpopstate = function (event) {
            popit();
        }

        window.onresize = function (event) {
            $rootScope.$broadcast('showList', { showlist: true });
            $scope.resetFilters();
        }

        $scope.toggleWide = function () {
            $('.toggleButton').toggleClass('active');
            $scope.double = !$scope.double;
        };

        $scope.keyval = function (Key) {
            //var strKey = "'" + Key + "'"; 
            
            var rtrn = {};
            switch (Key) {
                case 'b':
                    rtrn = { expand: true, value: 6 };
                    break;
                case 'c':
                    rtrn = { expand: true, value: 5 };
                    break;
                case 't':
                    rtrn = { expand: true, value: 10 };
                    break;
                case 'pr':
                    rtrn = { expand: false, value: 5 };
                    break;
                case 'pb':
                    rtrn = { expand: false, value: 5 };
                    break;
                case 'l':
                    rtrn = { expand: false, value: 5 };
                    break;
                case 'q':
                    rtrn = { expand: false, value: 5 };
                    break;
                case 'd':
                    rtrn = { expand: false, value: 5 };
                    break;
                default:
                    break;
            };
            return rtrn;
        }
        function popit() {
            itemService.itemData.selectedFilters = history.state.selectedFilters;
            cookieService.setFiltersCookie();
            cookieStuff();
            $scope.category = itemService.itemTitle();
            $scope.currentPage = itemService.itemData.selectedFilters.pg[0].value;
            $scope.ippSelected = itemService.itemData.selectedFilters.ipp[0];
            $scope.ippSelected.name = $scope.ippSelected.value;
            $scope.orderSelected = itemService.itemData.selectedFilters.o[0];
            $scope.orderSelected.name = $scope.orderSelected.value;
            $rootScope.$broadcast('filterRefresh');
            $scope.crumbData = dataFilterService.getCrumbs();
            if (dataFilterService.availableFilters.length != 0) {
                $scope.getPreviews('popit');
            }
            
        }
        // this method is needed to set the actual value of the order cookie to 
        // keep the proper model for the component data  consumption
        var getRealOrderValues = function () {
            var test = itemService.itemData.selectedFilters.o[0];
            var testList = listService.getStaticList('sort');
            if (test) {
                if ($.isNumeric(test.value)) {
                    var filtered = testList.filter(function (itm, idx) {
                        if (itm.id == parseInt(test.value)) {
                            itemService.itemData.selectedFilters.o[0] = itm;
                            $scope.orderSelected = itm;
                        };
                    });
                }
                else {
                    if (typeof(test.name) == 'undefined') {
                        var filtered = testList.filter(function (itm, idx) {
                            if (itm.id == parseInt(test.id)) {
                                itemService.itemData.selectedFilters.o[0] = itm;
                                $scope.orderSelected = itm;
                            };
                        });
                    }
                };
            };
        };
        itemService.itemData.selectedFilters = JSON.parse(cookieService.getCookie('filters'));
        getRealOrderValues();
        

        // if the state object doesn't exist this is where we create one
        // should be the MVC routes.

        // this is the cookie parse to get the various titles and stuff
        var cookieInfo = cookieService.getUse();
        var cookieStuff = function () {
            cookieInfo.searchTerm = '';
            var searchval = [{ id: 1 }, { key: 's' }, { value: '' }][0];
            itemService.itemData.selectedFilters.s.length > 0 ? searchval = itemService.itemData.selectedFilters.s[0]: null;
            itemService.itemData.selectedFilters.g.length > 0 ? searchval = itemService.itemData.selectedFilters.g[0] + '/' + itemService.itemData.selectedFilters.g[0].value : null;

            (cookieInfo.isSearch) ? cookieInfo.searchTerm = searchval : null;
            (cookieInfo.isTag) ? cookieInfo.searchTerm = searchval : null;
            (cookieInfo.isProducer) ? cookieInfo.searchTerm = itemService.producers() : null;
        }
        cookieStuff();

        var initialPath = '/media/filters' ;
        (cookieInfo.searchTerm.length > 0) ? initialPath += '/' + cookieInfo.searchTerm: null;

        // Local Variables used in contoller for template data
        $scope.availableFilters = [];

        $scope.blurbText = "Looking for a sermon illustration video to really drive your message home? Visuals increase retention by 42%, so using a sermon video is a smart way to make your message stick.";

        $scope.secondaryMenuList = listService.getStaticList('media');

        $scope.more = false;
        $scope.category = itemService.itemTitle();
        var w = angular.element($window);

        $scope.windowHeight = 0;
        $scope.windowwidth = 0;

        $scope.secondaryMenuList = listService.getStaticList('media');

        $scope.dynamicOrderBy = '-SalesCount';

        function displayError() {
            $("#errorDiv").removeClass('hidden');
        };
        function clearError() {
            $("#errorDiv").addClass('hidden');
        };

        function displayInfo() {
            $("#infoDiv").removeClass('hidden');
        };
        function clearInfo() {
            $("#infoDiv").addClass('hidden');
        };

        function displayMobileError() {
            $(".errorMobileDiv").removeClass('hidden');
        };
        function clearMobileError() {
            $(".errorMobileDiv").addClass('hidden');
        };

        function displayMobileInfo() {
            $(".infoMobileDiv").removeClass('hidden');
        };
        function clearMobileInfo() {
            $(".infoMobileDiv").addClass('hidden');
        };

        function clearMessages() {
            clearMobileError();
            clearMobileInfo();
            clearInfo();
            clearError();
        };


        if (dataFilterService.availableFilters.length == 0) {
            refreshFilters();
        }
        else {
            $scope.availableFilters = dataFilterService.availableFilters;
            $scope.greyIt(true);
            $scope.productTypes = $scope.availableFilters.filter(function (obj, ind) {
                if (obj.Key) { return obj.Key == 'b'; } else { return obj.key == 'b'; };
                
            });
            $scope.availableFilters = $scope.availableFilters.filter(function (obj, ind) {
                if (obj.Key) { return obj.Key != 'b'; } else { return obj.key != 'b'; };
            });
            $scope.getPreviews('controller start');

        }

        function refreshFilters() {
            dataFilterService.getFilterValues()
                .then(function (data) {
                    // urlService.parse('ASSIGN');
                    var term1 = '';
                    (itemService.itemData.selectedFilters.s.length > 0) ? term1 = itemService.itemData.selectedFilters.s[0].value : null;
                    (term1) ? null : term1 = '';

                    var term2 = '';
                    (itemService.itemData.selectedFilters.g.length > 0) ? term2 = itemService.itemData.selectedFilters.g[0].value : null;
                    (term2) ? null : term2 = '';

                    $scope.searchTerms = (term1) + (term2);

                    $scope.crumbData = dataFilterService.getCrumbs();

                    $scope.greyIt(true);
                    $scope.productTypes = data.filter(function (obj, ind) {
                        return obj.Key == 'b';
                    });
                    $scope.availableFilters = data.filter(function (obj, ind) {
                        return obj.Key != 'b';
                    });

                    $scope.getPreviews('refreshFilters');
                });
        }

        // Number per page ***************************************************************************************
        $scope.setPageCount = function () {
            $('html,body').scrollTop(0);
            $scope.currentPage = 1;

            itemService.itemData.selectedFilters.ipp = [];
            itemService.itemData.selectedFilters.ipp.push({ key: 'ipp', id: $scope.ippSelected.value, value: $scope.ippSelected.value });
            $scope.isMobileOdd = isOdd($scope.ippSelected.value);
            pushState();
            $scope.getPreviews('setPageCount');
        };

        $scope.goNext = function (evt) {

            if ($(evt.currentTarget).hasClass("disabled")) {
                return;
            }
            $('html,body').scrollTop(0);
            $scope.dataloaded = false;
            $scope.greyIt(true);
            (parseInt($scope.currentPage) + 1 > $scope.numberOfPages) ? $scope.currentPage = $scope.numberOfPages : $scope.currentPage = parseInt($scope.currentPage) + 1;
            itemService.itemData.selectedFilters.pg = [];
            itemService.itemData.selectedFilters.pg.push({ key: 'pg', id: $scope.currentPage, value: $scope.currentPage });
            ($scope.currentPage > 1) ? $scope.more = true : $scope.more = false;
            pushState();
            $scope.getPreviews('goNext');
        }
        $scope.goPrev = function (evt) {
            if ($(evt.currentTarget).hasClass("disabled")) {
                return;
            }
            (parseInt($scope.currentPage) - 1 < 1) ? $scope.currentPage = 1 : $scope.currentPage = parseInt($scope.currentPage) - 1;
            $('html,body').scrollTop(0);
            $scope.dataloaded = false;
            $scope.greyIt(true);
            itemService.itemData.selectedFilters.pg = [];
            itemService.itemData.selectedFilters.pg.push({ key: 'pg', id: $scope.currentPage, value: $scope.currentPage });
            ($scope.currentPage > 1) ? $scope.more = true : $scope.more = false;
            pushState();
            $scope.getPreviews('goPrev');
        }

        $scope.pageFirst = null;
        $scope.pageLast = null;
        $scope.pageval1 = null;
        $scope.pageval2 = null;
        $scope.pageval3 = null;
        $scope.pageval4 = null;
        $scope.pageval5 = null;


        function initPaginationVariables() {
            $scope.pageloaded = false;
            $scope.dataloaded = false;
            $scope.previewData = [];
            $scope.currentPage = itemService.itemData.selectedFilters.pg[0].value;
            
            
            $scope.isMobileOdd = isOdd($scope.ippSelected.value);
        };

        function isOdd(num) {
            return ((num % 2) > 0);
        }

        $scope.clearSearch = function () {
            dataFilterService.clearSearch();
            $scope.searchTerms = '';
            $rootScope.$broadcast('filtersUpdated', { resetCurrentPage: true, pushState: true });
        }

        $scope.clearAll = function () {
            $rootScope.$broadcast('clearAll');
            dataFilterService.removeFilterKeys();
            $rootScope.$broadcast('filtersUpdated', { resetCurrentPage: true, pushState: true });
        }
//  ***************************************************************************************************************
//events watched ***********************************
        $scope.$watch('ippSelected', function (newValue, oldValue) {
            if (oldValue && newValue.id) {
                if (oldValue != newValue) {
                    itemService.itemData.selectedFilters.ipp = [];
                    itemService.itemData.selectedFilters.ipp.push({
                        id: newValue.value, key: 'ipp', value: newValue.value
                    });
                    (oldValue.id) ? $scope.getPreviews('ippChanged'): null;
                }
            }
        }, true);

        var changeOrder = function (itm) {
            itemService.itemData.selectedFilters.pg = [];
            itemService.itemData.selectedFilters.pg.push({ id: 1, key: 'pg', value: 1 });
            itemService.itemData.selectedFilters.o = [];
            itemService.itemData.selectedFilters.o.push(itm);
            cookieService.setFiltersCookie();
            $scope.currentPage = itemService.itemData.selectedFilters.pg[0].value;
            $scope.getPreviews('orderChanged');
            pushState();
        };

        var searchTermsUpdatedListener = $rootScope.$on('searchTermsChanged', function (event, data) {
            $scope.searchTerms = decodeURIComponent(data.searchTerms);
            $scope.getPreviews('searchTermsChanged');
        });
        $scope.$on('$destroy', searchTermsUpdatedListener);

        var updatePreviewsListener = $rootScope.$on('updatePreviews', function (event, data) {
            $scope.previewData = dataService.previewData;
            if ($scope.previewData.Error) {
                $scope.previewData = [];
                displayInfo();
            }
            dataSet('updatePreviewsListener');
        });
        $scope.$on('$destroy', updatePreviewsListener);

        var filterSelectedListener = $rootScope.$on('filterSelected', function (event, data) {
            $scope.dataloaded = false;
            $rootScope.$broadcast('filtersUpdated', { pushState: true });
        });
        $scope.$on('$destroy', filterSelectedListener);

        var ModalListSelectedListener = $rootScope.$on('ModalListSelected', function (event, data) {
            (data.add) ? dataFilterService.addKey(data.filterItem) : dataFilterService.removeKey(data.filterItem);
            $scope.currentPage = itemService.itemData.selectedFilters.pg[0].value;
            $rootScope.$broadcast('filtersUpdated', { pushState: true });
        });
        $scope.$on('$destroy', ModalListSelectedListener);

        var clearedFiltersListener = $rootScope.$on('clearedFilters', function (event, data) {
            dataFilterService.clearKey(data.key);
            $scope.currentPage = itemService.itemData.selectedFilters.pg[0].value;
            //dataService.CurrentPage = 1;
            $rootScope.$broadcast('filtersUpdated', { pushState: true });

        });
        $scope.$on('$destroy', clearedFiltersListener);

        var controlChangesListener = $rootScope.$on('itemSelected', function (event, data) {
            switch (data.controlId){
                case 'ipp':
                    pushState();
                    break;
                case 'pageSort':
                    changeOrder(data.item);
                    break;
                default:
                    break
            }
        });

        $scope.previewCount = 1;
        var componentListener = $rootScope.$on('componentLoaded', function (event, data) {
            $scope.previewCount += 1;
            ($scope.previewCount >= itemService.itemData.selectedFilters.ipp[0].value) ? $(".mediaPreview").removeClass('hide'): null ;
        });
        $scope.$on('$destroy', componentListener);
        


        var filtersUpdatedListener = $rootScope.$on('filtersUpdated', function (event, data) {
            $scope.crumbData = dataFilterService.getCrumbs();
            $scope.category = itemService.itemTitle();
            if (data) {
                if (data.clearSearch) {
                    $scope.searchTerms = '';
                }

                if (data.resetCurrentPage) {
                    itemService.itemData.setToPage1();
                    cookieService.setFiltersCookie();
                }
                if (data.pushState) {
                    pushState();
                }
            };

            $scope.currentPage = itemService.itemData.selectedFilters.pg[0].value;
            $scope.getPreviews('filtersUpdated');
        });
        $scope.$on('$destroy', filtersUpdatedListener);
        var deselectMeListener = $rootScope.$on('filterDeselectMe', function (event, data) {
            $scope.crumbData = dataFilterService.getCrumbs();
        });
        $scope.$on('$destroy', deselectMeListener);

//**************************************************************************************************************
        $scope.toggleFilters = function () {
            if ($('#filterSidebar').hasClass('off')) {
                toggleBodyCover(true);
                $('#filterSidebar').removeClass('off');
                $('#filterSidebar').addClass('on');
                $scope.changeZindex(false);
                $('#filterButton').html('Close');
                $('html').css('overflow-x', 'hidden');
                $('html').css('overflow-y', 'hidden');
                $rootScope.$broadcast('showList', {showlist:true});
            }
            else {
                $('#filterSidebar').removeClass('on');
                $('#filterSidebar').addClass('off');
                $scope.changeZindex(true);
                $('#filterButton').html('Filters');
                $('html').css('overflow-x', 'hidden');
                $('html').css('overflow-y', 'auto');
                toggleBodyCover();
            }
        };

        $scope.resetFilters = function () {
                $('#filterSidebar').removeClass('on');
                $('#filterSidebar').addClass('off');
                $scope.changeZindex(true);
                $('#filterButton').html('Filters');
                $('html').css('overflow-x', 'hidden');
                $('html').css('overflow-y', 'auto');
                //toggleBodyCover();
        };


        $scope.changeZindex = function (on) {
            on ? $('.filterButton').css('z-index', 1100) : $('.filterButton').css('z-index', 1510);
        }

        function pushState() {
            var path = initialPath + '/' + itemService.filterUrl();
            var stateObj = { index: history.length, selectedFilters: itemService.itemData.selectedFilters }
            history.pushState(stateObj, path , path );
        }

        function replaceState0() {
            var path = $location.absUrl();
            var stateObj = { index: 0, selectedFilters: itemService.itemData.selectedFilters }
            history.replaceState(stateObj, path, path);
        }

        $scope.getPreviews = function (caller) {
            $scope.greyIt(true);
            $scope.PreviewPromiseReference = dataService.getPreviews().then(function (data) {
               if (data.Error) {
                   displayInfo();
                   $scope.previewData = [];
                   ($scope.previewData.length == 0) ? $('.infoBox').removeClass('off') : null;
                   $scope.dataloaded = true;
                   $scope.greyIt(false);
                   $scope.numberOfPages = 0;
                   $scope.currentPage = itemService.itemData.selectedFilters.pg[0].value;
               }
               else {
                   $scope.greyIt(false);
                   $scope.previewData = data.Products;
                   if ($scope.previewData.length == 0) { $('.infoBox').removeClass('off'); $scope.currentPage = 0 };
                   $scope.dataloaded = true;
                   $scope.numberOfPages = data.LastPage;
                   cookieService.setFiltersCookie();
              };
              
            }, function (response) { $scope.greyIt(false); console.log({ response: response }); });
            return $scope.PreviewPromiseReference;
        };

        var dataSet = function (caller) {
            $scope.dataloaded = true;
        }
        $scope.greyIt = function (b) {
            if ($http.pendingRequests.length == 0) {
                $('.infoBox').addClass('off');
                if (b) {
                    $('#thumbs').css('opacity', '.5');
                    $('#tWrap').addClass('disabled');

                } else {
                    $('#thumbs').css('opacity', '1');
                    $('#tWrap').removeClass('disabled');
                };
            }

        };

        if (itemService.itemData.selectedFilters.b.length > 0) {
            itemService.itemData.selectedFilters.b[0].id == constants[0].ProductType.Minimovie ? $scope.toggleWide() : null;
        };
        

        angular.element(document).ready(function () {
            initPaginationVariables();
            $scope.pageloaded = true;
            (history.state == null) ? replaceState0() : popit();
        });
    }
    app.controller('itemsPageController', ['$scope', '$rootScope', '$http', '$filter',  '$location', 'dataService', 'dataFilterService', '$location', '$window', 'itemService', 'constants', 'listService', 'producerService', 'urlService', 'cookieService', itemsPageController]);
}(angular.module("softouch")));;
(function (app) {
    var landingController = function ($rootScope, $scope) {

        $scope.modalThis = function () {
            $('#landingModal').modal();
        };

        $('#landingModal').on('hidden.bs.modal', function (e) {
            if ($('#success').attr("class") == "text-center") {
                $('#success').addClass('d-none');
                $("#mobile").removeClass('d-none')
            }
        });

        angular.element(document).ready(function () {
            $scope.reviewSwiper = new Swiper('#reviewSwiper', {
                slidesPerView: 4,
                spaceBetween: 30,
                slidesPerGroup: 4,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                loop: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 1px
                    1: {
                        slidesPerView: 1,
                        spaceBetween: 50,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 1009px
                    992: {
                        slidesPerView: 3,
                        spaceBetween: 50,
                        slidesPerGroup: 3,
                    },
                }
            });
        });

    }
    app.controller('landingController', ['$rootScope', '$scope', landingController]);
}(angular.module("softouch")));;
(function (app) {
    var legacyController = function ($rootScope, $scope, $http, cookieService) {
        $scope.freshDesk = {};

        var goGetit = function () {
            cookieService.setCookie('freshDesk', true, 1);
            if ($scope.freshDesk.url == 'http://throwback.easyworship.com/support/home') {
                cookieService.deleteCookie('freshDesk');
                $('#supportIframe').attr('src', $scope.freshDesk.url);
            }
            else {
                window.location.href = $scope.freshDesk.url + '&redirect_to=' + $scope.freshDesk.host + '/legacy/';
            }

        }

        angular.element(document).ready(function () {
            var bob = cookieService.getCookie('freshDesk');
            if (bob == "") { goGetit() } else {
                $('#supportIframe').attr('src', 'http://throwback.easyworship.com/support/home');
                cookieService.deleteCookie('freshDesk');
            }
        });

    }
    app.controller('legacyController', ['$rootScope', '$scope', '$http', 'cookieService', legacyController]);
}(angular.module("softouch")));
(function (app) {
    var licenseController = function ($rootScope, $scope, $location, dataService, organizationService, licenseService, pricingService) {

        window.peekLicense = $scope;

        $scope.orgs = {};
        $scope.orgSelected = {};
        $scope.currentBible = "";

        var today = new Date();
        var year = today.getFullYear();
        var month = (today.getMonth()+1); // how retarted is a 0 based month
        var day = today.getDate();
        var nextYear = new Date(year + 1, month, day);
        $scope.commitmentEndDate = nextYear.getMonth() + '-' + nextYear.getDate() + '-' + nextYear.getFullYear();

        var initScopeObjects = function (data) {
            hideMessage();
            $scope.submitted = false;

            $scope.modalInfo = {};
            $scope.modalError = {};
            $scope.info = {};
            $scope.error = {};

            $scope.monthlyOptions = {};
            $scope.yearlyOptions = {};

            // Required for a single common add card form across checkout and accounts
            $scope.payment = { selectedCard: 0, paymentMethod: "card", useExistingCard: false, applyStoreCredit: false, adjustedTotal: 1 };

            $scope.pageData = {};
            $scope.addComputer = {};
            $scope.pageData.selectedTerm = 2;

            $scope.card = {};
            $scope.address = {};

            if (data !== undefined && data.length != 0) {
                $scope.pageData.licenseData = data;
                $scope.pageData.selectedLicense = data[0];

                $scope.pageData.softwarePastDue = false;
                $scope.pageData.mediaPastDue = false;

                $scope.pageData.producerPacksExist = false;

                $scope.pageData.licenseData.forEach(function (item, index) {
                    if (item.Type === "License" || item.Type === "Serial") {
                        $scope.pageData.softwareLicensesExist = true;
                    } else if (item.Type === "ProducerPack") {
                        $scope.pageData.producerPacksExist = true;
                    }

                    if (item.SubscriptionData != null && item.SubscriptionData.CurrentSubscription.PastDue && item.SubscriptionData.CurrentSubscription.IsActive) {
                        if (item.Type === "License")
                            $scope.pageData.softwarePastDue = true;
                        else
                            $scope.pageData.mediaPastDue = true;
                    }
                })

                setSubscriptionOptions();

                if ($scope.pageData.producerPacksExist === true) {
                    toggleNoPacksMessage(1);
                }
            } else {
                toggleNoPacksMessage(0);
            }

        };

        $scope.updateBible = function (bible) {
            $scope.currentBible = bible;
        }

        var setSubscriptionOptions = function () {

            $scope.payment.useExistingCard = false;
            $scope.payment.selectedCard = 0;

            if ($scope.pageData.selectedLicense.SubscriptionData === null) {
                return;
            };

            var payload = {
                currentSubscription: $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription,
                softwareOptions: $scope.pageData.selectedLicense.SubscriptionData.RenewalOptions
            };

            var data = pricingService.setPricing(payload);

            $scope.pageData.currentSubscription = data.currentSubscription;
            $scope.pageData.subscriptionTypes = data.softwareOptions;
            $scope.subscription = $scope.pageData.subscriptionTypes[$scope.pageData.currentSubscription.ChurchSize];
            $scope.pageData.basicSelected = $scope.pageData.currentSubscription.BasicPreSelect;
            $scope.pageData.premiumSelected = $scope.pageData.currentSubscription.PremiumPreSelect;


            // Might find a better way as I don't like essentially duplicating the choices
            $scope.pageData.editPackage = $scope.pageData.subscriptionTypes[$scope.pageData.currentSubscription.ChurchSize];

            if ($scope.pageData.currentSubscription.CurrentIsPremium) {
                $scope.pageData.choices = $scope.pageData.editPackage.premium;
                $scope.pageData.newChoice = $scope.pageData.choices[$scope.pageData.currentSubscription.PremiumPreSelect];
            } else {
                $scope.pageData.choices = $scope.pageData.editPackage.base;
                $scope.pageData.newChoice = $scope.pageData.choices[$scope.pageData.currentSubscription.BasicPreSelect];
            }

            if ($scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Cancelled
                || $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Expired) {

                $scope.changePackageSaveCaption = "Purchase";

                if ($scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Expired ||
                    $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Cancelled &&
                    $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.PastDue) {
                }
            }
            else {
                if ($scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.PastDue) {
                    $scope.changePackageSaveCaption = "Make Payment";
                    $scope.pageData.paypalAmount = $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.CalculatedRenewalAmount;
                }
                else {
                    $scope.changePackageSaveCaption = "Save";
                }
            }

            // Cards only get populdated with subscription license types
            $scope.pageData.cards = $scope.pageData.selectedLicense.SubscriptionData.Cards;

            if ($scope.pageData.cards.length > 0) {
                $scope.payment.useExistingCard = true;
                $scope.payment.selectedCard = $scope.pageData.cards[0].RowId;
            }

            $scope.pageData.paysWithMessage = $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Tender === "C"
                ? "on credit card ending **" + $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.PaysWith
                : $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Tender === "P"
                    ? "from your PayPal account"
                    : $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Tender === "X"
                        ? "with software credits/card on file. Remaining credit $" + $scope.pageData.selectedLicense.SoftwareCreditBalance
                        : "via ACH withdrawal";
        };

        var getLicense = function () {
            toggleBodyCover(true);

            if ($scope.pageData == undefined)
                $scope.pageData = {};

            $scope.pageData.pullingData = true;

            licenseService.getSoftwareLicense(null)
                .then(function (data) {
                    toggleBodyCover();
                    if (data.Error) {
                        initScopeObjects();
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                    } else {
                        initScopeObjects(data);
                    }
                })
                .finally(function () {
                    $scope.pageData.pullingData = false;

                    switch ($location.search().modal) {
                        case 'changeSubscription':
                            if (!$scope.pageData.currentSubscription.PastDue)
                                $scope.displayPackageOptionsModal('Change Subscription Package', 'changeSubscription');
                            break;
                        default:
                    }
                });
        };

        $scope.selectedLicenseChanged = function () {
            $scope.payment.selectedCard = 0;
            setSubscriptionOptions();
        };

        $scope.autoadvance = function (event) {
            if (!isDirectionalKey(event.which)) {
                var currentInput = $("#" + event.currentTarget.id);

                if (currentInput.val().length == currentInput.attr("data-advanceon")) {
                    $("#" + currentInput.attr("data-advanceto")).focus();
                }
            }
        };

        $rootScope.$on('displayPackageOptionsModal', function (evt, data) {
            $scope.displayPackageOptionsModal(data.title, data.modalType, data.choice);
        });

        $scope.displayPackageOptionsModal = function (title, modalType, choice) {
            hideMessage();
            $scope.pageData.newChoiceId = 0;
            $scope.pageData.newChoice = {};

            $scope.pageData.changePackageTitle = title;
            $scope.pageData.processPaymentData = false;

            switch (modalType) {
                case 'changeSubscription':
                    $("#subscriptionChoices").show();
                    $("#packageOptionsModal .modal-dialog").addClass('both-choices');
                    $scope.payment.useExistingCard = true;
                    break;
                case 'updatePayment':
                    $("#paymentMethod").show();
                    $("#submit-buttons").show();
                    $("#packageOptionsModal").addClass('modal-scrollable');
                    $scope.changePackageSaveCaption = "Update";
                    $scope.pageData.processPaymentData = true;
                    break;
                case 'newPurchase':
                    if (choice) {
                        $scope.pageData.newChoice = choice;
                        $scope.pageData.newChoiceId = choice.CartDetailId;
                    }
                    $("#paymentMethod").show();
                    $("#submit-buttons").show();
                    $("#subscriptionChoices").hide();
                    $("#packageOptionsModal .modal-dialog").removeClass('both-choices');
                    $("#packageOptionsModal").addClass('modal-scrollable');
                    $scope.changePackageSaveCaption = "Place Order";
                    $scope.pageData.processPaymentData = true;
                    break;
                case 'restartSubscription':
                    $("#subscriptionChoices").show();
                    $("#packageOptionsModal .modal-dialog").addClass('both-choices');
                    $scope.payment.useExistingCard = true;
                    break;
                case 'editSubscription':
                    $scope.pageData.newChoice = choice;
                    $scope.pageData.newChoiceId = choice.CartDetailId;
                    $scope.changePackageSaveCaption = "Confirm Change";
                    $("#packageOptionsModal .modal-dialog").removeClass('both-choices');
                    $("#subscriptionChoices").hide();
                    $("#confirmation").show();
                    $("#submit-buttons").show();
                default:

            }

            $scope.submitted = false;
            $scope.card = { cardNumber: "" };
            $scope.address = {};

            $("#packageOptionsModal").modal();
        };

        $('#packageOptionsModal').on('hidden.bs.modal', function (e) {
            $("#packageOptionsModal").removeClass('modal-scrollable');
            $("#packageOptionsModal .modal-dialog").removeClass('both-choices');
            $("#paymentMethod").hide();
            $("#modifyCurrentSubscription").hide();
            $("#subscriptionChoices").hide();
            $("#submit-buttons").hide();
            $("#confirmation").hide();
            $scope.pageData.agree = {};
        })

        $scope.changeSubscription = function () {
            if ($scope.buttonClicked)
                return;

            $scope.buttonClicked = true;

            $scope.submitted = true;

            if ($scope.payment.paymentMethod === 'card' && !$scope.payment.useExistingCard && !$scope.ChangeSubscriptionForm.$valid) {
                $scope.buttonClicked = false;
                return;
            }

            if ($scope.pageData.agree != true) {
                $scope.buttonClicked = false;
                $scope.modalError.messages = ["You must agree to the subscription terms to continue."];
                showModalErrorMessage();
                return;
            }

            $scope.card.NewBillingAddress = $scope.address;

            var postData = {
                SubscriptionId: $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.RowId,
                RenewalDetailId: $scope.pageData.newChoiceId,
                ProcessPaymentData: $scope.pageData.processPaymentData,
                NewCreditCard: $scope.card,
                SelectedCardId: $scope.payment.useExistingCard ? $scope.payment.selectedCard : 0,
                PayPalPayerId: $scope.payment.paypalPayerId,
                PayPalToken: $scope.payment.paypalToken,
                UseExistingCard: $scope.payment.useExistingCard
            };

            $scope.modalInfo.messages = $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Expired
                || $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.Cancelled
                ? ["Restarting Subscription"]
                : $scope.pageData.displayCardFields && $scope.pageData.selectedLicense.SubscriptionData.CurrentSubscription.PastDue
                    ? ["Submitting payment"]
                    : $scope.pageData.displayCardFields
                        ? ["Updating payment method"]
                        : ["Updating package"];

            showModalInfoMessage();

            dataService.getSetData("/component/ChangeSubscription", postData).then(function (data) {
                $scope.buttonClicked = false;
                toggleBodyCover();

                if (data.Error) {
                    $scope.modalError.messages = data.ErrorMessages;
                    showModalErrorMessage();
                    console.log(data)
                }
                else {
                    $("#packageOptionsModal").modal('hide');
                    console.log(data)
                    initScopeObjects(data);
                }
            });
        };

        $scope.displayAddComputerModal = function () {
            hideMessage();
            $scope.submitted = false;
            $scope.addComputer = {
                key1: "",
                key2: "",
                key3: "",
                key4: "",
                key5: "",
                key6: "",
                key7: "",
            };
            $scope.addOfflineComputerForm.$setUntouched();
            $("#addComputerModal").modal();
        };

        $scope.cancelSubscription = function () {

            var confirmed = window.confirm("Are you sure you want to cancel your subscription?");

            if (!confirmed) {
                return;
            }

            $scope.info.messages = ["Canceling subscription..."];
            showInfoMessage();

            dataService.getSetData("/component/cancelsubscription").then(function (data) {
                toggleBodyCover();

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    hideMessage();
                    initScopeObjects(data);
                }
            });
        };


        // ****** switch for billed yearly or monthly
        $('body').on('click', ".label-wrapper, .knob", function () {
            $(".enabled").toggleClass("on");
            $('.monthly').toggleClass('show');
            $('.annual').toggleClass('show');
            $scope.loadPackages();
        });

        $scope.loadPackages = function () {
            /*console.log("loadPackages")*/

            /*var currentPackageIndex = 0;
            $scope.pageData.renewalOptions.forEach(function (itm, idx) {
                if (itm.ProductId === $scope.pageData.newPackage.ProductId)
                    currentPackageIndex = idx;
            });

            console.log(currentPackageIndex)*/

            if ($(".monthly").hasClass('show'))
                $scope.pageData.renewalOptions = $scope.pageData.monthlyOptions;
            else
                $scope.pageData.renewalOptions = $scope.pageData.yearlyOptions;

            $scope.pageData.newPackage = $scope.pageData.renewalOptions[currentPackageIndex];
            /*$scope.setDollarsAndCents();*/
        };

        // Updated newChoice to set the selected "choice" as what is current,
        // but now it just duplicates what is initialized at the top of the script.
        // Seems like there's gotta be a better way...
        $scope.setAttendance = function () {
            if ($scope.pageData.currentSubscription.CurrentIsPremium) {
                $scope.pageData.choices = $scope.pageData.editPackage.premium;
                $scope.pageData.newChoice = $scope.pageData.choices[$scope.pageData.currentSubscription.PremiumPreSelect];
            } else {
                $scope.pageData.choices = $scope.pageData.editPackage.base;
                $scope.pageData.newChoice = $scope.pageData.choices[$scope.pageData.currentSubscription.BasicPreSelect];
            }
        };

        $scope.setDollarsAndCents = function () {
            var price = ($scope.pageData.newPackage.CheckoutPrice - $scope.pageData.newPackage.PromoDiscountAmount).toFixed(2);

            // ****** if yearly show how much it costs a month ******
            //if ($scope.pageData.selectedTerm === 2) {
            //    price = (price / 12).toFixed(2);
            //}

            var monthly = $scope.pageData.monthlyOptions.filter(function (itm) {
                return itm.Title === $scope.pageData.newPackage.Title
            });
            var yearly = $scope.pageData.yearlyOptions.filter(function (itm) {
                return itm.Title === $scope.pageData.newPackage.Title
            });
            
            $scope.pageData.savings = (monthly[0].CheckoutPrice * 12) - yearly[0].CheckoutPrice

            price = price.split(".");

            $scope.pageData.dollars = price[0];
            $scope.pageData.cents = price[1];

            //if ($scope.pageData.selectedTerm === 2) {
            //    $scope.pageData.isAnnual = true;
            //}
            //else {
            //    $scope.pageData.isAnnual = false;
            //}
        };

/*        $scope.packageChanged = function () {
            $scope.setDollarsAndCents();
            $scope.pageData.paypalAmount = $scope.pageData.newPackage.CheckoutPrice;
        };*/

        $scope.addOfflineComputer = function () {

            $scope.submitted = true;

            if (!$scope.addOfflineComputerForm.$valid)
                return;

            var postData = {
                key1: $scope.addComputer.key1,
                key2: $scope.addComputer.key2,
                key3: $scope.addComputer.key3,
                key4: $scope.addComputer.key4,
                key5: $scope.addComputer.key5,
                key6: $scope.addComputer.key6,
                key7: $scope.addComputer.key7,
                computerName: $scope.addComputer.computerName
            };

            dataService.getSetData("/component/addOfflineComputer", postData).then(function (data) {
                toggleBodyCover();

                if (data.Error) {
                    $scope.modalError.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $("#addComputerModal").modal('hide');
                    $scope.pageData.selectedLicense.Machines = data.ComputerList;

                    if (data.ComputerId > 0) {
                        window.location = "/component/DownloadLicenseV7?computerId=" + data.ComputerId;
                    }
                }
            });
        };

        $scope.showTermsDialog = function () {
            $('#termsModal').modal();
        };

        $rootScope.$on('itemSelected', function (evt, data) {
            switch (data.controlId) {
                case 'org':
                    organizationService.selectedOrganization = data.item.org;
                    organizationService.changeOrg();
                    break;
            }
        });

        $rootScope.$on('orgListReady', function (evt, data) {
            var tmpList = [];

            $.each(data.orgList, function (index, value) {
                var tmpName = value.AccountName;
                var tmpId = value.AccountId;
                var tmpValue = value.AccountId;
                var org = value;
                value.IsDefaultAccount ? $scope.orgSelected = { name: tmpName, id: tmpId, value: tmpValue, org: org } : null;
                tmpList.push({ name: tmpName, id: tmpId, value: tmpValue, org: org });
            });
            $scope.orgs = tmpList;
        });

        $rootScope.$on('updatedOrg', function (evt, data) {
            var org = {};
            org.name = data.selectedOrganization.AccountName;
            org.id = data.selectedOrganization.AccountId;
            org.value = data.selectedOrganization.AccountId;
            org.org = data.selectedOrganization;
            $scope.orgSelected = org;
            getLicense();
        });

        // Add an event listener for the files object change event
        document.getElementById('offlineFile').addEventListener('change', handleFileSelect, false);

        angular.element(document)
            .ready(function () {
                getLicense();

                paypal.Buttons({
                    style: {
                        height: 38
                    },
                    createOrder: function () {
                        console.log('createOrder')
                        if (!$scope.pageData.agree) {
                            $scope.modalError.messages = ["You must agree to the subscription terms to continue."];
                            showModalErrorMessage();
                            return;
                        }

                        var upgradeId = $scope.pageData.newChoice.CheckoutPrice != $scope.pageData.newChoice.MaxPrice ? $scope.pageData.newChoice.CartDetailId : 0;
                        
                        return fetch("/component/SetExpressCheckoutViaLicensePage", {
                            method: 'POST',
                            headers: {
                                'Accept': 'application/json',
                                'Content-Type': 'application/json'
                            },
                            body: JSON.stringify({
                                upgradeDetailId: upgradeId
                            })
                        }).then(function (res) {
                            console.log(res)
                            return res.json();
                        }).then(function (data) {
                            console.log(data);
                            $scope.payment.paypalToken = data.token;
                            return data.token;
                        });
                    },
                    onApprove: function (data) {
                        $scope.payment.paypalPayerId = data.payerID;
                        $scope.changeSubscription();
                    }
                }).render('#paypal-button-container');
            });
    };

    app.controller('licenseController', ['$rootScope', '$scope', '$location', 'dataService', 'organizationService', 'licenseService', 'pricingService', licenseController]);
}(angular.module("softouch")));

;
(function (app) {
    var loginController = function ($scope, $rootScope, dataService, userService) {
        $scope.error = {};
        $scope.info = {};
        $scope.user = {};
        $scope.reset = {};
        $scope.postingForm = false;
        $scope.submitted = false;
        window.peek = $scope;

        var onData = function (data, msg) {
            if (data.Success) {
                $scope.info.messages = ['Email sent.'];
                showInfoMessage();
                $scope.cancelForgot();
            }
            else {
                $scope.error.messages = data.ErrorMessages;
                showErrorMessage();
            }
        };

        var onError = function(data) {
            $scope.error.messages = data.ErrorMessages;
            showErrorMessage();
        }

        $scope.cancelForgot = function (e) {
            if (e) {
                e.preventDefault();
                e.stopPropagation();
            }
            $(".jq-forgot-field-wrapper").addClass('d-none');
            $(".login_field_wrapper").removeClass('d-none');
        };

        $scope.passwordReset = function () {
            if ($(".button.reset").hasClass("sent")) {
                return; // Reset already sent
            }

            $scope.info.messages = ['Sending email to reset password...'];
            showInfoMessage();
            var postData = {
                email: $scope.user.uid
            };

            // Post it
            dataService
                .getSetData("/component/SendPasswordResetRequest/", postData)
                .then(onData, onError);
        };

        $scope.forgot = function (e) {
            if (e) {
                e.preventDefault();
                e.stopPropagation();
            }
            $(".jq-forgot-field-wrapper").removeClass('d-none');
            $(".login_field_wrapper").addClass('d-none');
        };

        $scope.log_in = function (evt) {
            if (evt.keyCode === 13 || evt.button === 0) {
                var postData = {
                    Username: $scope.user.uid,
                    Password: $scope.user.pwd,
                    Rememberme: $scope.user.rememberMe,
                    InviteKey: $scope.user.inviteKey,
                    IsIntegratedStore: $scope.user.isIS
                };

                $scope.info.messages = ["Logging In."];
                showInfoMessage();

                userService.login(postData).then(function (data) {
                    if (data.Error) {
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                    }
                    else {
                        window.location.href = data.Url;
                    }
                }, function (response) { });
            }
        };

        $scope.resetPassword = function(evt) {
            if (evt.keyCode === 13 || evt.button === 0) {
                
                // prevent double click
                if ($scope.postingForm === true) {
                    return;
                } else {
                    $scope.postingForm = true;
                }

                $scope.submitted = true;

                if (!$scope.resetForm.$valid) {
                    $scope.postingForm = false;
                    return;
                }

                $scope.info.messages = ["Submitting Reset Request."];
                showInfoMessage();

                var onSuccess = function (data) {
                    $scope.postingForm = false;

                    if (data.Error) {
                        $scope.error.messages = data.ErrorMessages;
                        showErrorMessage();
                    }
                    else {
                        window.location = "/";
                    }
                };

                var onError = function (reason) {
                    $scope.error.messages = [reason];
                    $scope.postingForm = false;
                    showErrorMessage();
                };

                var postData = {
                    Password: $scope.reset.password,
                    PasswordVerify: $scope.reset.passwordVerify,
                    PasswordResetKey: $scope.reset.resetKey,
                };

                dataService.getSetData("/component/resetPassword", postData)
                    .then(onSuccess, onError);
                }
        }
    };
    app.controller('loginController', ['$scope', '$rootScope', 'dataService', 'userService', loginController]);
}(angular.module("softouch")));;
(function (app) {
    var mediaPageController = function ($scope, $rootScope, dataService, constants, organizationService) {
        window.peekMediaHome = $scope;
        $scope.browserType = '';
        $scope.hasPremium = false;
        $scope.data = {
            loadingData: [],
        };
        $scope.pastDue = false;

        for (i = 0; i < 20; i++) {
            $scope.data.loadingData.push({});
        }

        $scope.data.trendingMedia = $scope.data.loadingData;
        $scope.data.ewMedia = $scope.data.loadingData;
        $scope.data.newPremium = $scope.data.loadingData;
        $scope.data.latestDownloads = $scope.data.loadingData;
        $scope.data.recentlyAdded = $scope.data.loadingData;
        $scope.scrolled = false;

        function allowScroll()
        {
            $scope.scrolled = false;
        }

        window.addEventListener('scroll', function (event)
        {
            if (!$scope.scrolled)
            {
                $scope.scrolled = true;
                $scope.timeout = setTimeout(allowScroll, 1000)
            }
            else
            {
                clearTimeout($scope.timeout)
                $scope.timeout = setTimeout(allowScroll, 1000)

            }
        })


        // Test what version of browser we are ******************************
        var ff = (/Firefox/.test(navigator.userAgent));
        var edge = (/Edge/.test(navigator.userAgent));
        var chrome = ((/Chrome/.test(navigator.userAgent)));
        var safari = ((/Safari/.test(navigator.userAgent)) && !chrome);
        var ie = (/.NET/.test(navigator.userAgent));

        if (ff) { $scope.browserType = 'ff'; };
        if (chrome) { $scope.browserType = 'chrome'; };
        if (safari) { $scope.browserType = 'safari'; };
        if (ie) { $scope.browserType = 'ie'; };
        if (edge) { $scope.browserType = 'edge'; };
        // ******************************************************************

        var getData = function () {
            //console.log('getData')
            var commonFilterParams = '/ipp/20/';

            //Trending Media
            var sp1 = (constants[0].ProductViewFilterKey.OrderBy + '/' + constants[0].SortedBy.Trending + commonFilterParams);
            var payload1 = { 'filter': sp1 };
            //EasyWorship Media
            var sp2 = (constants[0].ProductViewFilterKey.Producers + '/' + constants[0].Producers.EasyWorship + '/' + constants[0].ProductViewFilterKey.Bundles + commonFilterParams);
            var payload2 = { 'filter': sp2 };
            //New in Premium
            var sp3 = (constants[0].ProductViewFilterKey.AllPremium + '/' + constants[0].ProductViewFilterKey.Bundles + '/' + constants[0].ProductViewFilterKey.OrderBy + '/' + constants[0].SortedBy.AddedToPremium  + commonFilterParams);
            var payload3 = { 'filter': sp3 };
            //Recently Added
            var sp4 = (constants[0].ProductViewFilterKey.OrderBy + '/' + constants[0].SortedBy.Newest + '/' + constants[0].ProductViewFilterKey.Bundles + commonFilterParams);
            var payload4 = { 'filter': sp4 };

            /*var sp5 = ('bun/1' + commonFilterParams);
            console.log(sp5);
            var payload5 = { 'filter': sp5 };*/

            //Trending Media
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload1).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#trendingMediaSwiper').addClass('d-none');
                    }
                    else {
                        $scope.data.trendingMedia = data.Products;
                        $scope.$applyAsync(function () {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#trendingMediaSwiper .loading-gray-bars").addClass("d-none");
                            $('#trendingMediaSwiper .thumb').removeClass('d-none');
                            $('#trendingMediaSwiper .detailInfo').removeClass('d-none');
                            $("#trendingMediaSwiper .swiper-navigation").removeClass("d-none");
                            $("#trendingMediaSwiper .swiper-slide-view-more").addClass("d-block");
                            $scope.changeSwiperPagingHeight('#trendingMediaSwiper');
                            $scope.trendingMediaSwiper.update();
                        });
                    }
                }

                //EasyWorship Media
                dataService.getSetData(constants[0].BaseUrl.refreshView, payload2).then(function (data) {
                    if (data.Error) {
                        console.log(data.Error)
                    }
                    else {
                        if (data.Products.length == 0) {
                            $('#ewSwiper').addClass('d-none');
                        }
                        else {
                            $scope.data.ewMedia = data.Products;
                            $scope.$applyAsync(function () {
                                $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                                $("#ewSwiper .loading-gray-bars").addClass("d-none");
                                $('#ewSwiper .thumb').removeClass('d-none');
                                $('#ewSwiper .detailInfo').removeClass('d-none');
                                $("#ewSwiper .swiper-navigation").removeClass("d-none");
                                $("#ewSwiper .swiper-slide-view-more").addClass("d-block");
                                $scope.changeSwiperPagingHeight("#ewSwiper");
                                $scope.ewSwiper.update();
                            })
                        }
                    }
                });
                //New in Premium
                dataService.getSetData(constants[0].BaseUrl.refreshView, payload3).then(function (data) {
                    if (data.Error) {
                        console.log(data.Error)
                    }
                    else {
                        if (data.Products.length == 0) {
                            $('#newPremiumSwiper').addClass('d-none');
                        }
                        else {
                            $scope.data.newPremium = data.Products;
                            $scope.$applyAsync(function () {
                                $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                                $("#newPremiumSwiper .loading-gray-bars").addClass("d-none");
                                $('#newPremiumSwiper .thumb').removeClass('d-none');
                                $('#newPremiumSwiper .detailInfo').removeClass('d-none');
                                $("#newPremiumSwiper .swiper-navigation").removeClass("d-none");
                                $("#newPremiumSwiper .swiper-slide-view-more").addClass("d-block");
                                $scope.changeSwiperPagingHeight("#newPremiumSwiper");
                                $scope.newPremiumSwiper.update();
                            })
                        }
                    }
                });
            });
            
            //most recent downloads
            dataService.getSetData(constants[0].BaseUrl.getMostRecentDownloads).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.length == 0) {
                        $('#latestDownloadsSwiper').addClass('d-none');
                    }
                    else {
                        $scope.data.latestDownloads = data;
                        $scope.$applyAsync(function () {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#latestDownloadsSwiper .loading-gray-bars").addClass("d-none");
                            $('#latestDownloadsSwiper .thumb').removeClass('d-none');
                            $('#latestDownloadsSwiper .detailInfo').removeClass('d-none');
                            $("#latestDownloadsSwiper .swiper-navigation").removeClass("d-none");
                            $scope.changeSwiperPagingHeight("#latestDownloadsSwiper");
                            $scope.latestDownloadsSwiper.update();
                        })
                    }
                }

                //Recently Added
                dataService.getSetData(constants[0].BaseUrl.refreshView, payload4).then(function (data) {
                    if (data.Error) {
                        console.log(data.Error)
                    }
                    else {
                        if (data.Products.length == 0) {
                            $('#recentlyAddedSwiper').addClass('d-none');
                            console.log("test")
                        }
                        else {
                            $scope.data.recentlyAdded = data.Products;
                            $scope.$applyAsync(function () {
                                $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                                $("#recentlyAddedSwiper .loading-gray-bars").addClass("d-none");
                                $('#recentlyAddedSwiper .thumb').removeClass('d-none');
                                $('#recentlyAddedSwiper .detailInfo').removeClass('d-none');
                                $("#recentlyAddedSwiper .swiper-navigation").removeClass("d-none");
                                $("#recentlyAddedSwiper .swiper-slide-view-more").addClass("d-block");
                                $scope.changeSwiperPagingHeight("#recentlyAddedSwiper");
                                $scope.recentlyAddedSwiper.update();
                            })
                        }
                    }
                });
            });
            
        }

        $scope.changeSwiperPagingHeight = function () {
            var imgheight = $(".thumb-img").css("height");
            var topheight = $(".swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
            imgheight = $("#staffPicksSwiper .swiper-slide").css("height");
            topheight = $("#staffPicksSwiper .swiperTitleJQ").css("height");
            $("#staffPicksSwiper .JQHeight").css('height', imgheight).css('top', topheight);
        };

        $scope.select_group = function (elm) {
            $("[target]").removeClass('sel');
            var target = $(elm).attr('target');
            $("[target='" + target + "']").addClass('sel');
            switch (elm) {
                case '#new':
                    $scope.getData('13', 'n');
                    break;
                case '#seasonal':
                    $scope.getData('8', 's');
                    break;
                default:
                    break;
            };
        };

        angular.element(document).ready(function () {
            $scope.recentlyAddedSwiper = new Swiper('#recentlyAddedSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: {
                    loadOnTransitionStart: true,
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.trendingMediaSwiper = new Swiper('#trendingMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: {
                    loadOnTransitionStart: true,
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.latestDownloadsSwiper = new Swiper('#latestDownloadsSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.newPremiumSwiper = new Swiper('#newPremiumSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.seasonalSwiper = new Swiper('#seasonalSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.ewSwiper = new Swiper('#ewSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.staffPicksSwiper = new Swiper('#staffPicksSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            getData();


            function resizeMediaBannerContent() {
                if (window.innerWidth < 1550) {
                    $('#popular-search-item-5').css('display', 'none');
                } else {
                    $('#popular-search-item-5').css('display', 'list-item');
                }
                if (window.innerWidth < 1500) {
                    $('#popular-search-item-4').css('display', 'none');
                } else {
                    $('#popular-search-item-4').css('display', 'list-item');
                }
                if (window.innerWidth < 1450) {
                    $('#popular-search-item-3').css('display', 'none');
                } else {
                    $('#popular-search-item-3').css('display', 'list-item');
                }
                if (window.innerWidth < 1350) {
                    $('#popular-search-item-2').css('display', 'none');
                } else {
                    $('#popular-search-item-2').css('display', 'list-item');
                }
                if (window.innerWidth < 1215) {
                    $('#popular-searches-wrapper').css('display', 'none');
                } else {
                    $('#popular-searches-wrapper').css('display', 'flex');
                }
            }

            $(document).ready(function () {
                resizeMediaBannerContent();
            })

            window.addEventListener('resize', function () {
                var imgheight = $(".thumb-img").css("height");
                var topheight = $(".swiperTitleJQ").css("height");
                $(".JQHeight").css('height', imgheight).css('top', topheight);
                imgheight = $("#staffPicksSwiper .swiper-slide").css("height");
                topheight = $("#staffPicksSwiper .swiperTitleJQ").css("height");
                $("#staffPicksSwiper .JQHeight").css('height', imgheight).css('top', topheight);
                resizeMediaBannerContent();
            });
        });

        $rootScope.$on("updatedOrg", function (event, user) {
            window.location.reload();
        });

        $rootScope.$on('loggedOut', function () {
            window.location.reload();
        });

        $rootScope.$on('orgListReady', function (evt, data)
        {
            if (organizationService.selectedOrganization.HasPremiumSubscription && organizationService.selectedOrganization.HasSoftwareSubscription)
            {
                $scope.hasPremium = true;
            } else {
                $scope.hasPremium = false;
            }
        });
    }

    app.controller('mediaPageController', ['$scope', '$rootScope', 'dataService', 'constants', 'organizationService', mediaPageController]);

}(angular.module("softouch")));;
(function (app) {
    var photoEditorController = function ($scope, $rootScope, constants, productEventService) {

        /*const license = { "api_token": "t9MzHt2VL6pbzXxuvWuoOg", "app_identifiers": ["www.easyworship.com"], "available_actions": [], "domains": ["https://api.photoeditorsdk.com"], "enterprise_license": false, "expires_at": null, "features": ["camera", "library", "export", "customassets", "whitelabel", "adjustment", "brush", "filter", "focus", "frame", "overlay", "sticker", "text", "textdesign", "transform"], "issued_at": 1618243452, "minimum_sdk_version": "1.0", "owner": "EasyWorship ", "platform": "HTML5", "products": ["pesdk"], "version": "2.4", "signature": "FtmZMNChXtRDvAS15gtCn0/mwBcYuUNOaW139WDuSWKyRSyps08mgTrm/p/xGBD9GqsQG4SEkTICyK7Fg9sR/NK7pFuHe3YzuMycoxrFAitO3qi9QQ1lfeXuFzwKFDj5zegWUA17dqJlcKxeebr+eQLt3dNwlFjpxFF4JHPiiInKUtNmOFTVCMiLKCg+gkSLFjQLmc//6fojaWPYPJrssNm/h37m7pQZrw2uXq6T40uDtuYpC75MWCTQe9kcnRGT9yCxZwuoMJbIyJEwGH8iGvrw4cmvtY2juGw+Hu+UseenKjiNkxyhoSZW0ceAaZu1TdtmXhPeqRJtNWQ99ZvtJpFWsFsdqiP9Scv1G6xmC2vM684shp4EdXaTBzbFPX+XnlPAYVKxG/eJMbmAciBcjXkAcOm1j1aNSWq2dOAqco+R+z5DrWTlu4DtLQTW0MHnN8JaMO0f2jWj0YzvFCN0X+y8YGjxY57cvqDOodWfIeB1W6ytxoa8OLYLHYAK+yBpGwf50P9L6CfEGlqF/LuF3xRW1cuO+kC3AWZi91+tuz1FZL5B9vk5AyfLezzdKWU5/ukqvlU40pU/hzciAaEZVnWIRfDx72/YJugZrd/VW2qEFiZfxHehApaWSyR+SJGEe1Xeq18RHCa/y5RfIfS8SY6QQwXL8qkSWBASLhQDGqo=" }

        const editor = PhotoEditorSDK.PhotoEditorSDKUI.init({
            container: "#photoEditor",
            license: license,
            image: "Images/photoeditor/example.jpg",
            assetBaseUrl: "Images/photoeditor",
        });

        // The export event will be called if the user clicks on the export button
        editor.on(PhotoEditorSDK.UIEvent.EXPORT, async (image) => {
            // handle the returned image here
            });

        initEditor();*/
    };

    app.controller('photoEditorController', ['$scope', '$rootScope', 'constants', 'productEventService', photoEditorController]);

}(angular.module("softouch")));;
(function (app) {
    var popupThumbController = function ($scope, $rootScope, constants, productEventService) {
        $scope.item = {
            ProductId : 172138,
        };

        $scope.resizeImg = function resizeImg () {
            if ($('.JS-thumb-regular .img' + $scope.item.ProductId).hasClass("smaller-img")) {
                $('#JQ-popupThumb .thumb-img').addClass("smaller-img");
                $('#JQ-popupThumb .thumb').addClass("black");
                //$('.preview' + cmp.product.ProductId).addClass("black");
                $('#JQ-popupThumb .thumb-video').addClass("black");
            }
            else {
                $('#JQ-popupThumb .thumb-img').removeClass("smaller-img");
                $('#JQ-popupThumb .thumb').removeClass("black");
                //$('.preview' + cmp.product.ProductId).removeClass("black");
                $('#JQ-popupThumb .thumb-video').removeClass("black");
            }
        };

        $rootScope.$on('popupItemSet', function (evt, data) {
            $scope.item = data.item;
            $(".thumb-popup .loading-gray-bars").addClass("d-none");
            $('.thumb-popup .thumb').removeClass('d-none');

            oldvideo = document.getElementById('JQ-popupThumb').querySelector("video");
            if (oldvideo != null) {
                oldvideo.parentNode.removeChild(oldvideo);
            }

            if (!$scope.item.IsImage && $scope.item.TypeText != "Collections") {
                $('#JQ-popupThumb .preview-loader').html("<div class='preview-loader'><label >●</label ><label>●</label><label>●</label><label>●</label><label>●</label><label>●</label></div>");
                var video = document.createElement('video');
                video.src = constants[0].BaseUrl.videoBase + $scope.item.ProductId + ".mp4";
                video.autoplay = true;
                video.muted = true;
                video.classList.add("jq-video-hide", "preview"+$scope.item.ProductId, 'thumb-video');
                video.onplaying = function (event) {
                    $('#JQ-popupThumb .preview' + $scope.item.ProductId).removeClass("jq-video-hide");
                    $('#JQ-popupThumb .preview-loader' + $scope.item.ProductId).empty();
                };
                document.getElementById('JQ-popupThumb').querySelector("#videoWrapper-popup").append(video);

                var p = {
                    productId: $scope.item.ProductId,
                    eventId: 4
                };
                productEventService.insertProductEvent(p);
            }

            $scope.resizeImg();
        });
    };

    app.controller('popupThumbController', ['$scope', '$rootScope', 'constants', 'productEventService', popupThumbController]);

}(angular.module("softouch")));;

(function (app) {
    var premiumController = function ($rootScope, $scope, dataService, constants, cartService) {
        window.peekpremium = $scope;
        $scope.data = {
            loadingData: [],
            producerPack: {},
            miniMovies: [],
            titleMedia: [],
            countdown: [],
            collection: [],
            lowerThirds: [],
            socialMedia: [],
            overlays: [],
            lyricMedia: [],
        };

        var OrderBy = constants[0].SortedBy.Newest;

        for (i = 0; i < 20; i++) {
            $scope.data.loadingData.push({});
        }

        $scope.data.miniMovies = $scope.data.loadingData;
        $scope.data.backgrounds = $scope.data.loadingData;
        $scope.data.titleMedia = $scope.data.loadingData;
        $scope.data.countdown = $scope.data.loadingData;
        $scope.data.collection = $scope.data.loadingData;
        $scope.data.lowerThirds = $scope.data.loadingData;
        $scope.data.socialMedia = $scope.data.loadingData;
        $scope.data.overlays = $scope.data.loadingData;
        $scope.data.lyricMedia = $scope.data.loadingData;

        //Check Browser
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));
        $rootScope.isMac = (checkMac && !checkIpad && !checkiPhone);



        var getData = function () {
            //console.log('getData')
            var commonFilterParams = constants[0].ProductViewFilterKey.AllPremium + '/' + constants[0].ProductViewFilterKey.ItemsPerPage + '/20/' + constants[0].ProductViewFilterKey.OrderBy + '/' + OrderBy;

            //miniMovie
            var sp1 = (constants[0].ProductViewFilterKey.ProductTypes + '/' + constants[0].ProductType.Minimovie + '/' + commonFilterParams);
            var payload1 = { 'filter': sp1 };
            //backgrounds
            var sp2 = (constants[0].ProductViewFilterKey.ProductTypes + '/' + constants[0].ProductType.Background + '/' + commonFilterParams);
            var payload2 = { 'filter': sp2 };
            //titleMedia
            var sp3 = (constants[0].ProductViewFilterKey.ProductTypes + '/' + constants[0].ProductType.TitleMedia + '/' + commonFilterParams);
            var payload3 = { 'filter': sp3 };
            //countdowns
            var sp4 = (constants[0].ProductViewFilterKey.ProductTypes + '/' + constants[0].ProductType.Countdown + '/' + commonFilterParams);
            var payload4 = { 'filter': sp4 };
            //collections
            var sp5 = (constants[0].ProductViewFilterKey.Bundles + '/' + commonFilterParams);
            var payload5 = { 'filter': sp5 };
            //lowerThirds
            var sp6 = (constants[0].ProductViewFilterKey.ProductTypes + '/' + constants[0].ProductType.LowerThirds + '/' + commonFilterParams);
            var payloadLowerThirds = { 'filter': sp6 };
            //socialMedia
            var sp7 = (constants[0].ProductViewFilterKey.ProductTypes + '/' + constants[0].ProductType.SocialMedia + '/' + commonFilterParams);
            var payloadSocialMedia = { 'filter': sp7 };
            /*console.log(payloadSocialMedia)*/
            //overlays
            var sp8 = (constants[0].ProductViewFilterKey.MediaType + '/' + constants[0].ProductMediaType.Overlays + '/' + commonFilterParams);
            var payloadOverlays = { 'filter': sp8 };
            /*console.log(payloadOverlays)*/
            //lyricMedia
            var sp9 = (constants[0].ProductViewFilterKey.ProductTypes + '/' + constants[0].ProductType.LyricMedia + '/' + commonFilterParams);
            var payloadLyricMedia = { 'filter': sp9 };

            dataService.getSetData(constants[0].BaseUrl.refreshView, payload1).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#miniMovieSwiper').addClass('d-none');
                    }
                    else {
                        $('#miniMovieSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.miniMovies = data.Products;
                        $scope.data.miniMoviesCount = data.ProductCount;
                        $("#miniMovieSwiper .loading-gray-bars").addClass("d-none");
                        $('#miniMovieSwiper .thumb').removeClass('d-none');
                        $('#miniMovieSwiper .detailInfo').removeClass('d-none');
                        $("#miniMovieSwiper .swiper-navigation").removeClass("d-none");
                        $scope.changeSwiperPagingHeight("#miniMovieSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload2).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#backgroundSwiper').addClass('d-none');
                    }
                    else {
                        $('#backgroundSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.backgrounds = data.Products;
                        $scope.data.backgroundsCount = data.ProductCount;
                        $("#backgroundSwiper .loading-gray-bars").addClass("d-none");
                        $('#backgroundSwiper .thumb').removeClass('d-none');
                        $('#backgroundSwiper .detailInfo').removeClass('d-none');
                        $("#backgroundSwiper .swiper-slide-view-more").addClass("d-block");
                        $("#backgroundSwiper .swiper-navigation").removeClass("d-none");
                        $scope.changeSwiperPagingHeight("#backgroundSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload3).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#titleMediaSwiper').addClass('d-none');
                    }
                    else {
                        $('#titleMediaSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.titleMedia = data.Products;
                        $scope.data.titleMediaCount = data.ProductCount;
                        $("#titleMediaSwiper .loading-gray-bars").addClass("d-none");
                        $('#titleMediaSwiper .thumb').removeClass('d-none');
                        $('#titleMediaSwiper .detailInfo').removeClass('d-none');
                        $("#titleMediaSwiper .swiper-slide-view-more").addClass("d-block");
                        $("#titleMediaSwiper .swiper-navigation").removeClass("d-none");
                        $scope.changeSwiperPagingHeight("#titleMediaSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload4).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#countdownSwiper').addClass('d-none');
                    }
                    else {
                        $('#countdownSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.countdown = data.Products;
                        $scope.data.countdownCount = data.ProductCount;
                        $("#countdownSwiper .loading-gray-bars").addClass("d-none");
                        $('#countdownSwiper .thumb').removeClass('d-none');
                        $('#countdownSwiper .detailInfo').removeClass('d-none');
                        $("#countdownSwiper .swiper-slide-view-more").addClass("d-block");
                        $("#countdownSwiper .swiper-navigation").removeClass("d-none");
                        $scope.changeSwiperPagingHeight("#countdownSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload5).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#collectionSwiper').addClass('d-none');
                    }
                    else {
                        $('#collectionSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.collection = data.Products;
                        $scope.data.collectionCount = data.ProductCount;
                        $("#collectionSwiper .loading-gray-bars").addClass("d-none");
                        $('#collectionSwiper .thumb').removeClass('d-none');
                        $('#collectionSwiper .detailInfo').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#collectionSwiper");
                        $("#collectionSwiper .swiper-navigation").removeClass("d-none");
                    }
                }
            });
            //temporary turn off lower thirds
            dataService.getSetData(constants[0].BaseUrl.refreshView, payloadLowerThirds).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#lowerThirdsSwiper').addClass('d-none');
                    }
                    else {
                        $('#lowerThirdsSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.lowerThirds = data.Products;
                        $scope.data.lowerThirdsCount = data.ProductCount;
                        $("#lowerThirdsSwiper .loading-gray-bars").addClass("d-none");
                        $('#lowerThirdsSwiper .thumb').removeClass('d-none');
                        $('#lowerThirdsSwiper .detailInfo').removeClass('d-none');
                        $("#lowerThirdsSwiper .swiper-navigation").removeClass("d-none");
                        $scope.changeSwiperPagingHeight("#lowerThirdsSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payloadSocialMedia).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    /*console.log(data.Products)*/
                    if (data.Products.length == 0) {
                        $('#socialMediaSwiper').addClass('d-none');
                    }
                    else {
                        $('#socialMediaSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.socialMedia = data.Products;
                        $scope.data.socialMediaCount = data.ProductCount;
                        $("#socialMediaSwiper .loading-gray-bars").addClass("d-none");
                        $('#socialMediaSwiper .thumb').removeClass('d-none');
                        $('#socialMediaSwiper .detailInfo').removeClass('d-none');
                        $("#socialMediaSwiper .swiper-navigation").removeClass("d-none");
                        $scope.changeSwiperPagingHeight("#socialMediaSwiper");
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payloadOverlays).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#overlaysSwiper').addClass('d-none');
                    }
                    else {
                        $('#overlaysSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.overlays = data.Products;
                        $scope.data.overlaysCount = data.ProductCount;
                        $("#overlaysSwiper .loading-gray-bars").addClass("d-none");
                        $('#overlaysSwiper .thumb').removeClass('d-none');
                        $('#overlaysSwiper .detailInfo').removeClass('d-none');
                        $("#overlaysSwiper .swiper-navigation").removeClass("d-none");
                        $scope.changeSwiperPagingHeight("#overlaysSwiper");
                    }
                }
            });
            //temporary turn off lyric Media
            /*dataService.getSetData(constants[0].BaseUrl.refreshView, payloadLyricMedia).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#lyricMediaSwiper').addClass('d-none');
                    }
                    else {
                        $('#LyricMediaSwiper .thumb-img').attr('src', "/Images/1080p-Thumbnail.png");
                        $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                        $scope.data.lyricMedia = data.Products;
                        $scope.data.lyricMediaCount = data.ProductCount;
                        $("#lyricMediaSwiper .loading-gray-bars").addClass("d-none");
                        $('#lyricMediaSwiper .thumb').removeClass('d-none');
                        $('#lyricMediaSwiper .detailInfo').removeClass('d-none');
                        $scope.changeSwiperPagingHeight("#lyricMediaSwiper");
                    }
                }
            });*/
        }

        $scope.loaded = function (test) {
            if ($scope.miniMovieSwiper != undefined) {
                $scope.miniMovieSwiper.update();
                $scope.backgroundSwiper.update();
                $scope.titleMediaSwiper.update();
                $scope.countdownSwiper.update();
                $scope.collectionSwiper.update();
            }
        }

             // Set the sort order of the products
        $('.toggle-item').click(function () {
            if (!$(this).hasClass("selected")) {
                $('.toggle-item').removeClass('selected');
                $(this).addClass("selected");
                if (OrderBy == constants[0].SortedBy.Newest) {
                    OrderBy = constants[0].SortedBy.Trending
                }
                else {
                    OrderBy = constants[0].SortedBy.Newest
                }
                $(".loading-gray-bars").removeClass('d-none');
                $('.thumb').addClass("d-none");
                $('.detailInfo').addClass('d-none');
                getData();
            };
        });

        $scope.changeSwiperPagingHeight = function (swiper) {
            var imgheight = $(swiper + " .thumb-img").css("height");
            var topheight = $(swiper + " .swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        $scope.changeSwiperPagingHeightResize = function () {
            var imgheight = $(".thumb-img").css("height");
            var topheight = $(".swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        $scope.scrollToPromo = function () {
            document.getElementById("featured-promo").scrollIntoView();
        }

        $scope.addToCart = function (evt) {
            if ($scope.data.producerPack.ProductId !== null) {
                cartService.cartIt($scope.data.producerPack, true)
                    .then(function (data) {
                        var url = constants[0].Urls.checkoutSummary;

                        if ($("body").hasClass("integratedStore")) {
                        }

                        window.location.href = url;
                    });
            }
        };

        angular.element(document).ready(function () {
            //$scope.initObjects(true);
            $scope.backgroundSwiper = new Swiper('#backgroundSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.titleMediaSwiper = new Swiper('#titleMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.countdownSwiper = new Swiper('#countdownSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            /*$scope.miniMovieSwiper = new Swiper('#miniMovieSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: {
                    loadOnTransitionStart: true,
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.collectionSwiper = new Swiper('#collectionSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.lowerThirdsSwiper = new Swiper('#lowerThirdsSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.socialMediaSwiper = new Swiper('#socialMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.overlaysSwiper = new Swiper('#overlaysSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });
            $scope.lyricMediaSwiper = new Swiper('#lyricMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 768px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 30,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 992px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 30,
                        slidesPerGroup: 3,
                    },
                    // when window width is >= 1200px
                    1200: {
                        slidesPerView: 4,
                        spaceBetween: 30,
                        slidesPerGroup: 4,
                    }
                }
            });*/

            if (!$scope.ie) {
                /** Animate "new" features label **/
                const newFeatures = document.querySelectorAll('.jq-animate-callout');

                function animateCallout(entries) {

                    entries.map(function (entry) {
                        if (entry.isIntersecting) {
                            entry.target.classList.add('visible')
                        } else {
                            entry.target.classList.remove('visible')
                        }
                    })
                };

                let options = {
                    threshold: 1.0
                }
                const observer = new IntersectionObserver(animateCallout, options);
                newFeatures.forEach(function (newFeature) { return observer.observe(newFeature) });
            }

            getData();
            window.onresize = $scope.changeSwiperPagingHeight; // Needs to have resize functionality fixed
        });
    }
    app.controller('premiumController', ['$rootScope', '$scope', 'dataService', 'constants', 'cartService', premiumController]);
}(angular.module("softouch")));;
(function (app) {
    var pricing2Controller = function ($scope, $rootScope, cartService, dataService, constants, userService) {
        window.peekPricing = $scope;

        Number.prototype.pad = function (size) {
            var s = String(this);
            while (s.length < (size || 2)) { s = "0" + s; }
            return s;
        };

        $scope.userLoggedIn = false;

        $scope.monthlyPlans = {};
        $scope.annualPlans = {};
        //used for the two select inputs
        $scope.subscriptionTypes = [];

        $scope.subscription = {};
        $scope.oneTimePurchase = {};

        $scope.choosenType = "yearly";

        //toggle
        $("#subscriptionSwitch").click(function () {
            $(this).toggleClass("on");
            $('.monthly').toggleClass('show');
            $('.annual').toggleClass('show');
            if ($scope.choosenType == "yearly")
                $scope.choosenType = "monthly"
            else
                $scope.choosenType = "yearly"
        });

/*        $("#oneTimePurchaseSwitch").click(function () {
            $(this).toggleClass("on");
            if ($(this).hasClass("on")) {
                $scope.licensePriceDollars = oneTimePlans[1].Price;
                $scope.projectionLicense = oneTimePlans[1].OptionTitle;
            }
            else {
                $scope.licensePriceDollars = oneTimePlans[0].Price;
                $scope.projectionLicense = oneTimePlans[0].OptionTitle;
            }
        });*/

        //tab controlls
        $('.pricing-tab').click(function () {
            if (!$(this).hasClass("selected")) {
                $('.pricing-tab').removeClass('selected');
                $(this).addClass("selected");
                if ($('#subscriptions').hasClass('d-none')) {
                    $('#subscriptions').removeClass('d-none')
                    $('#oneTimePurchase').addClass('d-none')
                }
                else {
                    $('#oneTimePurchase').removeClass('d-none')
                    $('#subscriptions').addClass('d-none')
                }
            }
        })

        $scope.buyNow = function (id, type) {
            console.log(id)
            var item = {};
            item.CartDetailId = id;
            cartService.cartIt(item, true)
                .then(function (data) {
                    var url = '/checkout';

                    if ($("body").hasClass("integratedStore")) {
                        url = "/checkout/register";
                    }

                    window.location.href = url;
                });
        };

/*        $scope.selectedOneTimePurchase = function () {
            $scope.licensePrice = $scope.oneTimePurchase.price;
            $scope.licenseId = $scope.oneTimePurchase.id;
            $scope.licensePriceDollars = $scope.oneTimePurchase.price;
            $scope.projectionLicense = $scope.oneTimePurchase.projection;
            $scope.checkMark = $scope.oneTimePurchase.checkMark;
        }*/

        $scope.getPlans = function () {
            var baseUrl = constants[0].BaseUrl.softwareOptions;
            var params = null;
            return dataService.getSetData(baseUrl, params).then(function (data) {
                if (data.Error) {
                    return null;
                }
                else {
                    return parsePlans(data);
                }
            });
        };

        var parsePlans = function (data) {
            oneTimePlans = data.filter(function (product) {
                return product.SubscriptionTerm === 0;
            });

            $.each(oneTimePlans, function (key, value) {
                if (value.OptionTitle == "Campus License") {
                    $scope.campusPrice = value.Price
                    $scope.campusId = value.DetailId;
                }
                else if (value.OptionTitle == "Single License") {
                    $scope.singlePrice = value.Price
                    $scope.singleProjectorId = value.DetailId;
                }
            });

            $scope.annualPlans = data.filter(function (product) {
                return product.SubscriptionTerm === 2;
            });

            $scope.monthlyPlans = data.filter(function (product) {
                return product.SubscriptionTerm === 1;
            });

            $scope.baseAnnualPlans = $scope.annualPlans.filter(function (product) {
                return product.IsPremium === false;
            });

            $scope.premiumAnnualPlans = $scope.annualPlans.filter(function (product) {
                return product.IsPremium === true;
            });

            $scope.baseMonthlyPlans = $scope.monthlyPlans.filter(function (product) {
                return product.IsPremium === false;
            });

            $scope.premiumMonthlyPlans = $scope.monthlyPlans.filter(function (product) {
                return product.IsPremium === true;
            });

            var subscriptionListSet = false;
            $.each($scope.baseMonthlyPlans, function (key, value) {
                console.log(value)
                var baseYearlyPlan = $scope.baseAnnualPlans.filter(function (annualPlan, ind) {
                    return value.OptionTitle == annualPlan.OptionTitle;
                });

                var premiumMonthPlan = $scope.premiumMonthlyPlans.filter(function (monthPlan, ind) {
                    return value.OptionTitle == monthPlan.OptionTitle;
                });

                var premiumYearlyPlan = $scope.premiumAnnualPlans.filter(function (annualPlan, ind) {
                    return value.OptionTitle == annualPlan.OptionTitle;
                });

                var tmpids = { monthly: value.DetailId, yearly: baseYearlyPlan[0].DetailId };

                var tmpids_premium = { monthly: premiumMonthPlan[0].DetailId, yearly: premiumYearlyPlan[0].DetailId };

                var tmp = {

                    name: value.OptionTitle,
                    base: {
                        id: tmpids,
                        value: value.OptionTitle,
                        priceMonthly: value.Price,
                        priceAnnual: baseYearlyPlan[0].Price,
                        savings: ((value.Price * 12) - baseYearlyPlan[0].Price),
                    },
                    premium: {
                        id: tmpids_premium,
                        value: value.OptionTitle,
                        priceMonthly: premiumMonthPlan[0].Price,
                        priceAnnual: premiumYearlyPlan[0].Price,
                        savings: ((premiumMonthPlan[0].Price * 12) - premiumYearlyPlan[0].Price),
                    }
                };

                $scope.subscriptionTypes.push(tmp);

                if (subscriptionListSet == false) {
                    $scope.subscription = $scope.subscriptionTypes[0];
                    subscriptionListSet = true;
                };
            });
        };

        $rootScope.$on("loginDataReady", function (event, user) {
            console.log(user.data)
            if (user.data.length > 0) {
                $scope.userLoggedIn = true;
                $scope.userHasSubscription = user.data[0].HasSoftwareSubscription;
                $scope.userIsPremium = user.data[0].IsPremium;
                if ($scope.userHasSubscription && !$scope.userIsPremium) {
                    $('#basicSubscription').addClass("dark")
                    $('#basicBuyNow').prop('disabled', true)
                }
            }
            else {
                $scope.userLoggedIn = false;
            }
        });

        angular.element(document).ready(function () {
            $scope.getPlans();
        });
    };

    app.controller('pricing2Controller', ['$scope', '$rootScope', 'cartService', 'dataService', 'constants', 'userService', pricing2Controller]);
}(angular.module("softouch")));;
(function (app) {
    var pricingController = function ($scope, $rootScope, cartService, pricingService) {
        window.peekPricing = $scope;

        $scope.pageData = {
            oneTimePurchase: {},
            subscriptionTypes: [],
            currentSubscription: {},
        };
        $scope.otp = {};

        $scope.userLoggedIn = false;

        /*$scope.buyNow = function (id) {
            console.log(id);
            var item = {};
            item.CartDetailId = id;
            cartService.cartIt(item, true)
                .then(function (data) {
                    var url = '/checkout/addons';

                    if ($("body").hasClass("integratedStore")) {
                        url = "/checkout/register";
                        console.log('body has integrated Store', $scope.pageData);
                    }

                    //window.location.href = url;
                });
        };*/

        //toggle
        $(".label-wrapper, .knob").click(function () {
            $scope.togglePlan()
        });

        //tab controlls
        $('.jq-toggle-pricing-nav').click(function () {
            if (!$(this).hasClass("selected")) {
                $('.jq-toggle-pricing-nav').removeClass('selected');
                $(this).addClass("selected");
                if ($('#subscriptions').hasClass('d-none')) {
                    $('#subscriptions').removeClass('d-none');
                    $('#oneTimePurchase').addClass('d-none');
                }
                else {
                    $('#oneTimePurchase').removeClass('d-none');
                    $('#subscriptions').addClass('d-none');
                }
            }
        })

        $scope.getPlans = function () {
            pricingService.getPricing()
                .then(function (data) {
                    if (data.Error) {
                        return null;
                    }
                    else {
                        /*console.log("getPlans", data);*/
                        $scope.pageData.currentSubscription = data.currentSubscription;
                        $scope.pageData.subscriptionTypes = data.softwareOptions;
                        $scope.pageData.oneTimePurchase = data.oneTimePurchase;
                        $scope.pageData.premiumCount = data.premiumCount;
                        $scope.otp = $scope.pageData.oneTimePurchase.Campus;
                        $scope.pageData.storeCreditBalance = data.storeCreditBalance;

                        return
                    }
                });
        };

        $rootScope.$on("updatedOrg", function (event, user) {
            $scope.getPlans();
        });

        $rootScope.$on('loggedOut', function () {
            $scope.getPlans();
        });

        $rootScope.$on("loginDataReady", function (event, user) {
            /*console.log(user.data)*/
            if (user.data.length > 0) {
                $scope.userLoggedIn = true;
            }
            else {
                $scope.userLoggedIn = false;
            }
        });

        angular.element(document).ready(function () {
            $scope.getPlans();
        });
    };

    app.controller('pricingController', ['$scope', '$rootScope', 'cartService', 'pricingService', pricingController]);
}(angular.module("softouch")));;
(function (app) {
    var pricingControllerOld = function ($scope, $rootScope, cartService, dataService, constants, listService) {
        window.peekPricing = $scope;

        Number.prototype.pad = function (size) {
            var s = String(this);
            while (s.length < (size || 2)) { s = "0" + s; }
            return s;
        };

        $scope.subscriptionIdIndex = 2;
        $scope.annualMonthlyPriceText = 'Billed Monthly';
        $scope.annual = true;
        $scope.annualSubscriptionPrice = "180"
        $scope.annualSubscription = {};
        $scope.a = {};
        var monthlyPlans = {};
        var annualPlans = {};
        var oneTimePlans = {};
        $scope.projectionLicense = 'Campus license';
        $scope.checkMark = 'checkmarkGreen';

        //used for the two select inputs
        $scope.subscriptionTypes = [];
        $scope.oneTimePurchaseTypes = [];

        $scope.subscription = {};
        $scope.oneTimePurchase = {};

        $scope.buyNow = function (id) {
            var item = {};
            item.CartDetailId = id;
            cartService.cartIt(item, true)
                .then(function (data) {
                    var url = '/checkout/addons';

                    if ($("body").hasClass("integratedStore")) {
                        url = "/checkout/register";
                    }

                    window.location.href = url;
                });
        };

        $scope.selectedSubscription = function () {
            //console.log($scope.subscription)
            $scope.monthlySubscriptionPrice = $scope.subscription.priceMonthly;
            $scope.monthlySubscriptionPriceDollars = Math.floor($scope.subscription.priceMonthly);
            $scope.monthlySubscriptionPriceCents = '00';

            $scope.annualSubscriptionPrice = $scope.subscription.priceAnnual;
            $scope.annualSubscriptionPriceDollars = $scope.subscription.priceAnnualPerMonthDollar;
            $scope.annualSubscriptionPriceCents = $scope.subscription.priceAnnualPerMonthCent;

            $scope.subscriptionId = $scope.subscription.id;
            $scope.a.value = 'at $' + $scope.subscription.priceAnnual;

            $scope.toggleAnn();
        }

        $scope.selectedOneTimePurchase = function () {
            $scope.licensePrice = $scope.oneTimePurchase.price;
            $scope.licenseId = $scope.oneTimePurchase.id;
            $scope.licensePriceDollars = $scope.oneTimePurchase.price;
            $scope.licensePriceCents = '00';
            $scope.projectionLicense = $scope.oneTimePurchase.projection;
            $scope.checkMark = $scope.oneTimePurchase.checkMark;
        }

        $scope.annualToggle = function (val) {
            $('#monthly').removeClass('show');
            $('.annual').removeClass('show');
            $scope.annual = val;
            $scope.toggleAnn();
        };

        $scope.toggleAnn = function () {
            if ($scope.annual) {
                $scope.annualMonthlyPriceText = 'Billed Yearly at $' + $scope.annualSubscriptionPrice;
                $scope.subscriptionIdIndex = 2;
                $('.annual').addClass('show');
            }
            else {
                $scope.annualMonthlyPriceText = 'Billed Monthly';
                $scope.subscriptionIdIndex = 1;
                $('#monthly').addClass('show');
            }
        };

        $scope.getPlans = function () {
            var baseUrl = constants[0].BaseUrl.softwareOptions;
            var params = null;
            return dataService.getSetData(baseUrl, params).then(function (data) {
                if (data.Error) {
                    return null;
                }
                else {
                    return parsePlans(data);
                }
            });
        };

        var parsePlans = function (data) {
            oneTimePlans = data.filter(function (product) {
                return product.SubscriptionTerm === 0;
            });

            annualPlans = data.filter(function (product) {
                return product.SubscriptionTerm === 2;
            });

            monthlyPlans = data.filter(function (product) {
                return product.SubscriptionTerm === 1;
            });

            $.each(monthlyPlans, function (key, value) {
                var yearlyPlan = annualPlans.filter(function (annualPlan, ind) {
                    return value.OptionTitle == annualPlan.OptionTitle;
                });

                var tmpids = { 1: value.DetailId, 2: yearlyPlan[0].DetailId };

                var tmp = {
                    id: tmpids,
                    name: value.OptionTitle + ' Members',
                    value: value.OptionTitle,
                    priceMonthly: value.Price,
                    priceAnnual: yearlyPlan[0].Price,
                    priceAnnualPerMonthDollar: Math.floor(yearlyPlan[0].Price / 12),
                    priceAnnualPerMonthCent: (((yearlyPlan[0].Price) % 12) / 12 * 100).pad()
                };

                $scope.subscriptionTypes.push(tmp);
            });

            initControls();
        };

        var initControls = function () {

            $scope.licensePrice = oneTimePlans[0].Price;
            $scope.licensePriceDollars = oneTimePlans[0].Price;
            $scope.licensePriceCents = '00';

            $scope.subscriptionId = $scope.subscriptionTypes[0].id;
            $scope.licenseId = oneTimePlans[0].DetailId;

            $scope.annualSubscriptionPrice = $scope.subscriptionTypes[0].priceAnnual;
            $scope.annualSubscriptionPriceDollars = Math.floor($scope.annualSubscriptionPrice / 12);
            $scope.annualSubscriptionPriceCents = ((($scope.annualSubscriptionPrice % 12) / 12) * 100).pad();

            $scope.monthlySubscriptionPrice = $scope.subscriptionTypes[0].priceMonthly;
            $scope.monthlySubscriptionPriceDollars = $scope.subscriptionTypes[0].priceMonthly;
            $scope.monthlySubscriptionPriceCents = $scope.subscriptionTypes[0].priceAnnualPerMonthCent;
            $scope.a.value = 'at $' + $scope.subscriptionTypes[0].priceAnnual;

            $scope.oneTimePurchaseTypes = listService.getStaticList('license');

            // Link init the select list items to 0
            $scope.subscription = $scope.subscriptionTypes[0];
            $scope.oneTimePurchase = $scope.oneTimePurchaseTypes[0];
        };

        $scope.getPlans();
        $scope.toggleAnn();
    };

    app.controller('pricingControllerOld', ['$scope', '$rootScope', 'cartService', 'dataService', 'constants', 'listService', pricingControllerOld]);
}(angular.module("softouch")));;
(function (app) {
    var primaryMenuController = function ($scope, $rootScope, dataService) {
        $scope.fadeMenuIn = function () {
            $(".jq-opacity-fade").stop(true, true).animate({ opacity: "1" }, 200);
        }
        $scope.fadeMenuOut = function () {
            $(".jq-opacity-fade").stop(true, true).animate({ opacity: ".9" }, 200);
        }
    }
    app.controller('primaryMenuController', ['$scope', '$rootScope', 'dataService', primaryMenuController]);
}(angular.module("softouch")));;
(function (app) {
    var producerController = function ($scope, dataService) {
        peekProducer = $scope;
        $scope.error = {};
        $scope.info = {};
        $scope.signup = {};
        //$scope.signup.producerName = "elmer fudd";
        //$scope.signup.company = "warner studios";
        //$scope.signup.email = "elmer.fudd@yahoo.com";
        //$scope.signup.why = "because";

        $scope.showSignup = function () {
            $scope.signup = {};
            $scope.signupForm.$setUntouched();
            $scope.submitted = false;
            $("#signupModal").modal();
        };

        $scope.submitSignup = function () {
            // prevent double click
            if ($scope.postingForm === true) {
                return;
            } else {
                $scope.postingForm = true;
            }

            $scope.submitted = true;

            if (!$scope.signupForm.$valid) {
                $scope.postingForm = false;
                return;
            }

            $scope.info.messages = ["Submitting Request"];
            showModalInfoMessage();

            var onSuccess = function (data) {
                $scope.postingForm = false;

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showModalErrorMessage();
                }
                else {
                    $scope.submitted = false;
                    $scope.info.messages = [];
                    hideMessage();
                    $scope.signup = {};
                    $scope.signupForm.$setUntouched();
                    $("#Producer-Success").removeClass('d-none');
                    $("#Producer-Form").addClass("d-none");
                }
            };

            var onError = function (reason) {
                $scope.postingForm = false;
                $scope.error.messages = [reason];
                showModalErrorMessage();
            };

            var data = $scope.signup;

            dataService.getSetData("/component/producerSignup", data)
                .then(onSuccess, onError);
        }

        angular.element(document).ready(function () {
            $("#signupModal").on('hidden.bs.modal', function (e) {
                if ($("#Producer-Form").attr("class") == "d-none") {
                    $("#Producer-Success").addClass("d-none");
                    $("#Producer-Form").removeClass('d-none');
                }
            })
        });
    }
    app.controller('producerController', ['$scope', 'dataService', producerController]);
}(angular.module("softouch")));;
(function (app) {
    var productController = function ($scope, $rootScope, constants, dataService) {
        window.peekDetail = $scope;
        $('html,body').scrollTop(0);
        $scope.product = {};
        $scope.product.purchasing = false;
        

        $scope.mayLike = [];
        $scope.moreBy = [];

        for (i = 0; i < 20; i++) {
            $scope.mayLike.push({});
            $scope.moreBy.push({});
        }

        $scope.double = true;
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));
        $rootScope.isMac = (checkMac && !checkIpad && !checkiPhone);

        //$scope.toggleLike = function () {
        //    $('#moreByContainer').toggleClass('d-none');
        //    $('#mightLikeContainer').toggleClass('d-none');
        //    $('.tab').toggleClass('active');
        //    $rootScope.$broadcast('toggleLike', {
        //        'moreby': !$('#moreByContainer').hasClass('d-none'),
        //        'mightLike': !$('#mightLikeContainer').hasClass('d-none')
        //    });
        //};

        $scope.getYouMightLike = function () {

            $scope.viewAllLikeThisUrl = "/media/morelike/" + $scope.product.ProductId;

            var postData = { productId: $scope.product.ProductId, productType: $scope.product.Type };

            dataService.getSetData("/component/GetProductsForTags", postData).then(function (data) {
                if (data.Error) {
                    console.log({ getYouMightLikeError: data });
                }
                else {
                    $scope.mayLike = data;
                    $("#mayLikeSwiper .loading-gray-bars").addClass("d-none");
                    $('#mayLikeSwiper .thumb').removeClass('d-none');
                    $("#mayLikeSwiper .swiper-slide-view-more").addClass("d-block");
                    $("#mayLikeSwiper .swiper-navigation").removeClass("d-none");
                    $scope.changeSwiperPagingHeight()
                }
            }, function (response) {
                console.log({ getYouMightLikeDBError: response });
            });
        };

        $scope.getMoreBy = function () {
            var dat = { 'producer_id': $scope.product.ProducerId };
            $scope.viewAllProducersUrl = $scope.product.ProducerUrl
            dataService.getSetData("/component/GetMoreByForProducer", dat).then(function (data) {
                if (data.Error) {
                    console.log(data.Error);
                }
                else {
                    $scope.moreBy = data;
                    $("#alsoBySwiper .loading-gray-bars").addClass("d-none");
                    $('#alsoBySwiper .thumb').removeClass('d-none');
                    $("#alsoBySwiper .swiper-slide-view-more").addClass("d-block");
                    $("#alsoBySwiper .swiper-navigation").removeClass("d-none");
                    $scope.changeSwiperPagingHeight()
                }
            }, function (response) {
            });
        };

        //$scope.setViewAllProducers = function () {
        //    $scope.viewAllProducers = "/media/producer/" + $scope.sesonal.seosonId + "/" + $scope.seasonal.seasonId;
        //    console.log("setViewAllUrl", $scope.viewAllUrl)
        //};

        /*$scope.loaded = function (swipernumber) {
            if ($scope.alsoBySwiper != undefined) {
                $scope.alsoBySwiper.update();
                $scope.mayLikeSwiper.update();
            }
            $('#mightLikeContainer').addClass('fadein');
            $('#detailControlButtons').removeClass('d-none');
            $('#previewThumbs').removeClass('d-none');
            $('#panelThumbs').addClass('expand');
            $('#panelWait').addClass('off');
  
        }*/

        $scope.changeSwiperPagingHeight = function (from) {
            //console.log(from)
            var imgheight = $(".thumb").css("height");
            var topheight = $(".swiperTitleJQ").css("height");
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        $scope.getProductData = function () {
            data = { 'filter': "/pid/" + $scope.product.ProductId };

            dataService.getSetData("/component/refreshView", data)
                .then(function (data) {
                    if (data.Error) {

                    } else {
                        $scope.product = data.Products[0];
                    }
                });
        };

        $rootScope.$on("updatedOrg", function () {
            $scope.getProductData();
        });

        $rootScope.$on('loggedOut', function () {
            $scope.getProductData();
        });

        angular.element(document).ready(function () {
            $scope.alsoBySwiper = new Swiper('#alsoBySwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.mayLikeSwiper = new Swiper('#mayLikeSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });   
            $scope.getMoreBy();
            $scope.getYouMightLike();

            window.onresize = $scope.changeSwiperPagingHeight;
        });

    }
    app.controller('productController', ['$scope', '$rootScope', 'constants', 'dataService', productController]);
}(angular.module("softouch")));
;
(function (app) {
    var promoController = function ($scope, dataService) {
        window.peekPromo = $scope;

        $scope.error = {};

        $scope.tabPrefix = "figure";
        $scope.activeTab = 1;
        $scope.maxTabs = $("figure").length;

        $scope.select_group = function (tabNumber) {
            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + tabNumber + "']").addClass('sel');
            $scope.activeTab = parseFloat(tabNumber);
        };

        $scope.select_next = function () {
            if ($scope.activeTab + 1 > $scope.maxTabs) {
                $scope.activeTab = 1;
            } else {
                $scope.activeTab += 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.select_previous = function () {
            if ($scope.activeTab - 1 < 1) {
                $scope.activeTab = $scope.maxTabs;
            } else {
                $scope.activeTab -= 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.submit = function () {
            if ($scope.promo.code == '') {
                $scope.error.messages = ["Please enter a promo code."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    window.location.href = "/software/pricing";
                }
            };

            var onError = function (response) {
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            dataService
                .getSetData("/component/validatePromo/", $scope.promo)
                .then(onSuccess, onError);
        };

        $scope.displayPromoTerms = function () {
            $("#promoTermsModal").modal();
        };

        angular.element(document).ready(function () {
            if ($scope.error.messages.length > 0)
                showErrorMessage();
        });
    };

    app.controller('promoController', ['$scope', 'dataService', promoController]);

}(angular.module("softouch")));;
(function (app) {
    var seasonalController = function ($rootScope, $scope, dataService, constants) {
        window.peekFeatured = $scope;
        $scope.active = {};
        $scope.seasonal = {};
        $scope.seasonal.activeProductType = constants[0].ProductType.Minimovie;
        $scope.season = {};
        $scope.data = {
            loadingData: [],
            miniMovies: [],
            titleMedia: [],
            countdown: [],
            collection: [],
            popupThumb: {}
        };
        var OrderBy = constants[0].SortedBy.Newest;

        for (i = 0; i < 20; i++) {
            $scope.data.loadingData.push({});
        }

        $scope.data.miniMovies = $scope.data.loadingData;
        $scope.data.backgrounds = $scope.data.loadingData;
        $scope.data.titleMedia = $scope.data.loadingData;
        $scope.data.countdown = $scope.data.loadingData;
        $scope.data.collection = $scope.data.loadingData;

        //Check Browser
        var checkIpad = (/iPad/.test(navigator.userAgent));
        var checkiPhone = (/iPhone/.test(navigator.userAgent));
        $scope.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        var checkMac = (/Mac OS X/.test(navigator.userAgent));
        $rootScope.isMac = (checkMac && !checkIpad && !checkiPhone);

        // Set the sort order of the products
        $('.toggle-item').click(function () {
            if (!$(this).hasClass("selected")) {
                $('.toggle-item').removeClass('selected');
                $(this).addClass("selected");
                if (OrderBy == constants[0].SortedBy.Newest) {
                    OrderBy = constants[0].SortedBy.Trending;
                }
                else {
                    OrderBy = constants[0].SortedBy.Newest;
                }
                $(".loading-gray-bars").removeClass('d-none');
                $('.thumb').addClass("d-none");
                $('.detailInfo').addClass('d-none');
                getData();
            };
        });

        var getData = function () {
            //console.log('getData')
            var commonFilterParams = '/t/' + $scope.active.seasonId + '/ipp/20/' + constants[0].ProductViewFilterKey.OrderBy + '/' + OrderBy;

            var sp1 = ('pty/' + constants[0].ProductType.Minimovie + commonFilterParams);
            var payload1 = { 'filter': sp1 };
            var sp2 = ('pty/' + constants[0].ProductType.Background + commonFilterParams);
            var payload2 = { 'filter': sp2 };
            var sp3 = ('pty/' + constants[0].ProductType.TitleMedia + commonFilterParams);
            var payload3 = { 'filter': sp3 };
            var sp4 = ('pty/' + constants[0].ProductType.Countdown + commonFilterParams);
            var payload4 = { 'filter': sp4 };
            var sp5 = ('bun/1' + commonFilterParams);
            console.log(sp5)
            var payload5 = { 'filter': sp5 };

            dataService.getSetData(constants[0].BaseUrl.refreshView, payload1).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#miniMovieSwiper').addClass('d-none');
                    }
                    else {
                        $scope.data.miniMovies = data.Products;
                        $scope.$applyAsync(function () {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#miniMovieSwiper .loading-gray-bars").addClass("d-none");
                            $('#miniMovieSwiper .thumb').removeClass('d-none');
                            $('#miniMovieSwiper .detailInfo').removeClass('d-none');
                            $scope.changeSwiperPagingHeight('#miniMovieSwiper');
                            $("#miniMovieSwiper .swiper-slide-view-more").addClass("d-block");
                            $("#miniMovieSwiper .swiper-navigation").removeClass("d-none");
                            $scope.miniMovieSwiper.update();
                        });
                        /*$scope.$watch(function () {
                            $scope.miniMovieSwiper.loopCreate();
                        });*/
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload3).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#titleMediaSwiper').addClass('d-none');
                    }
                    else {
                        $scope.data.titleMedia = data.Products;
                        $scope.$applyAsync(function () {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#titleMediaSwiper .loading-gray-bars").addClass("d-none");
                            $('#titleMediaSwiper .thumb').removeClass('d-none');
                            $('#titleMediaSwiper .detailInfo').removeClass('d-none');
                            $scope.changeSwiperPagingHeight("#titleMediaSwiper");
                            $("#titleMediaSwiper .swiper-slide-view-more").addClass("d-block");
                            $("#titleMediaSwiper .swiper-navigation").removeClass("d-none");
                            $scope.titleMediaSwiper.update();
                        }) 
                        /*$scope.$watch(function () {
                            $scope.titleMediaSwiper.loopCreate();
                        })*/
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload4).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#countdownSwiper').addClass('d-none');
                    }
                    else {
                        $scope.data.countdown = data.Products;
                        $scope.$applyAsync(function () {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#countdownSwiper .loading-gray-bars").addClass("d-none");
                            $('#countdownSwiper .thumb').removeClass('d-none');
                            $('#countdownSwiper .detailInfo').removeClass('d-none');
                            $scope.changeSwiperPagingHeight("#countdownSwiper");
                            $("#countdownSwiper .swiper-slide-view-more").addClass("d-block");
                            $("#countdownSwiper .swiper-navigation").removeClass("d-none");
                            $scope.countdownSwiper.update();
                        }) 
                        /*$scope.$watch(function () {
                            $scope.countdownSwiper.loopCreate();
                        })*/
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload5).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#collectionSwiper').addClass('d-none');
                        console.log("test")
                    }
                    else {
                        $scope.data.collection = data.Products;
                        $scope.$applyAsync(function () {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#collectionSwiper .loading-gray-bars").addClass("d-none");
                            $('#collectionSwiper .thumb').removeClass('d-none');
                            $('#collectionSwiper .detailInfo').removeClass('d-none');
                            $scope.changeSwiperPagingHeight("#collectionSwiper");
                            $("#collectionSwiper .swiper-slide-view-more").addClass("d-block");
                            $("#collectionSwiper .swiper-navigation").removeClass("d-none");
                            $scope.collectionSwiper.update();
                        }) 
                        /*$scope.$watch(function () {
                            $scope.collectionSwiper.loopCreate();
                        })*/
                    }
                }
            });
            dataService.getSetData(constants[0].BaseUrl.refreshView, payload2).then(function (data) {
                if (data.Error) {
                    console.log(data.Error)
                }
                else {
                    if (data.Products.length == 0) {
                        $('#backgroundSwiper').addClass('d-none');
                    }
                    else {
                        $scope.data.backgrounds = data.Products;
                        $scope.$applyAsync(function () {
                            $('.thumb-img').removeClass('lazyloaded').addClass('lazyload')
                            $("#backgroundSwiper .loading-gray-bars").addClass("d-none");
                            $('#backgroundSwiper .thumb').removeClass('d-none');
                            $('#backgroundSwiper .detailInfo').removeClass('d-none');
                            $scope.changeSwiperPagingHeight("#backgroundSwiper");
                            $("#backgroundSwiper .swiper-slide-view-more").addClass("d-block");
                            $("#backgroundSwiper .swiper-navigation").removeClass("d-none");
                            $scope.backgroundSwiper.update();
                        }) 
                        /*$scope.$watch(function () {
                            $scope.backgroundSwiper.loopCreate();
                        })*/
                    }
                }
            });
        }

        $scope.changeSwiperPagingHeight = function () {
            var imgheight = $(".thumb-img").css("height");
            var topheight = $(".swiperTitleJQ").css("height");
            /*var pagingheight = (parseInt(imgheight) - 30);
            console.log('changeswiper1', pagingheight);*/
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        $scope.changeSwiperPagingHeightResize = function () {
            var imgheight = $(".thumb-img").css("height");
            var topheight = $(".swiperTitleJQ").css("height");
            /*var pagingheight = (parseInt(imgheight) - 30);
            console.log('changeswiper1', pagingheight);*/
            $(".JQHeight").css('height', imgheight).css('top', topheight);
        };

        angular.element(document).ready(function () {
            //$scope.initObjects(true);
            $scope.miniMovieSwiper = new Swiper('#miniMovieSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: {
                    loadOnTransitionStart: true,
                },
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.backgroundSwiper = new Swiper('#backgroundSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.titleMediaSwiper = new Swiper('#titleMediaSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.countdownSwiper = new Swiper('#countdownSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            $scope.collectionSwiper = new Swiper('#collectionSwiper', {
                slidesPerView: 1,
                spaceBetween: 0,
                slidesPerGroup: 1,
                /*loop: true,*/
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                // Disable preloading of all images
                preloadImages: false,
                // Enable lazy loading
                lazy: true,
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        spaceBetween: 20,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    576: {
                        slidesPerView: 2,
                        spaceBetween: 15,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 768px
                    768: {
                        slidesPerView: 3,
                        spaceBetween: 15,
                        slidesPerGroup: 3,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 992px
                    992: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                        slidesPerGroup: 4,
                        /*loopAdditionalSlides: 4,*/
                    },
                    // when window width is >= 1300px
                    1300: {
                        slidesPerView: 5,
                        spaceBetween: 15,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    },
                    // when window width is >= 1200px
                    1700: {
                        slidesPerView: 5,
                        spaceBetween: 30,
                        slidesPerGroup: 5,
                        /*loopAdditionalSlides: 5,*/
                    }
                }
            });
            getData();
            window.addEventListener('resize', function () {
                var imgheight = $(".thumb-img").css("height");
                var topheight = $(".swiperTitleJQ").css("height");
                $(".JQHeight").css('height', imgheight).css('top', topheight);
            });
            $rootScope.$on("updatedOrg", function (event, user) {
                $(".loading-gray-bars").removeClass("d-none");
                $(".thumb").addClass("d-none");
                $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                $('.detailInfo').addClass('d-none');
                getData();
            });
            $rootScope.$on('loggedOut', function () {
                $(".loading-gray-bars").removeClass("d-none");
                $(".thumb").addClass("d-none");
                $('.thumb-img').removeClass('lazyloaded').addClass('lazyload');
                $('.detailInfo').addClass('d-none');
                getData();
            });
        });
    }
    app.controller('seasonalController', ['$rootScope', '$scope', 'dataService', 'constants', seasonalController]);
}(angular.module("softouch")));;
(function (app) {
    var signUpController = function ($scope, dataService) {
        $scope.mediaSignup = function () {

            dataService.getSetData("/component/mediaSignup", { email: $scope.footer.email })
                .then(function () {
                    $scope.footer.email = "";
                    $('#newsletterCta, #newsletterSignup').addClass('d-none');
                    $('#newsletterConfirm').removeClass('d-none');
                });
        }
    }
    app.controller('signUpController', ['$scope', 'dataService', signUpController]);
}(angular.module("softouch")));;
(function (app) {
    var softwarefeatureController = function ($rootScope, $scope, dataService, constants) {
        window.peekSoftwareFeature = $scope;

        $scope.ie = (/.NET/.test(navigator.userAgent));
        console.log($scope.ie)

        var animatedFeatureCircles = document.querySelectorAll(".circle-animate-mobile");
        $scope.circleHasGlowed = false;

        function isInViewport(element) {
            var boundaryBox = element.getBoundingClientRect();

            if (boundaryBox.top >= 0 && boundaryBox.bottom <= (window.innerHeight || document.documentElement.clientHeight) / 1.5) {
                return true;
            } else {
                return false;
            }
        }

        window.addEventListener('scroll', function (event) {
            if (isInViewport(animatedFeatureCircles[0])) {
                if (!$scope.circleHasGlowed) {

                    for (var i = 0; i < animatedFeatureCircles.length; i++) {
                        setTimeout(function (circle, index) {
                            circle.classList.add("circle-glow-animation");
                        }, i * 1500, animatedFeatureCircles[i], i);
                    }
                }
                $scope.circleHasGlowed = true;
            }
        })


        $scope.enterFeatureCircle = function (area) {
            animatedFeatureCircles.forEach(function (circle) {
                circle.style.setProperty("fill", "transparent");
                circle.classList.remove("circle-glow-animation");
            });
            var innerCircle = document.getElementById('circle-' + area + '-first');
            var midCircle = document.getElementById('circle-' + area + '-second');
            var outterCircle = document.getElementById('circle-' + area + '-third');
            var hoverCircle = document.getElementById('circle-' + area + '-hover');
            var rectangle = document.getElementById('featureRect-' + area);
            var oldText = document.getElementById(area + '-text');
            var newText = document.getElementById(area + '-new-text');
            var widthIndicator = document.getElementById('svg-width-indicator');
            var mobileTitle = document.getElementById(area + '-title-mobile');
            var mobileText = document.getElementById(area + '-text-mobile');
            var mobileCircleLabel = document.getElementById(area + '-circle-mobile');
            var mobileCircleInner = document.getElementById('circle-' + area + '-first-mobile')
            var featureTextContainer = document.getElementById('feature-text-container');

            var scaleSize = (1 + (2 - (widthIndicator.offsetWidth / 1600)) / 1.75).toFixed(2);

            if (area != 'preview') {
                innerCircle.setAttribute("r", (90 * scaleSize) * 1.1);
                midCircle.setAttribute("r", (120 * scaleSize) * 1.1);
                outterCircle.setAttribute("r", (150 * scaleSize) * 1.1);
                hoverCircle.setAttribute("r", (150 * scaleSize) * 1.1);
            } else {
                innerCircle.setAttribute("r", (90 * scaleSize) * .95);
                midCircle.setAttribute("r", (120 * scaleSize) * .95);
                outterCircle.setAttribute("r", (150 * scaleSize) * .95);
                hoverCircle.setAttribute("r", (150 * scaleSize) * .95);
            }

            newText.style.setProperty("font-size", scaleSize * 16 + 'px');

            rectangle.setAttribute("stroke-width", 7);
            oldText.style.setProperty("opacity", "0");
            newText.style.setProperty("opacity", "1");
            mobileTitle.style.setProperty("opacity", 1, "important");
            mobileText.style.setProperty("opacity", 1, "important");
            mobileCircleLabel.style.setProperty("opacity", 1, "important");
            mobileCircleInner.setAttribute("r", 150);

            if (window.innerWidth <= 850) {
                rectangle.setAttribute("stroke-width", 25);
            }
            //switch (area) {
            //    case "schedule": group.style.setProperty("transform", "translate(-250px, -175px) scale("+scaleSize+")");
            //        //newText.style.setProperty("transform", "translate(60px, 20px) scale(.85)")
            //        break;
            //    case "preview": group.style.setProperty("transform", "translate(50px, -25px) scale(" + scaleSize + ")");
            //        break;
            //    case "live": group.style.setProperty("transform", "translate(-475px, -100px) scale(" + scaleSize + ")");
            //        //newText.style.setProperty("transform", "translate(225px, 45px) scale(.85)")
            //        break;
            //    case "resources": group.style.setProperty("transform", "translate(-425px, -300px) scale(" + scaleSize + ")");
            //        //newText.style.setProperty("transform", "translate(215px, 105px) scale(.85)")
            //        break;
            //    default:

            //}
            

        }

        $scope.exitFeatureCircle = function (area) {
            var innerCircle = document.getElementById('circle-' + area + '-first');
            var midCircle = document.getElementById('circle-' + area + '-second');
            var outterCircle = document.getElementById('circle-' + area + '-third');
            var hoverCircle = document.getElementById('circle-' + area + '-hover');
            var rectangle = document.getElementById('featureRect-' + area);
            var oldText = document.getElementById(area + '-text');
            var newText = document.getElementById(area + '-new-text');
            var group = document.getElementById(area + '-group');
            var mobileTitle = document.getElementById(area + '-title-mobile');
            var mobileText = document.getElementById(area + '-text-mobile');
            var mobileCircleLabel = document.getElementById(area + '-circle-mobile');
            var mobileCircleInner = document.getElementById('circle-' + area + '-first-mobile')
            var featureTextContainer = document.getElementById('feature-text-container');

            group.style.setProperty("transform", "translate(0px, 0px) scale(1)")
            innerCircle.setAttribute("r", 55);
            hoverCircle.setAttribute("r", 55);
            midCircle.setAttribute("r", 75);
            outterCircle.setAttribute("r", 95);
            rectangle.setAttribute("stroke-width", 0);
            oldText.style.setProperty("opacity", "1");
            newText.style.setProperty("opacity", "0");
            mobileTitle.style.setProperty("opacity", 0, "important");
            mobileText.style.setProperty("opacity", 0, "important");
            mobileCircleLabel.style.setProperty("opacity", 0, "important");
            mobileCircleInner.setAttribute("r", 76);
        }


        if (!$scope.ie) {
            /** Animate "new" features label **/
            const newFeatures = document.querySelectorAll('.jq-animate-callout');

            function animateCallout(entries) {

                entries.map( function(entry) {
                    if (entry.isIntersecting) {
                        entry.target.classList.add('visible')
                    } else {
                        entry.target.classList.remove('visible')
                    }
                })
            };

            let options = {
                threshold: 1.0
            }
            const observer = new IntersectionObserver(animateCallout, options);
            newFeatures.forEach(function (newFeature) { return observer.observe(newFeature) });


            /** Show side nav once you pass top UI banner **/
            // Source: https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event
            let displayOffset = $('#display').offset().top - 300;
            let pricingOffset;
            let lastKnownScrollPosition = 0;
            let ticking = false;

            function toggleSideNav(scrollPos) {
                if (scrollPos >= displayOffset && scrollPos < pricingOffset) {
                    $('.sidenav-wrapper').addClass('visible');
                } else {
                    $('.sidenav-wrapper').removeClass('visible');
                }
            }

            document.addEventListener('scroll', function (e) {
                lastKnownScrollPosition = window.scrollY;
                pricingOffset = $('#pricing').offset().top - ($(window).height() * 0.5);

                if (!ticking) {
                    window.requestAnimationFrame(function () {
                        toggleSideNav(lastKnownScrollPosition);
                        ticking = false;
                    });

                    ticking = true;
                }
            });


            /** Update active icon in side nav **/
            const mainSections = document.querySelectorAll('.jq-section-wrapper');

            let navOptions = {
                rootMargin: '-50% 0px -50% 0px'
            }
            const navObserver = new IntersectionObserver(updateSideNav, navOptions);
            mainSections.forEach(function (mainSection) {
                return navObserver.observe(mainSection)
            });

            function updateSideNav(sections) {

                sections.map(function (section) {
                    if (section.isIntersecting) {
                        $('.sidenav .sidenav-item').removeClass('active');
                        $('.sidenav .features-item-' + section.target.id).addClass('active');
                    }
                })
            };
        }


        $(".feature-tabs .jq-next-feature").click(function () {
            $('.feature-tabs .jq-next-feature').removeClass('selected');
            /*$('.feature-tabs button').removeClass('pulsing');*/
            $(this).addClass('selected');
            /*$(this).next().addClass('pulsing');*/

            $('.shapes-tool-image').removeClass('active');
            /*$('.shapes-tool-image').fadeOut('active');*/
            $($(this).data("target")).addClass('active');
            /*$($(this).data("target")).fadeIn('active');*/
            $('.feature-shape-editor .feature-text').removeClass('active');
            $($(this).data("target") + "Text").addClass('active');
        });

        /** Used for Mobile **/
        $scope.prevTab = function () {
            var activeImage = $('.shapes-tool-image.active').attr('id');
            var activeText = $('.feature-shape-editor .feature-text.active').attr('id');

            $('.shapes-tool-image').removeClass('active');
            $('.feature-shape-editor .feature-text').removeClass('active');

            if ($('#' + activeImage).prev().length > 0) {
                $('#' + activeImage).prev().addClass('active');
                $('#' + activeText).prev().addClass('active');
            } else {
                $('.shapes-tool-image:last-of-type').addClass('active');
                $('.feature-shape-editor .feature-text:last-of-type').addClass('active');
            }
        };
        $scope.nextTab = function () {
            var activeImage = $('.shapes-tool-image.active').attr('id');
            var activeText = $('.feature-shape-editor .feature-text.active').attr('id');

            $('.shapes-tool-image').removeClass('active');
            $('.feature-shape-editor .feature-text').removeClass('active');

            if ($('#' + activeImage).next().length > 0) {
                $('#' + activeImage).next().addClass('active');
                $('#' + activeText).next().addClass('active');
            } else {
                $('.shapes-tool-image:first-of-type').addClass('active');
                $('.feature-shape-editor .feature-text:first-of-type').addClass('active');
            }
        };

        angular.element(document).ready(function () {
            $scope.reviewSwiper = new Swiper('#reviewSwiper', {
                slidesPerView: 4,
                spaceBetween: 30,
                slidesPerGroup: 4,
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true,
                },
                navigation: {
                    nextEl: '.swiper-arrow-next',
                    prevEl: '.swiper-arrow-prev',
                },
                loop: true,
                /*loopAdditionalSlides: 3,*/
                /*loopedSlides: 6,*/
                /*loopFillGroupWithBlank: true,*/
                // Set breakpoints
                breakpoints: {
                    // when window width is >= 1px
                    1: {
                        slidesPerView: 1,
                        spaceBetween: 50,
                        slidesPerGroup: 1,
                    },
                    // when window width is >= 576px
                    650: {
                        slidesPerView: 2,
                        spaceBetween: 50,
                        slidesPerGroup: 2,
                    },
                    // when window width is >= 1009px
                    992: {
                        slidesPerView: 3,
                        spaceBetween: 50,
                        slidesPerGroup: 3,
                    },
                }
            });
            /*window.onresize = $scope.changeSwiperPagingHeight;*/
        });
    }
    app.controller('softwarefeatureController', ['$rootScope', '$scope', 'dataService', 'constants', softwarefeatureController]);
}(angular.module("softouch")));;
(function (app) {
    var testController = function ($rootScope, $scope, $http) {
        $scope.logit = function (obj) {
        }
        angular.element(document).ready(function () {
        });

    }
    app.controller('testController', ['$rootScope', '$scope', '$http', testController]);
}(angular.module("softouch")));
(function (app) {
    var testdriveController = function ($scope, dataService, constants) {
        $scope.tabPrefix = "figure";
        $scope.activeTab = 1;
        $scope.maxTabs = $("figure").length;
        $scope.download = {};
        $scope.download.signup = true;
        $scope.download.signup2 = true;
        $scope.error = {};

        $scope.select_group = function (tabNumber) {
            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + tabNumber + "']").addClass('sel');
            $scope.activeTab = parseFloat(tabNumber);
        };

        $scope.select_next = function () {
            if ($scope.activeTab + 1 > $scope.maxTabs) {
                $scope.activeTab = 1;
            } else {
                $scope.activeTab += 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.select_previous = function () {
            if ($scope.activeTab - 1 < 1) {
                $scope.activeTab = $scope.maxTabs;
            } else {
                $scope.activeTab -= 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.submit = function () {
            //hideMessage();

            if ($scope.download.signup && $scope.download.email === undefined) {
                $scope.error.messages = ["Please fill in all fields."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    hideMessage();

                    $('#fields').addClass('d-none');
                    $('#success').removeClass('d-none');
                    $('#mobile').addClass('d-none')
                    $scope.downloadUrl = response.DemoUrl
                    window.location.href = $scope.downloadUrl;
                }
            };

            var onError = function (response) {
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            if ($scope.download.signup) {
                var postUrl = "/component/testdrive/";
                var postData = { email: $scope.download.email };

                dataService
                    .getSetData(postUrl, postData)
                    .then(onSuccess, onError);
            } else {
                dataService
                    .getSetData("/component/GetCurrentBuildUrl")
                    .then(onSuccess, onError);
            }
        };

        $scope.submit_mobile = function () {
            hideMessage();
            // if email is blank.
            if ($scope.download.email2 === undefined) {
                $scope.error.messages = ["Please fill in all fields."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    hideMessage();

                    $('#mobile').addClass('d-none');
                    $('#success').removeClass('d-none');
                    $('#fields').addClass('d-none');
                }
            };

            var onError = function (response) {
                console.log("boo :(")
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            var onGetBuildNumberSuccess = function (response) {
                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    var postUrl = "/component/DemoLinkEmail/";
                    var postData = { email: $scope.download.email2, demoLink: response.DemoUrl };

                    dataService
                        .getSetData(postUrl, postData)
                        .then(onSuccess, onError);
                }
            };
            // if box is checked
            if ($scope.download.signup2) {
                var postUrl = "/component/GettingStartedTutorialEmails/";
                var postData = { email: $scope.download.email2 };

                dataService
                    .getSetData(postUrl, postData)
                    .then(onSuccess, onError);
            }
            // send the email
            dataService
                .getSetData("/component/GetCurrentBuildUrl")
                .then(onGetBuildNumberSuccess, onError);
        };
    };

    app.controller('testdriveController', ['$scope', 'dataService', 'constants', testdriveController]);

}(angular.module("softouch")));;
(function (app) {
    var trainingController = function ($rootScope, $scope, $http, cookieService) {
        $scope.freshDesk = {};

        var goGetit = function () {
            cookieService.setCookie('freshDesk', true, 1);
            $('#supportIframe').attr('src', $scope.freshDesk.url);
        }

        angular.element(document).ready(function () {
            var bob = cookieService.getCookie('freshDesk');
            if (bob == "") { goGetit() } else {
                $('#supportIframe').attr('src', 'http://training.easyworship.com/support/home');
                cookieService.deleteCookie('freshDesk');
            }
        });

    }
    app.controller('trainingController', ['$rootScope', '$scope', '$http', 'cookieService', trainingController]);
}(angular.module("softouch")));
(function (app) {
    var updateSubscriptionPaymentController = function ($scope, dataService) {

        window.peekUpdatePayment = $scope;
        $scope.info = {};
        $scope.error = {};
        $scope.card = {};
        $scope.pageData = {};
        $scope.address = {};
        $scope.payment = { paymentMethod: 'card', useExistingCard: false, adjustedTotal: 1 };

        $scope.showTermsDialog = function () {
            $('#termsModal').modal();
        };

        $scope.submitPayment = function () {
            if ($scope.buttonClicked)
                return;

            $scope.buttonClicked = true;

            $scope.submitted = true;

            hideMessage();

            if ($scope.payment.paypalPayerId == "" && !$scope.payment.useExistingCard && !$scope.paymentForm.$valid) {
                $scope.buttonClicked = false;
                return;
            }

            if (!$scope.pageData.agree) {
                $scope.buttonClicked = false;
                $scope.error.messages = ["You must agree to the subscription terms to continue."];
                showErrorMessage();
                return;
            }

            $scope.info.messages = ["Updating payment method."];
            showInfoMessage();

            $scope.card.NewBillingAddress = $scope.address;

            var postData = {
                ProcessPaymentData: true,
                SubscriptionId: $scope.pageData.subscriptionId,
                NewCreditCard: $scope.card,
                PayPalPayerId: $scope.payment.paypalPayerId,
                PayPalToken: $scope.payment.paypalToken
            };

            dataService.getSetData("/component/ChangeSubscription", postData).then(function (data) {
                $scope.buttonClicked = false;

                toggleBodyCover();

                if (data.Error) {
                    $scope.error.messages = data.ErrorMessages;
                    showErrorMessage();
                }
                else {
                    window.location = "/account/licenses";
                }
            });
        };

        angular.element(document)
            .ready(function () {
                paypal.Buttons({
                    style: {
                        height: 38
                    },
                    createOrder: function () {
                        if (!$scope.pageData.agree) {
                            $scope.error.messages = ["You must agree to the subscription terms to continue."];
                            showErrorMessage();
                            $scope.$apply();
                            return;
                        }

                        return fetch("/component/SetExpressCheckoutViaLicensePage", {
                            method: 'POST',
                            headers: {
                                'Accept': 'application/json',
                                'Content-Type': 'application/json'
                            },
                            body: JSON.stringify({
                                upgradeDetailId: $scope.pageData.renewalDetailId
                            })
                        }).then(function (res) {
                            return res.json();
                        }).then(function (data) {
                            $scope.payment.paypalToken = data.token;
                            return data.token;
                        });
                    },
                    onApprove: function (data) {
                        //$scope.payment.paypalOrderId = data.paymentID;
                        $scope.payment.paypalPayerId = data.payerID;
                        $scope.submitPayment();
                    }
                }).render('#paypal-button-container');
            });
    };
    app.controller('updateSubscriptionPaymentController', ['$scope', 'dataService', updateSubscriptionPaymentController]);
}(angular.module("softouch")));;
(function (app) {
    var videoBannerController = function ($scope, cookieService, constants, $interval) {
        $scope.vids = [];
        $scope.lnks = [];
        $scope.pstrs = [];
        $scope.videoIndex = 0;
        $scope.vid = '';
        //$scope.basePreviewUrl = "https://f002.backblazeb2.com/file/Previews/media_home/";
        $scope.basePreviewUrl = "https://ewwebresources.azureedge.net/files/media/home/banners/videoslarge/";

        $scope.useVideos = 0;

        // set filenames regardless of video or still
        $scope.vids = [
            { vid: '1-image'},
            { vid: '2-image' },
            { vid: '3-image' },
            { vid: '4-image' },
            { vid: '5-image' },
            { vid: '6-image' }
        ];

        // Define the posters based on vid
        for (var x = 0; x <= $scope.vids.length - 1; x++) {
            var extension = '_poster.jpg';

            if (!$scope.useVideos)
                extension = '.jpg';

            var val = $scope.basePreviewUrl + $scope.vids[x].vid + extension;

            $scope.pstrs.push({ pstr: val });
        }

        $scope.lnks = [
            { lnk: 'https://www.easyworship.com/media/Backgrounds/145198/Pixelated-Stained-Glass-Background-Still-2'},
            { lnk: 'https://www.easyworship.com/media/Backgrounds/152081/Retro-Wave-Rise'},
            { lnk: 'https://www.easyworship.com/media/Backgrounds/153657/Neon-Summer-1-Still'},
            { lnk: 'https://www.easyworship.com/media/Backgrounds/145643/Flowers-05-Still'},
            { lnk: 'https://www.easyworship.com/media/Backgrounds/168591/Liquid-Gradient-Dark'},
            { lnk: 'https://www.easyworship.com/media/Backgrounds/168700/Caddo-District-Floating-Lights-Still'}
        ];

        // Test what version of browser we are
        var ff = /Firefox/.test(navigator.userAgent);
        var edge = /Edge/.test(navigator.userAgent);
        var chrome = /Chrome/.test(navigator.userAgent);
        var safari = /Safari/.test(navigator.userAgent) && !chrome;
        var ie = /.NET/.test(navigator.userAgent);
        var isIntegratedStore = $("body").hasClass("integratedStore");

        // test if mobile device
        var check1 = (/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
        var check2 = (/Mobi/.test(navigator.userAgent));
        var checkDroidTablet = (/Android/.test(navigator.userAgent)) && (!(/Mobile/.test(navigator.userAgent)));
        var checkIpad = (/iPad/.test(navigator.userAgent));
        $scope.mobile = false;

        if (check1 && check2) {
            $scope.mobile = true;
        }

        if (ff) { $scope.browserType = 'ff'; }
        if (chrome) { $scope.browserType = 'chrome'; }
        if (safari) { $scope.browserType = 'safari'; }
        if (ie || isIntegratedStore) {
            $scope.browserType = 'ie';
            $(".video").addClass("ie");
        }
        if (edge) { $scope.browserType = 'edge'; }

        $scope.playVideo = function () {
            $scope.vid = $scope.basePreviewUrl + $scope.vids[$scope.videoIndex].vid + '.mp4';

            var w = window.innerWidth;

            if ($scope.useVideos) {
                if ((w > 480) && (!$scope.mobile) || (checkIpad)) {
                    $('#videoBanner')[0].src = $scope.vid;
                    $('#videoBanner')[0].play().then(function (data) {
                    }).catch(function (e) { console.log("error: " + e); });
                }
                else {
                    $('#videoBanner').attr('poster', $scope.pstrs[$scope.videoIndex].pstr);
                }
            }
            else {
                $('#videoBanner').attr('poster', $scope.pstrs[$scope.videoIndex].pstr);
            }
            
        };

        window.onpageshow = function (event) {
            if (event.persisted) {
                getCookie();

                if ($scope.useVideos) {
                    $scope.vid = $scope.basePreviewUrl + $scope.vids[$scope.videoIndex].vid + '.mp4';
                    $('#videoBanner')[0].src = $scope.vid;

                    $('#videoBanner')[0].play()
                        .then(function () {
                        }).catch(function (e) {
                            console.log("error: " + e);
                        });
                }
            }
        };

        var getCookie = function () {
            $scope.videoIndex = cookieService.getCookie("videoIndex");
            if ($scope.videoIndex == "") {
                $scope.videoIndex = 0;
                cookieService.setCookie('videoIndex', 0, 1);
            }
            else {
                $scope.videoIndex = parseInt(cookieService.getCookie("videoIndex"));
                $scope.videoIndex += 1;

                if ($scope.videoIndex > ($scope.vids.length - 1)) {
                    $scope.videoIndex = 0;
                }
                cookieService.setCookie('videoIndex', $scope.videoIndex, 1);
            }

            $("#landingBanner").css("background-image", "url('" + $scope.pstrs[$scope.videoIndex].pstr + "')");
        };

        angular.element(document).ready(function () {
            getCookie();

            $scope.playVideo();
        });
    };
    app.controller('videoBannerController', ['$scope', 'cookieService', 'constants', '$interval', videoBannerController]);
}(angular.module("softouch")));;
(function (app) {
    var videoModalController = function ($scope, $rootScope, constants) {

        $rootScope.stopVideo = function () {
            $('#modalVideo').attr('src', '');
        };
        $rootScope.launchVideoModal = function (url) {
            $('#modalVideo').attr('src', url);
            $('#videoModal').modal();
        };

        $('#videoModal').on('hidden.bs.modal', function (e) {
            $scope.stopVideo();
        });

    };

    app.controller('videoModalController', ['$scope', '$rootScope', 'constants', videoModalController]);

}(angular.module("softouch")));;
(function (app) {
    var whatsNewController = function ($rootScope, $scope) {

        $scope.modalThis = function (val) {
            $('#moreInfo').html(val);
            $('#whatsNewModal').modal();
        };
        $scope.stopVideo = function () {
            $('#moreVideo').attr('src', '');
        };
        $scope.videoThis = function (val) {
            $('#moreVideo').attr('src', val);
            $('#whatsNewVideoModal').modal();
        };

        $('#whatsNewVideoModal').on('hidden.bs.modal', function (e) {
            $scope.stopVideo();
        });

        angular.element(document).ready(function () {
        });

    }
    app.controller('whatsNewController', ['$rootScope', '$scope', whatsNewController]);
}(angular.module("softouch")));;
(function (app) {
    var activationService = function (dataService) {
        var activationFactory = {};

        activationFactory.activate = function (postData) {
            return dataService
                .getSetData("/component/ActivateProductKey", postData)
                .then(function (data) {
                    return data;
                },
                    function (response) {
                        return response.data;
                    });
        };

        activationFactory.validate = function (postData) {
            return dataService
                .getSetData("/component/ValidateProductKey", postData)
                .then(function (data) {
                    return data;
                },
                    function (response) {
                        return response.data;
                    });
        };

        return activationFactory;
    };
    app.factory('activationService', ['dataService', activationService]);
}(angular.module("softouch")));;
(function (app) {
    var bibleService = function (dataService) {
        var bibleFactory = {};
        bibleFactory.bibleData = [];

        bibleFactory.getBibles = function () {
            return dataService
                .getSetData("/component/getBibles")
                .then(function (data) {
                    bibleFactory.bibleData = data;
                    return bibleFactory.bibleData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        return bibleFactory;
    };
    app.factory('bibleService', ['dataService', bibleService]);
}(angular.module("softouch")));;
(function (app) {
    var cardService = function (dataService) {
        var cardFactory = {};
        cardFactory.cardData = [];
        cardFactory.selectedCard = {};
        cardFactory.newCardRequired = false;

        cardFactory.error = false;
        cardFactory.messages = [];
        cardFactory.action = null;
        
        //Get the Cards form database
        cardFactory.getCards = function () {

            return dataService
                .getSetData("/component/GetCards", null)
                .then(function (data) {
                    cardFactory.cardData = data;
                    if (cardFactory.cardData.length == 0) {
                        cardFactory.newCardRequired = true;
                        cardFactory.selectedCard = cardFactory.cardData[0];
                    }
                    else {
                        cardFactory.selectedCard = cardFactory.cardData[0];
                        cardFactory.newCardRequired = false;
                    }
                    return cardFactory.cardData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        cardFactory.remove = function (itm) {
            if (!itm) {
                return null;
            }

            cardFactory.cardId = { cardId: itm.RowId };
            cardFactory.setCard(itm.CardGuid);

            return dataService
                .getSetData("/component/DeleteCard", cardFactory.cardId)
                .then(onData, onError);
        };

        
        var onData = function (data) {
            if (data.Error) {
                cardFactory.error = data.Error;
                cardFactory.error.messages = data.ErrorMessages;
                cardFactory.action = data.Action;
                cardFactory.cardData = [];
            }
            else {
                cardFactory.cardData = cardFactory.cardData.filter(function (obj, ind) {
                    return obj.CardGuid != cardFactory.selectedCard.CardGuid;
                });
            }
        };

        var onError = function (response) {
            
        };

        //Set the Selected Card 
        cardFactory.setCard = function (cardId) {

            cardFactory.selectedCard = cardFactory.cardData.filter(function (obj, ind) {
                return obj.CardGuid === cardId;
            });

            if (cardFactory.selectedCard.length >= 1) {
                cardFactory.selectedCard = cardFactory.selectedCard[0];
            }
            else {
                cardFactory.selectedCard = {};
            }

        };

        cardFactory.addNewCard = function (card) {
            return dataService
                .getSetData("/component/AddCard", card)
                .then(function (data) { return data; }, function (data) { return data; });
        };

        cardFactory.clear = function () {
            cardFactory.cardData = [];
            cardFactory.selectedCard = {};
        };

        return cardFactory;
    };
    app.factory('cardService', ['dataService', cardService]);
}(angular.module("softouch")));;
(function (app) {
    var cartService = function ($rootScope, dataService, productEventService) {
        var cartFactory = {};
        cartFactory.cartData = [];

        //get the items form database
        cartFactory.getCartItems = function () {
            return dataService
                .getSetData("/component/GetCartItems/", null)
                .then(function (data) {
                        cartFactory.cartData = data;
                        $rootScope.$broadcast('cartListReady', {
                            'cartList': cartFactory.cartData
                        });
                        return cartFactory.cartData;
                    },
                    function (response) {
                        return response.data;
                    });
        };

        cartFactory.clear = function () {
            cartFactory.cartData = [];
            $rootScope.$broadcast('cartListReady', {
                'cartList': cartFactory.cartData
            });
        };

        cartFactory.cartIt = function (item, addToCart) {
            var url = "";
            if (addToCart) { url = "/component/additemtocart"; }
            else { url = "/component/removeitemfromcart"; }
            var dat = { 'DetailID': item.CartDetailId };
            return dataService
                .getSetData(url, dat)
                .then(function (data) {
                    onCartData(addToCart, item, data);
                    cartFactory.cartData = data;
                    return cartFactory.cartData;
                },
                    function (response) {
                        onCartError(response);
                    });
        };

        var onCartData = function (addToCart, item, data) {
            if (addToCart) {
                cartFactory.cartData = data;
                var p = {
                    productId: item.CartDetailId,
                    eventId: 2
                };
                productEventService.insertProductEvent(p);
                $rootScope.$broadcast('cartListReady', {
                    'cartList': cartFactory.cartData
                });
                $rootScope.$broadcast('cartAdd', {
                    'item': data
                });
                //$('.cart-dropdown-content').stop();
                //$('.cart-dropdown-content').fadeIn('fast').delay(1000).fadeOut(2000);
            }
            else {
                cartFactory.cartData = data;
                $rootScope.$broadcast('cartListReady', {
                    'cartList': cartFactory.cartData
                });
                $rootScope.$broadcast('cartRemove', {
                    'item': item
                });
            }
        };

        var onCartError = function (response) {
            $rootScope.$broadcast('cartAddRemoveFailed', {
                'Error': response
            });
        };

        return cartFactory;
    };
    app.factory('cartService', ['$rootScope', 'dataService', 'productEventService',cartService]);
}(angular.module("softouch")));;
(function (app) {
    var clientService = function () {
        var clientFactory = {};

        clientFactory.getBrowserType = function () {
            var ff = /Firefox/.test(navigator.userAgent);
            var edge = /Edge/.test(navigator.userAgent);
            var chrome = /Chrome/.test(navigator.userAgent);
            var safari = /Safari/.test(navigator.userAgent) && !chrome;
            var ie = /.NET/.test(navigator.userAgent);

            if (ff) return 'ff';
            if (chrome) return 'chrome';
            if (safari) return 'safari';
            if (ie) return 'ie';
            if (edge) return'edge';
        };

        return clientFactory;
    };

    app.factory('clientService', [clientService]);
}(angular.module("softouch")));;
(function (app) {
    var constants = {
        BaseUrl: {
            assets: 'https://ewwebresources.azureedge.net/files/',
            videoBase: 'https://f002.backblazeb2.com/file/Previews/small/',
            videoLargeBase: 'https://f002.backblazeb2.com/file/Previews/large/',
            previewImage_large: 'https://ewwebresources.azureedge.net/files/media/thumbnails/large/',
            previewImage_thumbnails: 'https://ewwebresources.azureedge.net/files/media/thumbnails/small/',
            get thumbnailPlaceholder() {
                return this.assets + 'shared/16x9-ThumbnailPlaceholder.jpg';
            },
            getMostRecentDownloads: '/component/getmostrecentDownloads',
            refreshView: '/component/refreshview',
            softwareOptions: '/component/getsoftwareoptions',
            favorites: { get: '/component/GetFavorites', add: '/component/AddItemToFavorites', remove: '/component/RemoveItemFromFavorites' }
        },
        Urls: {
            pricing: '/software/pricing',
            requirements: '/software/systemrequirements',
            checkoutSummary: '/checkout',
            featuredProducer: '/media/producers/',
            premiumMedia: '/media/premium',
            mediaSearch: '/media/filters',
            licenses: '/account/licenses',
            supportVideos: 'https://support.easyworship.com/support/solutions/6000132416'
        },
        ActInfo: {
            LoginUrl: "/component/userinfo",
            LogoutUrl: "/component/logout",
            LoginAJSurl: "/account/login",
            postLogin: '/component/login',
            create: '/component/signup'
        },
        ProductType:
        {
            Software: 1,
            Bibles: 32,
            Minimovie: 66,
            TitleMedia: 65,
            LyricMedia: 67,
            WorshipTracks: 67,
            SocialMedia: 68,
            LowerThirds: 69,
            Overlays: 74,
            Collection: 71, 
            Countdown: 72,
            Background: 73,
            ProducerPack: 100,
        },
        ProductMediaType:
        {
            Overlays: 5,
        },
        ProductViewFilterKey:
        {
            AlsoInCollection: 'aic',
            ProductTypes: 'b',
            Bundles: 'bun/1',
            BlackAndWhite: 'bw',
            Color: 'co',
            Duration: 'd',
            Event: 'evt',
            ExpandCollections: 'ec',
            GuestCheckoutToken: 'gct',
            ItemsPerPage: 'ipp',
            Language: 'l',
            Tag: 'g',
            SortDirection: 'dir',
            MoreByProducer: 'mb',
            MyMedia: 'mm',
            MediaType: 'mt',
            OrderBy: 'o',
            Price: 'pb',
            RequestedPage: 'pg',
            ProductId: 'pid',
            Producers: 'pr',
            ProductType: 'pty',
            Quality: 'q',
            SearchTerm: 's',
            Section: 'sec',
            Season: 'sn',
            FeaturedGroup: 'sp',
            Style: 'sty',
            Subtype: 'sub',
            Topic: 't',
            AllPremium: 'prm/1'
        },
        SortedBy:
        {
            Trending: 1,
            Newest: 2,
            AddedToPremium: 5
        },
        Producers:
        {
            EasyWorship: 385855,
        },
        SoftwareMessageType: {
            updateVariables: "updatevariables",
            openBrowser: "openbrowser",
            closeBrowser: "closebrowser",
            import: "import",
            recordChanged: "recordchanged",
            rightClick: "rightclick",
            importResults: "importcomplete",
            mouseEnter: "onmouseenter",
            viewInLibrary: "viewinlibrary",
            nukeCookies: "nukecookies",
            loginStatus: "loginstatus",
            refreshLicense: "refreshlicense",
            nukeCookie: "nukecookie"
        },
        SoftwareBrowserStyle: {
            popup: "popup",
            floating: "floating"
        },
        SoftwareVariables: {
            ccliAccess: "sdpc_ccliAccessToken",
            ccliRefresh: "sdpc_ccliRefreshToken",
            ccliExpires: "sdpc_ccliExpires",
            ccliAutoReport: "sdpc_provider_reporting_2",
            ccliReportingProvider: "sdpc_provider_name_2",
            ccliAutoReportPrompted: "sdpc_provider_reporting_prompted_2",
            search: "sdpb_searchtext",
            id: "sdpb_id",
            status: "sdpb_status",
            action: "sdpb_action",
            avlStatus: "sdpb_avalstatus",
            colorTheme: "sdpg_colortheme",
            font: "sdpg_font"
        },
        SoftwareMediaType: {
            song: "song",
            media: "media",
            worshiptrax: "worshiptrax"
        },
        SoftwareFunctions: {
            nextPage: "sdpf_navnextpage",
            prevPage: "sdpf_navprevpage",
            status: "sdpf_status",
            search: "sdpf_search",
            next: "sdpf_navnext",
            prev: "sdpf_navprev",
            importSong: "sdpf_import_song",
            importMedia: "sdpf_import_media",
            setSize: "sdpf_setimagesize",
            setFont: "sdpf_setfont",
            setColorTheme: "sdpf_setcolortheme",
            logout: "sdpf_logout",
            moreInfo: "sdpf_moreinfo"
        },
        LoginStatus: {
            none: 0,
            loggedin: 1,
            loggedout: 2
        }
    };

    app.constant('constants', [constants]);
}(angular.module("softouch")));;
(function (app) {
    var cookieService = function () {
        var cookieFactory = {};
        cookieFactory.useCookie = 'filters';

        cookieFactory.getCookie = function (cname) {
            var name = cname + "=";
            var decodedCookie = decodeURIComponent(document.cookie);
            var ca = decodedCookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        };

        cookieFactory.deleteCookie = function (cname) {
            document.cookie = cname + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
        };

        cookieFactory.setCookie = function (name, value, expiresInDays) {
            var d = new Date();
            d.setTime(d.getTime() + (expiresInDays * 24 * 60 * 60 * 1000));
            var expires = "expires=" + d.toUTCString();
            document.cookie = name + "=" + value + ";" + expires + ";path=/";
        };

        cookieFactory.cookieEnabled = function () { };

        if (navigator.cookieEnabled == 0) {
            alert("You need to enable cookies for this site to load properly!");
        }

        return cookieFactory;
    };
    app.factory('cookieService', [cookieService]);
}(angular.module("softouch")));;
(function (app) {
    var creditService = function (dataService) {
        var creditFactory = {};
        creditFactory.creditData = [];
        creditFactory.availableCredit = 0;

        //get the available credits form database
        creditFactory.getcredits = function () {
            var param = null;
            return dataService
                .getSetData("/component/AvailableCredits", param)
                .then(function (data) {
                    creditFactory.creditData = data;
                    creditFactory.availableCredit = creditFactory.creditData.AvailableCredit;
                    return creditFactory.creditData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        return creditFactory;
    };
    app.factory('creditService', ['dataService', creditService]);
}(angular.module("softouch")));;
(function (app) {
    var dataFilterService = function (dataService, constants, $rootScope, itemService) {
        var dataFilterFactory = {};

        dataFilterFactory.availableFilters = [];
        dataFilterFactory.filters = [];
        dataFilterFactory.selectedList = [];

        dataFilterFactory.getFilterValues = function () {
            if (dataFilterFactory.availableFilters.length == 0) {             
                    return dataService
                    .getSetData(constants[0].BaseUrl.filters, null)
                    .then(onFilters, onError);
                }
            else {
                return dataFilterFactory.availableFilters;
            }
        };

        var onFilters = function (data) {
            dataFilterFactory.availableFilters = data;
            return dataFilterFactory.availableFilters;
        }
        var onError = function (response) {
        }

        dataFilterFactory.clearSearch = function () {
            itemService.itemData.selectedFilters['s'] = [];
            itemService.itemData.selectedFilters['g'] = [];
        }

        dataFilterFactory.removeKey = function (item) {
            switch (item.key) {
                default : 
                    itemService.itemData.selectedFilters[item.key] = removeFilter(itemService.itemData.selectedFilters[item.key], item);
                    break;
            };
        };
        dataFilterFactory.removeAllKeys = function () {
            itemService.initFilters();
        }

        dataFilterFactory.removeFilterKeys = function(){
            itemService.removeFilterKeys();
        }

        function removeFilter(arr, item) {
           var rtrn =  arr.filter(function (el) {
                return (el.id != item.id);
           });
           if (rtrn.length == 0) { rtrn = [] };
           return rtrn;
        }


        dataFilterFactory.clearKey = function (key) {
            itemService.itemData.selectedFilters[key] = [];
        };

        dataFilterFactory.addKey = function (item) {
            //set it to an array if it isn't already
            (itemService.itemData.selectedFilters[item.key] === null) ?
             itemService.itemData.selectedFilters[item.key] = [] : null;

            //check to see if the ID already exists in the key
            var exist = itemService.itemData.selectedFilters[item.key].filter(function (obj, ind) {
                return obj.id == item.id;
            }).length > 0;

            // if it deosn't exist add the item
            item.checked = true;
            (!exist) ? itemService.itemData.selectedFilters[item.key].push(item): null;
        }

        function isChecked(obj) {
            return (obj.checked);
        }
        function isNotChecked(obj) {
            return (!obj.checked);
        }

        dataFilterFactory.getCrumbs = function () {
            var crumbData = [];
            $.each(itemService.itemData.selectedFilters, function (key, value) {
                var obj = itemService.itemData.selectedFilters[key];
                if (value.length > 0) {
                    crumbData = crumbData.concat(value);
                    crumbData = crumbData.filter(function (obj, ind) {
                        var rtrn = true;
                        switch (obj.key) {
                            case 'pg':
                                rtrn = false;
                                break;
                            case 's':
                                rtrn = false;
                                break;
                            case 'o':
                                rtrn = false;
                                break;
                            case 'ipp':
                                rtrn = false;
                                break;
                            case 'b':
                                rtrn = false;
                                break;
                            case 'g':
                                rtrn = false;
                                break;
                            case '':
                                rtrn = false;
                                break;
                            default:
                                break;
                        };
                        //(!(obj.key == 'pg' || obj.key == 'b'))
                        return rtrn;
                    });
                   
                }
            });
            $.each(crumbData, function (key, value) {
                value.checked = true;
            });

            return crumbData;
            // MOCK DATA ***********************************************************
            //return [{ key: '1', value: 'Some crumbs for you' }];
            // *********************************************************************
        };

        function arrayParse(obj, key) {
            var subObj = [];
            $.each(obj, function (subkey, subvalue) {
                subObj.push(itemService.itemData.selectedFilters[key][subkey]);
            })
        };

        return dataFilterFactory;
    };
    app.factory('dataFilterService', ['dataService', 'constants', '$rootScope', 'itemService', dataFilterService]);
}(angular.module("softouch")));;
(function (app) {
    var dataService = function ($http, $q) {
        var dataFactory = {};

        //flag and parms for data requests
        dataFactory.dataRequested = false;
        dataFactory.currentRequestedParams = false;

        //generic get set requests ***********************************************
        var sendResponseData = function (response) {
            if (response.data.error) {
                console.log('data service error: ' + response.data.error);
                return [];
            }
            else {
                return response.data;
            }
        };

        var sendResponseError = function (response) {
            return $q.reject("http status: " + response.status + " : " + response.data);
        };

        dataFactory.getSetData = function (baseUrl, params, crossSite) {
            var url = AppendGuidIfAvailable(baseUrl);

            if (crossSite === undefined)
                crossSite = false;

            if (params === null) { params = {}; }
            return $http({
                method: "post",
                url: url,
                withCredentials: crossSite,
                data: params
            })
                .then(sendResponseData)
                .catch(sendResponseError);
        };

        dataFactory.getSetDataWithAbort = function (baseUrl, params) {
            var url = AppendGuidIfAvailable(baseUrl);

            if (params === null) {
                params = {};
            }

            return $http.with_abort({
                method: "post",
                url: url,
                data: params
            })
                .then(sendResponseData)
                .catch(sendResponseError);
        };

        return dataFactory;
    };
    app.factory('dataService', ['$http', '$q', dataService]);
}(angular.module("softouch")));;
(function (app) {
    var downloadItemService = function ($rootScope, dataService) {
        var downloadFactory = {};

        downloadFactory.requestDownloadItem = function(id) {
            var param = { productId: id };

            dataService
                .getSetData('/component/GetDownloadProduct', param)
                .then(function(data) {

                    if (data.length == 0) {
                    } else {
                        $rootScope.$broadcast('downloadItemSet', { 'item': data });
                    }
                });
        }

        return downloadFactory;
    };
    app.factory('downloadItemService', ['$rootScope', 'dataService', downloadItemService]);
}(angular.module("softouch")));;
(function (app) {
    var downloadsService = function ($rootScope, dataService, constants) {
        var downloadsFactory = {};
        downloadsFactory.downloadsData = [];
        
        //get the items form database
        downloadsFactory.getDownLoads = function () {
            var parm = null;
            ($rootScope.guestToken !== undefined && $rootScope.guestToken !== "") ? parm = { Token: $rootScope.guestToken } : parm = null;

            return dataService
                .getSetData(constants[0].BaseUrl.mediaDownloads, parm)
                .then(function (data) {
                    downloadsFactory.downloadsData = data;
                    return downloadsFactory.downloadsData;
                },
                    function (response) {
                        return response.data;
                    });
        };
        return downloadsFactory;
    };
    app.factory('downloadsService', ['$rootScope', 'dataService','constants', downloadsService]);
}(angular.module("softouch")));;
(function (app) {
    var ewMessagingService = function (constants) {
        var messagingFactory = {};

        messagingFactory.rightClick = function (xpos, ypos) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.rightClick;
            message.xpos = xpos;
            message.ypos = ypos;

            message.sent = postDataToEasyWorship(message);

            return message;
        };

        messagingFactory.loginStatus = function (status) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.loginStatus;
            message.status = status;

            message.sent = postDataToEasyWorship(message);

            return message;
        };

        messagingFactory.nukeCookie = function (url) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.nukeCookie;
            message.url = url;

            message.sent = postDataToEasyWorship(message);

            return message;
        };

        messagingFactory.updateCcliTokens = function (accessToken, refreshToken, expires) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.updateVariables;
            message.params = [];
            message.params.push({ param: constants[0].SoftwareVariables.ccliAccess, value: accessToken });
            message.params.push({ param: constants[0].SoftwareVariables.ccliRefresh, value: refreshToken });
            message.params.push({ param: constants[0].SoftwareVariables.ccliExpires, value: expires });

            message.sent = postDataToEasyWorship(message);
           
            return message;
        };

        messagingFactory.initImport = function (ewFunctionVariable, functionName) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.updateVariables;
            message.params = [];
            message.params.push({ param: ewFunctionVariable, value: functionName + '("sdpb_id", "sdpb_action")' });

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.initFunction = function (ewFunctionVariable, functionName) {

            if (functionName.indexOf(")") < 0)
                functionName += "()";

            var message = {};
            message.type = constants[0].SoftwareMessageType.updateVariables;
            message.params = [];
            message.params.push({ param: ewFunctionVariable, value: functionName });

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.updateVariable = function (variableName, variableValue) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.updateVariables;
            message.params = [];
            message.params.push({ param: variableName, value: variableValue });
            
            message.sent = postDataToEasyWorship(message);
        }

        messagingFactory.initStyleFunctions = function () {
            // Functions are jquery only, so they are located in softouch.custom.js
            var message = {};
            message.type = constants[0].SoftwareMessageType.updateVariables;
            message.params = [];
            message.params.push({ param: constants[0].SoftwareFunctions.setColorTheme, value: "ewSetColorTheme(\"" + constants[0].SoftwareVariables.colorTheme + "\")" });
            message.params.push({ param: constants[0].SoftwareFunctions.setFont, value: "ewSetFont(\"" + constants[0].SoftwareVariables.font + "\")" });

            message.sent = postDataToEasyWorship(message);
        }

        messagingFactory.openBrowserModal = function (title, name, url, oncloseUrl) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.openBrowser;
            message.style = constants[0].SoftwareBrowserStyle.popup;
            message.title = title;
            message.name = name;
            message.url = url;
            message.oncloseurl = oncloseUrl;

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.navigate = function (url, closeModal) {
            if (closeModal === undefined)
                closeModal = false;

            message = {};
            message.type = constants[0].SoftwareMessageType.openBrowser;
            message.name = "owner";
            message.url = url;
            message.close = closeModal;

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.recordChanged = function (id, idx, totalRecordCount, mediaType, key) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.recordChanged;
            message.id = id;
            message.index = idx;
            message.count = totalRecordCount;
            message.mediatype = mediaType;
            message.key = key;

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.mouseOver = function (id, idx, mediaType, key) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.mouseEnter;
            message.id = id;
            message.index = idx;
            message.mediatype = mediaType;
            message.key = key;

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.ccliLyrics = function (ccliLyricsResponse, action) {
            var message = {};
            message.result = "success";
            message.source = "CCLI";
            message.provider_id = 2;
            message.action = action;
            message.id = ccliLyricsResponse.songNumber;
            message.type = constants[0].SoftwareMessageType.importResults;
            message.mediatype = constants[0].SoftwareMediaType.song;
            message.title = ccliLyricsResponse.title;
            message.authors = ccliLyricsResponse.authors;
            message.copyrights = ccliLyricsResponse.copyrights;

            message.lyrics = "";

            ccliLyricsResponse.lyricParts.forEach(function (item, idx, array) {
                message.lyrics += item.partLabel + "\r\n" + item.lyrics;

                if (idx < array.length - 1)
                    message.lyrics += "\r\n\r\n";
            });

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.mediaDownload = function (product, action) {
            var message = {};
            message.result = "success";
            message.source = "MEDIA";
            message.action = action;
            message.id = product.CartDetailId;
            message.format = product.FileTypes[0];
            message.type = constants[0].SoftwareMessageType.importResults;
            message.mediatype = constants[0].SoftwareMediaType.media;
            message.title = product.Title;

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        messagingFactory.viewInLibrary = function (id, mediaType, key) {
            var message = {};
            message.type = constants[0].SoftwareMessageType.viewInLibrary;
            message.id = id
            message.mediatype = mediaType;
            message.key = key;

            message.sent = postDataToEasyWorship(message);

            return message;
        }

        var postDataToEasyWorship = function (messageObject) {
            console.log(messageObject);
            //console.log(JSON.stringify(messageObject));

            var sendObj;

            // for consistency, always give EW a json object
            if (typeof messageObject === 'object') {
                sendObj = messageObject;
            } else {
                sendObj = { Value: messageObject };
            }
            // is this Windows/WebView2?
            // WebView2 will convert any data to a json string automatically.
            // if we explictly stringify the data, it will get double-wrapped and require
            // more handling in the application, so don't do that.
            if (window.chrome
                && window.chrome.webview
                && window.chrome.webview.postMessage) {
                window.chrome.webview.postMessage(sendObj);
                return true;
            };
            // is this Mac/Webkit?
            // Webkit will convert whatever we send to a native object on Mac.
            // for easy of processing we want this to be a string.
            // so unlike Windows above, we have to explictly stringify the json.
            if (window.webkit
                && window.webkit.messageHandlers
                && window.webkit.messageHandlers.softouch
                && window.webkit.messageHandlers.softouch.postMessage) {
                window.webkit.messageHandlers.softouch.postMessage(JSON.stringify(sendObj));
                return true;
            }

            return false;
        }

        return messagingFactory;
    };
    app.factory('ewMessagingService', ['constants', ewMessagingService]);
}(angular.module("softouch")));;
(function (app) {
    var favoritesService = function ($rootScope, dataService, constants, productEventService) {
        var favoritesFactory = {};
        favoritesFactory.favoritesData = [];

        var params = {};

        //get the items form database
        favoritesFactory.getFavorites = function () {
            return dataService
                .getSetData(constants[0].BaseUrl.favorites.get, null)
                .then(function (data) {
                    favoritesFactory.favoritesData = data;
                    $rootScope.$broadcast('favoritesReady', {
                        'favorites': favoritesFactory.favoritesData
                    });
                    return favoritesFactory.favoritesData;
                },
                    function (response) {
                        return response.data;
                    });
        };
        favoritesFactory.setFavorites = function (item, favorite) {
            pid = 0;
            (item.product_id) ? pid = item.product_id : pid = item.ProductId;
            
            var url = (favorite) ? constants[0].BaseUrl.favorites.add : constants[0].BaseUrl.favorites.remove;

            params = { 'productId': pid };

            var p = {
                productId: pid,
                eventId: 1
            };
            productEventService.insertProductEvent(p);
            return dataService
                .getSetData(url, params)
                .then(broadcastState(favorite, item)),
                    function (response) {
                        return response.data;
                    };
        };

        var removeItem = function (itm) {
            var i = favoritesFactory.favoritesData.indexOf(itm);
            if (i !== -1) {
                favoritesFactory.favoritesData.splice(i, 1);
            }
        };
        var addItem = function (itm) {
            favoritesFactory.favoritesData.push(itm);
        };

        function broadcastState(favorite, item) {
            if (favorite) {
                addItem(item);
                $rootScope.$broadcast('favorite', { 'item': item });
            }
            else {
                removeItem(item);
                $rootScope.$broadcast('unfavorite', { 'item': item });
            };
        };


        return favoritesFactory;
    };
    app.factory('favoritesService', ['$rootScope', 'dataService', 'constants', 'productEventService', favoritesService]);
}(angular.module("softouch")));;
(function (app) {
    var headerSecondaryService = function ($rootScope, $location, dataService, listService, itemService) {
        var headerSecondaryFactory = {};
        headerSecondaryFactory.menuData = [];
        headerSecondaryFactory.mainTopic = '';

        headerSecondaryFactory.selectedItem = {};

        headerSecondaryFactory.reset = function () {
            itemService.initFilters();
            headerSecondaryFactory.mainTopic = '';
            $rootScope.$broadcast('TopicChange', { mainTopic: headerSecondaryFactory.mainTopic, selectedItem : headerSecondaryFactory.selectedItem });
        }

        headerSecondaryFactory.selectMe = function (val) {
            switch (val) {
                case 'software':
                    headerSecondaryFactory.selectedItem = listService.getStaticList(val)[0];
                    setVal(val);
                    break;
                case 'account':
                    headerSecondaryFactory.selectedItem = listService.getStaticList(val)[0];
                    setVal(val);
                    break;
                case 'media':
                    headerSecondaryFactory.selectedItem = {};
                    setVal(val);
                    break;
                case 'support':
                    headerSecondaryFactory.selectedItem = {};
                    setVal(null);
                    break;
                default:
                    break;
            };
        };

        var setVal = function (val) {
            headerSecondaryFactory.mainTopic = val;
            $rootScope.$broadcast('TopicChange', { mainTopic: headerSecondaryFactory.mainTopic, selectedItem : headerSecondaryFactory.selectedItem });
        };


        return headerSecondaryFactory;
    };
    app.factory('headerSecondaryService', ['$rootScope', '$location', 'dataService', 'listService', 'itemService', headerSecondaryService]);
}(angular.module("softouch")));;
(function (app) {
    var historyService = function (dataService) {
        var historyFactory = {};
        historyFactory.historyData = [];

        //get the items form database
        historyFactory.getHistory = function (accountGuid) {
            var param = { accountGuid: accountGuid };
            return dataService
                .getSetData("/component/GetOrderHistory", param)
                .then(function (data) {
                    historyFactory.historyData = data;
                    return historyFactory.historyData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        historyFactory.viewInvoice = function (id, dlt) {
            var param = { invoiceId: id, Token: dlt };

            return dataService
            .getSetData("/component/ViewInvoice", param)
                    .then(function (data) {
                        historyFactory.invoiceHtml = data;
                        return historyFactory.invoiceHtml;
                    },
                    function (response) {
                        return response.data;
                    });
             };


        return historyFactory;
    };
    app.factory('historyService', ['dataService', historyService]);
}(angular.module("softouch")));;
(function (app) {
    var inviteService = function (dataService) {
        var inviteFactory = {};
        inviteFactory.supportData = [];
        inviteFactory.accountId = {};
        inviteFactory.email = {};
        inviteFactory.accountId.value = '';
        inviteFactory.email.value = '';
        inviteFactory.inviteKey = '';

        inviteFactory.submitRequest = function () {
            var param = {
                accountId: inviteFactory.accountId.value,
                email: inviteFactory.email.value
            };
            return dataService
                .getSetData("/component/InviteUser", param)
                .then(function (data) {
                    inviteFactory.supportData = data;
                    return inviteFactory.supportData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        return inviteFactory;
    };
    app.factory('inviteService', ['dataService', inviteService]);
}(angular.module("softouch")));;
(function (app) {
    var itemService = function ($rootScope, constants) {
        var itemFactory = {};
        itemFactory.searchCategoryObj = {};
        itemFactory.itemData = [];
        itemFactory.itemData.tagsData = [];
        itemFactory.itemData.producerName = '';
        itemFactory.itemData.selectedFilters = {
            b: [],
            s: [],
            pr: [],
            prs: [],
            ipp: [],
            p: [],
            pg: [],
            o: [],
            q: [],
            co: [],
            t: [],
            v: [],
            d: [],
            pb: [],
            g: [],
            l:[]
        };

        itemFactory.itemData.setToPage1 = function() {
            itemFactory.itemData.selectedFilters.pg = [];
            itemFactory.itemData.selectedFilters.pg.push({ id: 1, key: "pg", value: 1 });
        }
        itemFactory.itemData.setToPage0 = function () {
            itemFactory.itemData.selectedFilters.pg = [];
            itemFactory.itemData.selectedFilters.pg.push({ id: 0, key: "pg", value: 0 });
        }
        itemFactory.filtersInitialized = false;
        itemFactory.initFilters = function () {
            itemFactory.itemData.tagsData = [];
            itemFactory.itemData.selectedFilters = {
                b: [],
                s: [],
                pr: [],
                prs: [],
                ipp: [],
                p: [],
                pg: [],
                o: [],
                q: [],
                co: [],
                t: [],
                v: [],
                d: [],
                pb: [],
                g: [],
                l: []
            };
            itemFactory.filtersInitialized = true;
        };

        itemFactory.removeFilterKeys = function () {
            itemFactory.itemData.selectedFilters['pr'] = [];
            itemFactory.itemData.selectedFilters['prs'] = [];
            itemFactory.itemData.selectedFilters['p'] = [];
            itemFactory.itemData.selectedFilters['q'] = [];
            itemFactory.itemData.selectedFilters['co'] = [];
            itemFactory.itemData.selectedFilters['t'] = [];
            itemFactory.itemData.selectedFilters['d'] = [];
            itemFactory.itemData.selectedFilters['pb'] = [];
            itemFactory.itemData.selectedFilters['l'] = [];
        }

        itemFactory.removeFilterKey = function (item) {
            var arr = itemFactory.itemData.selectedFilters[item.key]
            var rtrn = arr.filter(function (el) {
                return (el.id != item.id);
            });
            if (rtrn.length == 0) { rtrn = [] };
            itemFactory.itemData.selectedFilters[item.key] = rtrn;
            return;
        }


        itemFactory.topics = function () {
            return parseString(itemFactory.itemData.selectedFilters.t);
        };

        itemFactory.itemTitle = function () {
            var tmp = ''
            if (itemFactory.itemData.selectedFilters['b'].length > 2) {
                 return 'Media';
            }
            else
            {
                switch (itemFactory.itemData.selectedFilters['b'].length) {
                    case 0:
                        return 'All Media';
                        break;
                    case 1:
                        return itemFactory.itemData.selectedFilters['b'][0].value;
                        break;
                    case 2:
                        var addedIDs = parseInt(itemFactory.itemData.selectedFilters['b'][0].id) +  parseInt(itemFactory.itemData.selectedFilters['b'][1].id);
                        var test = ((addedIDs & 192) == 192);
                        if (test) { return 'Backgrounds'; } else { return 'Media'; }
                        break;
                    default:
                        return 'Media';
                        break;
                }
                 (itemFactory.itemData.selectedFilters['b']) ? null : null;
            }
            
        }

        itemFactory.producers = function () {
            var obj = itemFactory.itemData.selectedFilters.pr;
                //returns true is it is an array
                if (obj.constructor.toString().indexOf('Array') == -1)
                    return itemFactory.itemData.selectedFilters.pr;
                else
                    return parseString(itemFactory.itemData.selectedFilters.pr);
        };

        itemFactory.prices = function () {
            return parseString(itemFactory.itemData.selectedFilters.pb);
        };

        itemFactory.colors = function () {
            return parseString(itemFactory.itemData.selectedFilters.co);
        };

        itemFactory.durations = function () {
            return parseString(itemFactory.itemData.selectedFilters.d);
        };

        itemFactory.quality = function () {
            return parseString(itemFactory.itemData.selectedFilters.q);
        };

        itemFactory.tags = function () {
            return parseString(itemFactory.itemData.tagsData);
        };

        itemFactory.searchString = function () {
            return parseString(itemFactory.itemData.selectedFilters.s);
        };

        itemFactory.languages = function () {
            return parseString(itemFactory.itemData.selectedFilters.l);
        };

        itemFactory.searchType = function () {
            if (itemFactory.itemData.selectedFilters.s.length > 0 ) return 'Search';
            if (itemFactory.itemData.selectedFilters.g.length > 0) return 'Tag';
            return '';
        };

        itemFactory.arrayParse = function (key) {
            var obj = itemFactory.itemData.selectedFilters[key];
            return parseString(obj);
        };

        // includes 's/' in url
        itemFactory.filterUrl = function () {
            var tmp = [];
            var returnString = '';
            var bval = 0;
            var tmpString = '';
            $.each(itemFactory.itemData.selectedFilters, function (index, value) {
                var tmp = itemFactory.itemData.selectedFilters[index];
                if (tmp.length > 0) {
                    returnString += tmp[0].key + '/';
                    $.each(tmp, function (ind, val) {
                        if (tmp[0].key == 'b') {
                            bval += parseInt(val.id);
                        } else {
                            if (ind == tmp.length - 1) {
                                switch (tmp[0].key) {
                                    case 's':
                                        tmpString += val.value;
                                        break;
                                    default:
                                        tmpString += val.id;
                                        break;
                                }
                            } else {
                                tmpString += val.id + '-'
                            };
                        };
                    });
                    if (bval > 0) { returnString += bval + '/'; bval = 0 };
                    if (tmpString != '' ) { returnString += tmpString + '/'; tmpString = '' };
                };
            });
            return  returnString;
        };




        function parseString(arr) {
            if (arr) {
                var tmpString = '';
                $.each(arr, function (index, value) {
                    tmpString += ('-' + value.id);
                });
                (tmpString) ? tmpString = tmpString.substring(1, tmpString.length) : tmpString = arr;
                return tmpString;
            }
        };

        itemFactory.availableFilters = [];

        itemFactory.categoryName = '';
        itemFactory.url = '';

        return itemFactory;
    };
    app.factory('itemService', ['$rootScope', 'constants', itemService]);
}(angular.module("softouch")));;
(function (app) {
    var licenseService = function (dataService) {
        var licenseFactory = {};
        licenseFactory.licenseData = [];

        licenseFactory.getSoftwareLicense = function (postData) {
            return dataService
                .getSetData("/component/GetSoftwareLicense", postData)
                .then(function (data) {
                    licenseFactory.licenseData = data;
                    return licenseFactory.licenseData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        return licenseFactory;
    };
    app.factory('licenseService', ['dataService', licenseService]);
}(angular.module("softouch")));;
(function (app) {
    var listService = function (constants) {
        var listFactory = {};

        listFactory.getStaticList = function (listType) {
            switch (listType) {
                case 'sort':
                    return getSortList();
                case 'search':
                    return getSearchList();
                case 'ipp':
                    return getIppList();
                case 'account':
                    return getAccountMenuList();
                case 'license':
                    return getLicenseList();
                case 'cancelReasons':
                    return getCancelList();
                default:
                    return [];
            }
        };

        function getCancelList() {
            var oList = [
                {
                    id: '1',
                    name: '- Select a reason -',
                    value: '1',
                    selected: false
                }, {
                    id: '2',
                    name: 'Incompatible Windows hardware',
                    value: '2',
                    selected: false
                }, {
                    id: '3',
                    name: 'Switching to macOS',
                    value: '3',
                    selected: false
                }, {
                    id: '4',
                    name: 'Switching presentation products',
                    value: '4',
                    selected: false
                }, {
                    id: '5',
                    name: 'Doesn\'t include the features needed',
                    value: '5',
                    selected: false
                }, {
                    id: '6',
                    name: 'Prefer One Time Purchase over Subscription',
                    value: '6',
                    selected: false
                }, {
                    id: '7',
                    name: 'Pricing is too high',
                    value: '7',
                    selected: false
                }, {
                    id: '8',
                    name: 'Organization no longer exists',
                    value: '8',
                    selected: false
                }, {
                    id: '9',
                    name: 'Other',
                    value: '9',
                    selected: false
                }];
            return oList;
        }
        
        function getIppList() {
            var oList = [
                {
                    name: '25',
                    key: 'ipp',
                    id: 25,
                    value: 25
                },
                {
                    name: '50',
                    key: 'ipp',
                    id: 50,
                    value: 50
                },
                {
                    name: '75',
                    key: 'ipp',
                    id: 75,
                    value: 75
                },
                {
                    name: '100',
                    key: 'ipp',
                    id: 100,
                    value: 100
                }];
            return oList;
        }

        function getAccountMenuList() {
            var oList = [
                {
                    Name: 'My Account',
                    url: '/account'
                },
                {
                    Name: 'Product Licenses',
                    url: '/account/licenses'
                },
                {
                    Name: 'Media Downloads',
                    url: '/media/filters/mm/18'
                },
                {
                    Name: 'Favorites',
                    url: '/media/filters/mm/1'
                }];
            return oList;
        }

        function getLicenseList() {
            var oList = [{
                checked: false,
                id: 87058,
                name: 'Campus License',
                value: 'Campus License',
                projection: 'Campus license',
                checkMark: 'checkmarkGreen',
                price: 499,
                url: ''
            },{
                checked: false,
                id: 87060,
                name: 'Single Projector License',
                price: 399,
                value: 'Single Projector License',
                projection: 'Single projector license',
                checkMark: 'checkmarkRed',
                url: ''
                }];
            return oList;
        }
        
        function getSearchList() {
            var oList = [
            {
                name: 'All Media'
            },
            {
                name: 'Backgrounds',
                url: '/b/' + constants[0].ProductType.Background
            },
            {
                name: 'Countdowns',
                url: '/b/' + constants[0].ProductType.Countdown
            },
            {
                name: 'Collections',
                url: '/bun/1'
            },
            {
                name: 'Lower Thirds',
                url: '/b/' + constants[0].ProductType.LowerThirds
            },
            {
                name: 'Lyric Media',
                url: '/b/' + constants[0].ProductType.LyricMedia
            },
            {
                name: 'Mini Movies',
                url: '/b/' + constants[0].ProductType.Minimovie
            },
            {
                name: 'Social Media',
                url: '/b/' + constants[0].ProductType.SocialMedia
            },
            {
                name: 'Title Media',
                url: '/b/' + constants[0].ProductType.TitleMedia
            }];

            return oList;
        }
        
        function getSortList() {
            var oList = [
            {
                id: 2,
                name: 'New'
            },
            {
                id:1,
                name: 'Popular'
            },
            {
                id: 3,
                name: 'Price Low to High'
            },
            {
                id: 4,
                name: 'Price High to Low'
            }];
            return oList;
        }
        
        return listFactory;
    };
    app.factory('listService', ['constants', listService]);
}(angular.module("softouch")));;
(function (app) {
    var messageService = function (dataService) {
        var messageFactory = {};
        messageFactory.errorData = [];

        messageFactory.errorText = '';
        messageFactory.infoText = '';
        messageFactory.error = {};
        messageFactory.info = {};


        messageFactory.currentError = {};
        // ******************************************************************************************* display error / info 
        messageFactory.displayError = function (txt) {
            if (txt != null) {
                messageFactory.errorText = txt;
                messageFactory.error.messages = [];
                messageFactory.error.messages.push(txt);
            }

            $("#errorDiv").removeClass('hidden');
        }

        messageFactory.displayInfo = function (txt) {
            if (txt != null) {
                messageFactory.infoText = txt;
                messageFactory.info.messages = [];
                messageFactory.info.messages.push(txt);
            }
            $("#infoDiv").removeClass('hidden');
        };

        messageFactory.displayMobileError = function (txt) {
            if (txt != null) {
                messageFactory.errorText = txt;
                messageFactory.error.messages = [];
                messageFactory.error.messages.push(txt);
            }
            $(".errorMobileDiv").removeClass('hidden');
        };

        messageFactory.displayMobileInfo = function (txt) {
            if (txt != null) {
                messageFactory.infoText = txt;
                messageFactory.info.messages = [];
                messageFactory.info.messages.push(txt);
            }
            $(".infoMobileDiv").removeClass('hidden');
        };
// ****************************************************************** clear error / info 
        messageFactory.clearError = function () {
            messageFactory.error = {};
            messageFactory.error.messages = [];
            $("#errorDiv").addClass('hidden');
        };
        messageFactory.clearInfo = function () {
            messageFactory.info = {};
            messageFactory.info.messages = [];
            $("#infoDiv").addClass('hidden');
        };

        messageFactory.clearMobileError = function () {
            messageFactory.clearError();
            $(".errorMobileDiv").addClass('hidden');
        };
        messageFactory.clearMobileInfo = function () {
            messageFactory.clearInfo();
            $(".infoMobileDiv").addClass('hidden');
        };

        messageFactory.hideMessages = function () {
            clearMobileError();
            clearMobileInfo();
        };

        messageFactory.addError = function(itm){
            messageFactory.errorData.push(itm);
            messageFactory.currentError = itm;
        }

        messageFactory.removeError = function (itm) {
            var i = messageFactory.errorData.indexOf(itm);
            if (i != -1) {
                messageFactory.errorData.splice(i, 1);
            }
            (messageFactory.errorData.length > 0) ? messageFactory.currentError = (messageFactory.errorData[(messageFactory.errorData.length - 1)]) : messageFactory.currentError = {};
        };

        return messageFactory;
    };
    app.factory('messageService', ['dataService', messageService]);
}(angular.module("softouch")));;
(function (app) {
    var organizationService = function ($rootScope, dataService) {
        var organizationFactory = {};
        organizationFactory.errors = [];
        organizationFactory.orgList = [];
        organizationFactory.selectedOrganization = [];
        organizationFactory.newOrganization = {};
        organizationFactory.subscription = {};
        organizationFactory.getOrgs = function () {
            
            return dataService
                    .getSetData('/component/GetOrganizations', null)
                    .then(function (data) {
                        if (data.Error) {
                            organizationFactory.errors = data.ErrorMessages;
                            organizationFactory.orgList = [];
                            organizationFactory.selectedOrganization = [];
                        }
                        else {
                            organizationFactory.orgList = data;
                            var temp = organizationFactory.orgList.filter(function (i, n) { return i.IsDefaultAccount });
                            (temp.length > 0)
                                ? organizationFactory.selectedOrganization = temp[0]
                                : organizationFactory.selectedOrganization = organizationFactory.orgList[0];
                        }
                        $rootScope.$broadcast('orgListReady', {
                            'orgList': organizationFactory.orgList
                        });
                        return organizationFactory.orgList;
                    },
                    function (response) {
                    });
        };

        organizationFactory.addOrg = function () {
            var parms = organizationFactory.newOrganization;
            return dataService
                .getSetData('/component/AddOrganization', parms)
                .then(function (data) {
                        if (data.Error)
                            return data;
                    organizationFactory.orgList = data;
                    var temp = organizationFactory.orgList.filter(function (i, n) { return i.Name == organizationFactory.newOrganization.Name });
                    (temp.length > 0) ? organizationFactory.selectedOrganization = temp[0] : organizationFactory.selectedOrganization = {};
                    $rootScope.$broadcast('orgListReady', {
                        'orgList': organizationFactory.orgList
                    });
                    return data;
                },
                function (response) {
                });
        }

        organizationFactory.updateOrg = function () {
            var parms = organizationFactory.newOrganization;
            return dataService
                .getSetData('/component/UpdateOrganization', parms)
                .then(function (data) {
                    if (data.Error)
                        return data;
                    organizationFactory.orgList = data;
                    var temp = organizationFactory.orgList.filter(function (i, n) { return i.Name == organizationFactory.newOrganization.Name });
                    (temp.length > 0) ? organizationFactory.selectedOrganization = temp[0] : organizationFactory.selectedOrganization = {};
                    $rootScope.$broadcast('orgListReady', {
                        'orgList': organizationFactory.orgList
                    });
                    return data;
                },
                function (response) {
                });
        }

        organizationFactory.changeOrg = function () {
            var parms = {
                accountId : organizationFactory.selectedOrganization.AccountId,
                website : 1                         
            }

            return dataService
                .getSetData('/component/ChangeAccount', parms)
                .then(function(data) {
                        if (data.Error) {
                            organizationFactory.orgList = [];
                            organizationFactory.selectedOrganization = [];
                        } else {

                            organizationFactory.subscription = data.subscription;
                            $rootScope.$broadcast('updatedOrg',
                            {
                                'selectedOrganization': organizationFactory.selectedOrganization
                            });
                        }
                    },
                    function(response) {
                    });
        }

        organizationFactory.clear = function () {
            organizationFactory.orgList = [];
            organizationFactory.selectedOrganization = [];
            $rootScope.$broadcast('orgListReady', {
                'orgList': organizationFactory.orgList
            });
        };

        return organizationFactory;
    };
    app.factory('organizationService', ['$rootScope', 'dataService', organizationService]);
}(angular.module("softouch")));;
(function (app) {
    var paginationService = function (dataService, listService) {
        var paginationFactory = {};
        paginationFactory.filterTitle = 'Purchased Media';
        paginationFactory.pageData = [];

        paginationFactory.pageSize = 16;

         paginationFactory.numberOfPages = function (){
             var rtrn = Math.ceil(paginationFactory.previewData.length / paginationFactory.pageSize);
             return rtrn;
         };

        paginationFactory.currentPage = 1;

        paginationFactory.goNext = function () {
            (paginationFactory.currentPage + 1 > paginationFactory.numberOfPages) ? paginationFactory.currentPage = paginationFactory.numberOfPages : paginationFactory.currentPage += 1;
            calcPages();
        }
        paginationFactory.goPrev = function () {
            (paginationFactory.currentPage - 1 < 1) ? paginationFactory.currentPage = 1 : paginationFactory.currentPage -= 1;
            calcPages();
        }
        paginationFactory.goFirst = function () {
            paginationFactory.currentPage = 1;
            calcPages();
        }
        paginationFactory.goLast = function () {
            $('html,body').scrollTop(0);
            paginationFactory.currentPage = paginationFactory.numberOfPages;
            calcPages();
        }
        paginationFactory.goPage = function (pageNum) {
            paginationFactory.currentPage = pageNum;
            calcPages();
        }

        paginationFactory.pageFirst = null;
        paginationFactory.pageLast = null;
        paginationFactory.pageval1 = null;
        paginationFactory.pageval2 = null;
        paginationFactory.pageval3 = null;
        paginationFactory.pageval4 = null;
        paginationFactory.pageval5 = null;


        function calcPages() {
            paginationFactory.pageFirst = 1;
            if (paginationFactory.currentPage < 4) {
                paginationFactory.pageFirst = null;
                if (paginationFactory.currentPage < 3) { paginationFactory.pageval1 = null; } else { paginationFactory.pageval1 = paginationFactory.currentPage - 2; };
                if (paginationFactory.currentPage < 2) { paginationFactory.pageval2 = null; } else { paginationFactory.pageval2 = paginationFactory.currentPage - 1; };
                paginationFactory.pageval3 = paginationFactory.currentPage + 0;
                paginationFactory.pageval4 = paginationFactory.currentPage + 1;
                paginationFactory.pageval5 = '...';
            }
            else {

                paginationFactory.pageval1 = '...';
                paginationFactory.pageval2 = paginationFactory.currentPage - 1;
                paginationFactory.pageval3 = paginationFactory.currentPage + 0;
                paginationFactory.pageval4 = paginationFactory.currentPage + 1;
                paginationFactory.pageval5 = '...';
            }

            paginationFactory.pageLast = paginationFactory.numberOfPages;
            var pagesUntilEnd = paginationFactory.numberOfPages - paginationFactory.currentPage;
            if (pagesUntilEnd < 4) {
                paginationFactory.pageLast = null;
                paginationFactory.pageval2 = paginationFactory.currentPage - 1;
                (paginationFactory.pageval2 == 0) ? paginationFactory.pageval2 = null : paginationFactory.pageval2 = paginationFactory.pageval2;
                if (pagesUntilEnd < 1) {
                    paginationFactory.pageval4 = null;
                } else {
                    paginationFactory.pageval4 = paginationFactory.currentPage + 1;
                };
                if (pagesUntilEnd < 2) {
                    paginationFactory.pageval5 = null;
                } else {
                    paginationFactory.pageval5 = paginationFactory.currentPage + 2;
                };
            }
        };

        paginationFactory.initPaginationVariables = function () {
            // Initialize Pagination Variables
            paginationFactory.previewData = [];
            paginationFactory.currentPage = 1;
            paginationFactory.numberOfPages = 0;

            paginationFactory.ippList = listService.getStaticList('ipp');
            paginationFactory.ipp = paginationFactory.ippList[0];
            paginationFactory.pageSize = paginationFactory.ipp.value;
        };
        return paginationFactory;
    };
    app.factory('paginationService', ['dataService', 'listService', paginationService]);
}(angular.module("softouch")));;
(function (app) {
    var popoutService = function () {
        var popoutFactory = {};
        var mobileCheck1 = (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
        var mobileCheck2 = (/Mobi/.test(navigator.userAgent));

        popoutFactory.showPopout = function (type, loggedIn) {
            if (mobileCheck1 || mobileCheck2) {
                //cmp.href = "/checkout";
                $('#popout-' + type + ' .jq-popout').css('display', 'none');
            }

            //if (!(mobileCheck1 || mobileCheck2)) {
            //    $('.cart-dropdown-content').finish();
            //    $('.cart-dropdown-content').stop();
            //    $('.cart-dropdown-content').fadeIn('fast');
            //}

            if (type === 'account' && (!loggedIn || $("body").hasClass("checkout"))) {
                return;
            } else if (type === 'cart' && $("body").hasClass("checkout")) {
                return;
            } else {
                $('#popout-' + type + ' .jq-popout').finish();
                $('#popout-' + type + ' .jq-popout').stop();
                $('#popout-' + type + ' .jq-popout').fadeIn('fast');
            }
        };

        popoutFactory.hidePopout = function() {
            $('.jq-popout').css('display', 'none');
        };

        return popoutFactory;
    };
    app.factory('popoutService', [popoutService]);
}(angular.module("softouch")));;
(function (app) {
    var pricingService = function (dataService) {
        var pricingFactory = {};
        pricingFactory.pricingData = [];

        pricingFactory.getPricing = function () {
            return dataService
                .getSetData("/component/getsoftwareoptions")
                .then(function (data) {
                    pricingFactory.pricingData = parsePlans(data);
                    return pricingFactory.pricingData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        pricingFactory.setPricing = function (data) {
            pricingFactory.pricingData = parsePlans(data);
            return pricingFactory.pricingData;
        };

        var parsePlans = function (data) {
            //set things to default
            data.currentSubscription.BasicPreSelect = 0;
            data.currentSubscription.PremiumPreSelect = 0;
            data.currentSubscription.ChurchSize = 0;
            var subscriptionTypes = [];

            var campusPlan = data.softwareOptions.filter(function (value) {
                return value.OptionTitle === "Campus License";
            })[0];

            var singlePlan = data.softwareOptions.filter(function (value) {
                return value.OptionTitle === "Single License";
            })[0];

            data.oneTimePurchase = { Campus: campusPlan, SingleProjector: singlePlan }

            var basicMonthlyPlans = data.softwareOptions.filter(function (product) {
                return product.SubscriptionTerm === 1 && product.IsPremiumSoftware === false && product.IsAnnualCommitment === false;
            });

            var subscriptionListSet = false;

            $.each(basicMonthlyPlans, function (key, value) {

                var baseMonthlyCommit = data.softwareOptions.filter(function (product) {
                    return product.IsPremiumSoftware === false && product.SubscriptionTerm === 1 && product.IsAnnualCommitment === true && value.OptionTitle == product.OptionTitle;
                })[0];
                //find the basic that is Annual and matches the Option Title to basicMonthly
                var baseAnnual = data.softwareOptions.filter(function (product) {
                    return product.IsPremiumSoftware === false && product.SubscriptionTerm === 2 && product.IsAnnualCommitment === false && value.OptionTitle == product.OptionTitle;
                })[0];
                //find the basic that is Annual and matches the Option Title to basicMonthly
                var premiumMonthlyCommit = data.softwareOptions.filter(function (product) {
                    return product.IsPremiumSoftware === true && product.SubscriptionTerm === 1 && product.IsAnnualCommitment === true && value.OptionTitle == product.OptionTitle;
                })[0];
                //find the basic that is Annual and matches the Option Title to basicMonthly
                var premiumAnnual = data.softwareOptions.filter(function (product) {
                    return product.IsPremiumSoftware === true && product.SubscriptionTerm === 2 && product.IsAnnualCommitment === false && value.OptionTitle == product.OptionTitle;
                })[0];

                value.Savings = ((value.MaxPrice * 12) - baseAnnual.MaxPrice);
                baseMonthlyCommit.Savings = ((baseMonthlyCommit.MaxPrice * 12) - baseAnnual.MaxPrice);
                premiumMonthlyCommit.Savings = ((premiumMonthlyCommit.MaxPrice * 12) - premiumAnnual.MaxPrice);

                var premiumMonthly = {
                    CartDetailId: null,
                    IsAnnualCommitment: false,
                    IsPremiumSoftware: true,
                    IsSingleLicense: false,
                    IsSiteLicense: true,
                    IsSubscription: true,
                    OptionTitle: "disabled",
                    CheckoutPrice: 000,
                    ProductId: null,
                    PromoCode: null,
                    SubscriptionTerm: 1,
                    SubscriptionTermText: "",
                }

                var tmp = {
                    name: value.OptionTitle,
                    base: [baseAnnual, baseMonthlyCommit, value],
                    premium: [premiumAnnual, premiumMonthlyCommit, premiumMonthly]
                };

                subscriptionTypes.push(tmp);

                //sets the curch size dropdown correctly
                if (baseAnnual.CartDetailId == data.currentSubscription.CurrentDetailId
                    || baseMonthlyCommit.CartDetailId == data.currentSubscription.CurrentDetailId
                    || value.CartDetailId == data.currentSubscription.CurrentDetailId
                    || premiumAnnual.CartDetailId == data.currentSubscription.CurrentDetailId
                    || premiumMonthlyCommit.CartDetailId == data.currentSubscription.CurrentDetailId
                    || subscriptionListSet == false) {
                    data.currentSubscription.ChurchSize = key;
                    subscriptionListSet = true;
                };
                //checks to see if current sub is basic and yearly
                if (baseAnnual.CartDetailId == data.currentSubscription.CurrentDetailId) {
                    data.currentSubscription.BasicPreSelect = 0;
                }
                //checks to see if current sub is basic and yearly
                if (baseMonthlyCommit.CartDetailId == data.currentSubscription.CurrentDetailId) {
                    data.currentSubscription.BasicPreSelect = 1;
                }
                //checks to see if current sub is basic and monthly
                if (value.CartDetailId == data.currentSubscription.CurrentDetailId) {
                    data.currentSubscription.BasicPreSelect = 2;
                }
                //checks to see if current sub is premium and yearly
                if (premiumAnnual.CartDetailId == data.currentSubscription.CurrentDetailId) {
                    data.currentSubscription.PremiumPreSelect = 0;
                }
                //checks to see if current sub is premium and yearly
                if (premiumMonthlyCommit.CartDetailId == data.currentSubscription.CurrentDetailId) {
                    data.currentSubscription.PremiumPreSelect = 1;
                }
            });

            data.softwareOptions = subscriptionTypes;
            return data;
        };

        return pricingFactory;
    };
    app.factory('pricingService', ['dataService', pricingService]);
}(angular.module("softouch")));;
(function (app) {
    var producerService = function (dataService) {
        var producerFactory = {};
        producerFactory.producers = [];

        producerFactory.GetProducers = function () {
            return dataService
                .getSetData("/component/GetProducers", null)
                .then(function (data) {
                    producerFactory.producers = data;
                    return producerFactory.producers;
                },
                    function (response) {
                        return response.data;
                    });
        };

        return producerFactory;
    };
    app.factory('producerService', ['dataService', producerService]);
}(angular.module("softouch")));;
(function (app) {
    var productEventService = function (dataService) {
        var productEventFactory = {};

        productEventFactory.insertProductEvent = function (postData) {
            return dataService
                .getSetData("/component/InsertProductEvent", postData)
                .then(function (data) {
                    return data;
                },
                function (response) {
                    return response.data;
                });
        };

        return productEventFactory;
    };
    app.factory('productEventService', ['dataService', productEventService]);
}(angular.module("softouch")));;
(function (app) {
    var profileService = function (dataService) {
        var profileFactory = {};
        profileFactory.profileData = [];

        //get the items form database
        profileFactory.getProfile = function () {
            return dataService
                .getSetData("/component/UserInfo/")
                .then(function (data) {
                    profileFactory.profileData = data;
                    return profileFactory.profileData;
                },
                    function (response) {
                        return response.data;
                    });
        };

        profileFactory.updateContactInformation = function (first, last) {
            var parms = {
                'First' : first,
                'Last' : last
            };
            return dataService
                .getSetData("/component/updateContactInformation/", parms)
                .then(function (data) {
                    profileFactory.profileData = data;
                    return profileFactory.profileData;
                },
                    function (response) {
                        return response.data;
                    });
        };


        return profileFactory;
    };
    app.factory('profileService', ['dataService', profileService]);
}(angular.module("softouch")));;
(function (app) {
    var secondaryMenuService = function ($rootScope, $location, dataService, listService, itemService) {
        var secondaryMenuFactory = {};
        secondaryMenuFactory.menuData = [];
        secondaryMenuFactory.mainTopic = '';

        secondaryMenuFactory.selectedItem = {};

        secondaryMenuFactory.reset = function () {
            itemService.initFilters();
            secondaryMenuFactory.mainTopic = '';
            $rootScope.$broadcast('TopicChange', { mainTopic: secondaryMenuFactory.mainTopic, selectedItem : secondaryMenuFactory.selectedItem });
        }

        secondaryMenuFactory.selectMe = function (val) {
            switch (val) {
                case 'software':
                    secondaryMenuFactory.selectedItem = listService.getStaticList(val)[0];
                    setVal(val);
                    break;
                case 'account':
                    secondaryMenuFactory.selectedItem = listService.getStaticList(val)[0];
                    setVal(val);
                    break;
                case 'media':
                    secondaryMenuFactory.selectedItem = {};
                    setVal(val);
                    break;
                case 'support':
                    secondaryMenuFactory.selectedItem = {};
                    setVal(null);
                    break;
                default:
                    break;
            };
        };

        var setVal = function (val) {
            secondaryMenuFactory.mainTopic = val;
            $rootScope.$broadcast('TopicChange', { mainTopic: secondaryMenuFactory.mainTopic, selectedItem : secondaryMenuFactory.selectedItem });
        };


        return secondaryMenuFactory;
    };
    app.factory('secondaryMenuService', ['$rootScope', '$location', 'dataService', 'listService', 'itemService', secondaryMenuService]);
}(angular.module("softouch")));;
(function (app) {
    var urlService = function ($rootScope, dataService, $location, itemService, dataFilterService, constants, cookieService) {
        var urlFactory = {};
        urlFactory.rawData = [];
        urlFactory.category = '';
        urlFactory.searchTerms = '';


        urlFactory.checkUrlSync = function (modifiedUrl) {
            var tmpUrlArray = modifiedUrl.split('/');
            var SermonVideoIndex = tmpUrlArray.indexOf(constants[0].SermonVideoUrlVal);
            var BackrgoundIndex = tmpUrlArray.indexOf(constants[0].BackrgoundUrlVal);
            var CollectionIndex = tmpUrlArray.indexOf(constants[0].CollectionUrlVal);
            var CountdownsIndex = tmpUrlArray.indexOf(constants[0].CountdownsUrlVal);
            var test = false;
            if (SermonVideoIndex > 0) {
                var b = JSON.parse(cookieService.getCookie('filters')).b;
                (b.length > 0) ? test = (b[0].id == 256) : null  ;
            }

            if (BackrgoundIndex > 0 ) {
                var b = JSON.parse(cookieService.getCookie('filters')).b;
                (b.length > 0) ? test = (parseInt(b[0].id) + parseInt(b[1].id) ==  192) : null;
            }

            if (CollectionIndex > 0 ) {
                var b = JSON.parse(cookieService.getCookie('filters')).b;
                (b.length > 0) ? test = (b[0].id == 512) : null;
            }
            if (CountdownsIndex > 0 ) {
                var b = JSON.parse(cookieService.getCookie('filters')).b;
                (b.length > 0) ? test = (b[0].id == 8192) : null;
            }
            return test
        }

        urlFactory.parse = function (modifiedUrl) {
            var tmpUrlArray = modifiedUrl.split('/');

            var SermonVideoIndex = tmpUrlArray.indexOf(constants[0].SermonVideoUrlVal);
            var BackrgoundIndex = tmpUrlArray.indexOf(constants[0].BackrgoundUrlVal);
            var CollectionIndex = tmpUrlArray.indexOf(constants[0].CollectionUrlVal);
            var CountdownsIndex = tmpUrlArray.indexOf(constants[0].CountdownsUrlVal);

            /// gets the array index of matching keywords
            var searchIndex = tmpUrlArray.indexOf(constants[0].searchUrlVal);
            var tagIndex = tmpUrlArray.indexOf(constants[0].tagUrlVal);
            var producerIndex = tmpUrlArray.indexOf(constants[0].producerUrlVal);
            var orderIndex = tmpUrlArray.indexOf(constants[0].orderUrlVal);
            var ippIndex = tmpUrlArray.indexOf(constants[0].ippUrlVal);
            var pageIndex = tmpUrlArray.indexOf(constants[0].pageUrlVal);
            var searchFilterIndex = tmpUrlArray.indexOf(constants[0].searchFilterUrlVal);
            var tagFilterIndex = tmpUrlArray.indexOf(constants[0].tagFilterUrlVal);
            var producerFilterIndex = tmpUrlArray.indexOf(constants[0].producerFilterUrlVal);
            var durationIndex = tmpUrlArray.indexOf(constants[0].durationUrlVal);
            var priceIndex = tmpUrlArray.indexOf(constants[0].priceUrlVal);
            var qualityIndex = tmpUrlArray.indexOf(constants[0].qualityUrlVal);
            var colorIndex = tmpUrlArray.indexOf(constants[0].colorUrlVal);
            var topicIndex = tmpUrlArray.indexOf(constants[0].topicUrlVal);
            var productTypeIndex = tmpUrlArray.indexOf(constants[0].productTypeUrlVal);



            // these check add elements to the return JSON
            itemService.initFilters();

            //Search
            if (searchIndex > 0) {
                var tmpItem = {
                    id: 1,
                    key: 's',
                    value: tmpUrlArray[searchIndex + 1],
                    checked: true
                }
                
                itemService.itemData.selectedFilters.s.push(tmpItem);
            };
            if (searchFilterIndex > 0) {
                var tmpItem = {
                    id: 1,
                    key: 's',
                    value: tmpUrlArray[searchIndex + 1],
                    checked: true
                }
                itemService.itemData.selectedFilters.s.push(tmpItem);
            }

            //Tag
            if (tagIndex > 0) {
                var tmpItem = {
                    id: tmpUrlArray[tagIndex + 1],
                    key: 'g',
                    value: tmpUrlArray[tagIndex + 2].toLowerCase()
                }
                itemService.itemData.selectedFilters.g.push(tmpItem);
            }

            //Producer
            if (producerIndex > 0) {
                var tmpItem = {
                    id: tmpUrlArray[producerIndex + 1],
                    key: 'pr',
                    value: tmpUrlArray[producerIndex + 2].toLowerCase(),
                    checked: true
                }
                itemService.itemData.selectedFilters.pr.push(tmpItem);
            }

            if (producerFilterIndex > 0) {
                var tmpIdArray = tmpUrlArray[producerFilterIndex + 1].split('-');
                $.each(tmpIdArray, function (id, value) {
                    addDefault('pr', value.id);
                });
            }

            //Page Number
            if (pageIndex > 0) {
                var tmpItem = {
                    id: tmpUrlArray[pageIndex + 1],
                    key: 'pg',
                    value: tmpUrlArray[pageIndex + 1]
                }
                itemService.itemData.selectedFilters.pg.push(tmpItem);
            }
            else {
                var tmpItem = {
                    id: 1,
                    key: 'pg',
                    value: 1

                }
                itemService.itemData.selectedFilters.pg.push(tmpItem);
            }

            // Items per page
            if (ippIndex > 0) {
                var tmpItem = {
                    id: tmpUrlArray[ippIndex + 1],
                    key: 'ipp',
                    value: tmpUrlArray[ippIndex + 1]
                }
                itemService.itemData.selectedFilters.ipp.push(tmpItem);
            }
            else {
                var tmpItem = {
                    id: 25,
                    key: 'ipp',
                    value: 25
                }
                itemService.itemData.selectedFilters.ipp.push(tmpItem);
            }
            // ********************************************************************************************

            if (SermonVideoIndex > 0) {
                var tmpItem = {
                    id: 256,
                    key: 'b',
                    value: "Sermon Videos",
                    checked: true
                }
                itemService.itemData.selectedFilters.b.push(tmpItem);
            }
            if (BackrgoundIndex > 0) {
                var tmpItem = {
                    id: 64,
                    key: 'b',
                    value: "Stills",
                    checked: true
                }
                itemService.itemData.selectedFilters.b.push(tmpItem);

                var tmpItem = {
                    id: 128,
                    key: 'b',
                    value: "Motions",
                    checked: true
                }
                itemService.itemData.selectedFilters.b.push(tmpItem);
            }
            if (CollectionIndex > 0) {
                var tmpItem = {
                    id: 512,
                    key: 'b',
                    value: "Collections",
                    checked: true
                }
                itemService.itemData.selectedFilters.b.push(tmpItem);
            }
            if (CountdownsIndex > 0) {
                var tmpItem = {
                    id: 8192,
                    key: 'b',
                    value: "Countdowns",
                    checked: true
                }
                itemService.itemData.selectedFilters.b.push(tmpItem);
            }

            if (productTypeIndex > 0) {
                itemService.itemData.selectedFilters.b = null;
                itemService.itemData.selectedFilters.b = [];

                var ptype = tmpUrlArray[productTypeIndex + 1];

                for (var bit = 1; bit <= ptype; bit *= 2) {
                    if ((ptype & bit) > 0) {
                        addDefault('b', bit);
                    }
                }
            }
            // **************************************************************************************

            // Sort Order
            if (orderIndex > 0) {
                var tmpItem = {
                    id: tmpUrlArray[orderIndex + 1],
                    key: 'o',
                    value: tmpUrlArray[orderIndex + 1]
                }
                itemService.itemData.selectedFilters.o.push(tmpItem);
            }
            else {
                var tmpItem = {
                    id: 0,
                    key: 'o',
                    value: "Popular"
                }
                itemService.itemData.selectedFilters.o.push(tmpItem);
            }
            // Topics
            if (topicIndex > 0) {
                var tmpIdArray = tmpUrlArray[topicIndex + 1].split('-');
                $.each(tmpIdArray, function (id, value) {
                    addDefault('t', value);
                });
            }
            //duration
            if (durationIndex > 0) {
                var tmpIdArray = tmpUrlArray[durationIndex + 1].split('-');
                $.each(tmpIdArray, function (id, value) {
                    addDefault('d', value);
                });
            }
            //Price
            if (priceIndex > 0) {
                var tmpIdArray = tmpUrlArray[priceIndex + 1].split('-');
                $.each(tmpIdArray, function (id, value) {
                    addDefault('pb', value);
                });
            }
            //Quality
            if (qualityIndex > 0) {
                var tmpIdArray = tmpUrlArray[qualityIndex + 1].split('-');
                $.each(tmpIdArray, function (id, value) {
                    addDefault('q', value);
                });
            }
            cookieService.setFiltersCookie();
        };

        var addDefault = function (key, val) {
            var tmpFilters = dataFilterService.availableFilters.filter(function (itm, ind) {
                var tmp = {};
                (itm.Key) ? tmp = itm.Key : tmp = itm.key;
                return tmp == key;
            });
            if (tmpFilters.length == 0) {
                itemService.itemData.selectedFilters[key].push({ key: key, id: val, value: 'unknown', checked: true })
            } else {
                var tmpItems = tmpFilters[0].Values.filter(function (itm, ind) {
                    var tmp = {};
                    (itm.Key) ? tmp = itm.Key : tmp = itm.key;
                    return tmp == val;
                });
                if (tmpItems.length > 0) {
                    (tmpItems[0].Key) ? tmpkey = tmpItems[0].Key : tmpkey = tmpItems[0].key;
                    (tmpItems[0].Value) ? tmpval = tmpItems[0].Value : tmpval = tmpItems[0].value;
                    itemService.itemData.selectedFilters[key].push({ key: key, id: tmpkey, value: tmpval, checked: true })
                } 
            }


        };


        var parseProductType = function (item, val) {
            // id: 256, Name: 'Sermon Videos'
            // id: 128, Name: 'Motion Backgrounds'
            // id: 8192, Name: 'Countdowns'
            // id: 512, Name: 'Collections'
            // id: 64,Name: 'Stills'

            if ((val & 256) == 256) { addDefault(item, 256); };
            if ((val & 128) == 128) { addDefault(item, 128); };
            if ((val & 8192) == 8192) { addDefault(item, 8192); };
            if ((val & 64) == 64) { addDefault(item, 64); };
        };

        var convertCategory = function (category) {
            var tmp = '';
            switch (category) {
                case 'allmedia':
                    tmp = "All Media";
                    itemService.itemData.selectedFilters.b = [];
                    break;
                case 'sermonvideos':
                    tmp = "Sermon Videos";
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 256, value: tmp });
                    break;
                case 'motionbackgrounds':
                    tmp = "Backgrounds";
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 128, value: "Motions" });
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 64, value: "Stills" });
                    break;
                case 'motion-backgrounds':
                    tmp = "Backgrounds";
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 128, value: "Motions" });
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 64, value: "Stills" });
                    break;
                case 'countdowns':
                    tmp = "Countdowns";
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 8192, value: tmp });
                    break;
                case 'stills':
                    tmp = "Stills";
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 64, value: tmp });
                    break;
                case 'collections':
                    tmp = "Collections";
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 512, value: tmp });
                    break;
                case 'seasonal':
                    tmp = "All Media";
                    itemService.itemData.selectedFilters.b = [];
                    break;
                case 'producers':
                    tmp = "All Media";
                    itemService.itemData.selectedFilters.b = [];
                    break;
                case 'producer':
                    tmp = "All Media";
                    itemService.itemData.selectedFilters.b = [];
                    break;
                case 'search':
                    tmp = "All Media";
                    itemService.itemData.selectedFilters.b = [];
                    break;
                default:
                    tmp = "All Media";
                    itemService.itemData.selectedFilters.b = [];
            };

            return tmp;
        }

        urlFactory.setFilterUrl = function () {
            var tmp = itemService.filterUrl();
            (tmp != '') ? location.hash = tmp : null;
        }

        urlFactory.setCategory = function (category) {
            switch (category) {
                case 'sermonvideos':
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 256, value: 'Sermon Videos' });
                    break;
                case 'motionbackgrounds':
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 128, value: "Motions" });
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 256, value: "Sermon Videos" });
                    break;
                case 'motion-backgrounds':
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 128, value: "Motions" });
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 256, value: "Sermon Videos" });
                    break;
                case 'countdowns':
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 8192, value: 'Countdowns' });
                    break;
                case 'stills':
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 64, value: 'Stills' });
                    break;
                case 'collections':
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 512, value: 'Collections' });
                    break;
                default:
                    itemService.itemData.selectedFilters.b.push({ key: 'b', id: 9152, value: 'All Media' });
            };
        };


        return urlFactory;
    };
    app.factory('urlService', ['$rootScope', 'dataService', '$location', 'itemService', 'dataFilterService', 'constants', 'cookieService', urlService]);
}(angular.module("softouch")));;
(function (app) {
    var userService = function ($rootScope, dataService, cartService, cardService, constants, organizationService, listService) {
        var userFactory = {};

        userFactory.userData = {};
        userFactory.userData.salutation = "Login";
        userFactory.userData.availableStoreCredit = 0;
        userFactory.userData.loggedIn = false;
        userFactory.accountList = [];
        userFactory.orgList = [];
        userFactory.cartList = [];

        userFactory.signUp = function (parms) {
            var dataurl = constants[0].ActInfo.create;

            userFactory.userData.Username = parms.Email;
            userFactory.userData.Password = parms.Password;
            userFactory.userData.salutation = parms.First;

            return dataService.getSetData(dataurl, parms)
                .then(onAccountCreate, onAccountErr);
        };

        var onAccountCreate = function (data) {
            var parms = {
                Username: userFactory.userData.Username,
                Password: userFactory.userData.Password,
                Rememberme: true
            };

            userFactory.login(parms);
            return data;
        };

        userFactory.login = function (parms) {
            var dataurl = constants[0].ActInfo.postLogin;
            return dataService.getSetData(dataurl, parms)
                .then(onAccountLogin, onAccountErr);
        };

        userFactory.getLoginData = function () {
            var dataurl = constants[0].ActInfo.LoginUrl;
            return dataService.getSetData(dataurl, null)
                .then(onAccountData, onAccountErr);
            // testing cors
            //var dataurl = "https://softoucheasyworshipwebsite-staging.azurewebsites.net/component/userinfo";
            //return dataService.getSetData(dataurl, null, true)
            //    .then(onAccountData, onAccountErr);
        };

        userFactory.logout = function () {
            var dataurl = constants[0].ActInfo.LogoutUrl;
            return dataService.getSetData(dataurl, null)
                .then(onAccountLogout, onAccountErr);
        };

        userFactory.activeHref = function () {
            var href = "";
            (userFactory.userData.loggedIn) ? href = "/account" : href = constants[0].ActInfo.LoginAJSurl;
            return href;
        };

        var onAccountLogout = function (data) {
            userFactory.userData.salutation = "Sign In";
            userFactory.userData.loggedIn = false;
            userFactory.accountList = [];
            userFactory.guest = false;
            userFactory.userData.availableStoreCredit = 0;
            cardService.clear();
            organizationService.clear();
            $rootScope.$broadcast('loggedOut', {
                'loggedIn': false
            });
            return data;
        };

        var onAccountLogin = function (data) {
            return data;
        };

        var onAccountData = function (data) {
            userFactory.userData.loggedIn = data.loggedIn;
            if (data.loggedIn) {
                userFactory.userData.subscription = data.Subscription;
                userFactory.userData.needsToLogin = !data.loggedIn;
                userFactory.userData.salutation = data.fullName;
                userFactory.accountList = listService.getStaticList('account');
            }
            cartService.cartData = data.cartItems;
            organizationService.getOrgs().then(function (data) {
                $rootScope.$broadcast('loginDataReady', {
                    'data': data
                });
            });

            $rootScope.$broadcast('cartListReady', {
                'cartList': cartService.cartData
            });
        };

        var onAccountErr = function (response) {
            return response;
        };

        return userFactory;
    };
    app.factory('userService', ['$rootScope', 'dataService', 'cartService', 'cardService', 'constants', 'organizationService', 'listService', userService]);
}(angular.module("softouch")));;
(function (app) {
    'use strict';
    app.directive('broadcastScroll', ['$rootScope', '$window',
        function ( $rootScope, $window) {
            return {
                restrict: 'A', //the directive can be used as an attribute only
                link: function (scope, element, attrs) {
                    var w = angular.element($window);
                    var tmp = element;
                    w.bind('scroll', function () {
                        $rootScope.$broadcast('elementScroll', tmp);
                    });
                }
            };
        }]);
})(angular.module("softouch"));;
(function (app) {
    'use strict';
    app.directive('licenseFileModel', ['$parse', '$rootScope', '$window',
        function ($parse, $rootScope, $window) {
            return {
                restrict: 'A', //the directive can be used as an attribute only
                link: function (scope, element, attrs) {
                    var model = $parse(attrs.licenseFileModel),
                        modelSetter = model.assign; //define a setter for licenseFileModel

                    //Bind change event on the element
                    element.bind('change', function () {
                        //Call apply on scope, it checks for value changes and reflect them on UI
                        scope.$apply(function () {
                            //set the model value
                            modelSetter(scope, element[0].files[0]);
                        });
                    });
                }
            };
        }]);
})(angular.module("softouch"));;
(function (app) {
    'use strict';
    app.directive('resizable', ['$parse', '$rootScope', '$window',
        function ($parse, $rootScope, $window) {
        return {
            restrict: 'A', //the directive can be used as an attribute only
            link: function (scope, element, attrs) {
                var w = angular.element($window);
                var logIt = function (elm) {
                }
                w.bind('resize', function () {
                    var tmp = { 'element': element };
                    $rootScope.$broadcast('elementResized', tmp);
                });
            }
        };
    }]);
})(angular.module("softouch"));;
(function (app) {
    'use strict';
    app.directive('ngRightClick', ['$parse', '$rootScope', '$window',
        function ($parse, $rootScope, $window) {
            return function (scope, element, attrs) {
                var fn = $parse(attrs.ngRightClick);
                element.bind('contextmenu', function (event) {
                    scope.$apply(function () {
                        event.preventDefault();
                        fn(scope, { $event: event });
                    });
                });
            };
        }]);
})(angular.module("softouch"));;
(function (app) {
    'use strict';
    app.directive('videoScroll', ['$rootScope', '$window',
        function ($rootScope, $window) {
            return {
                restrict: 'A', //the directive can be used as an attribute only
                link: function (scope, element, attrs) {
                    var w = angular.element($window);
                    var videoScrollListener = $rootScope.$on('elementScroll', function (evt, data) {
                        element[0].pause();
                        var bottomBorder = element[0].getBoundingClientRect().y + element[0].getBoundingClientRect().height; 
                        var topBorder = element[0].getBoundingClientRect().y;
                        if (topBorder > 0 && bottomBorder < w.innerHeight()) {
                            element[0].play();
                        }
                    });
                    scope.$on('$destroy', videoScrollListener);
                }
            };
        }]);
})(angular.module("softouch"));;
(function () {
    "use strict";
    function controller($scope, $rootScope, $location, cartService, userService, popoutService, organizationService) {
        var cmp = this;
        window.peekUserInfo = this;

        cmp.popoutService = popoutService;

        cmp.selectedOrganization = null;
        cmp.loggedIn ? cmp.loggedIntext = '' : cmp.loggedIntext = 'Log In';

        cmp.selectOrg = function (org) {
            organizationService.selectedOrganization = org;
            organizationService.changeOrg();
        };

        cmp.navTo = function (target) {
            hidePopout();
            if (!userService.userData.loggedIn) {
                window.location.href = '/account/login/';
                target.preventDefault();
            }
        };

        cmp.signOut = function () {
            userService.logout();

            if ($location.absUrl().indexOf("account") > 0 || $location.absUrl().indexOf("account") > 0)
                window.location.href = '/';
        };

        $rootScope.$on('loginDataReady', function (evt, data) {
            cmp.salutation = userService.userData.salutation;
            cmp.subscription = userService.userData.subscription;
            cmp.dropList = userService.accountList;
            cmp.cartList = cartService.cartData;
            cmp.orgList = organizationService.orgList;
            cmp.selectedOrganization = organizationService.selectedOrganization;
            cmp.login = userService.activeHref();
            cmp.href = userService.activeHref();
            cmp.loggedIn = userService.userData.loggedIn;
            cmp.loggedIn ? cmp.loggedIntext = '' : cmp.loggedIntext = 'Log In';
        });

        $rootScope.$on('updatedOrg', function (evt, data) {
            cmp.selectedOrganization = organizationService.selectedOrganization;
            cmp.orgList = organizationService.orgList;
            cmp.subscription = organizationService.subscription;
        });

        $rootScope.$on('loggedOut', function (evt, data) {
            cmp.loggedIn = false;
            cmp.selectedOrganization = null;
            cmp.orgList = [];
            cmp.subscription = false;
            cmp.dropList = [];
            cmp.orgList = [];
            cmp.loggedIntext = 'Log In';
            cmp.salutation = "";
            if (cmp.loggedIn) {
                $('.jq-popout').css('display', 'none');
            }
        });
    }

    angular.module('softouch').
        component('account', {
            templateUrl: '/scripts/app/components/account/account.component.html?v=${new Date().getTime()',
            controllerAs: 'cmp',
            bindings: { loggedIn: '=' },
            controller: ['$scope', '$rootScope', '$location', 'cartService', 'userService', 'popoutService', 'organizationService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope, listService) {
        var cmp = this;

        cmp.browserType = 'default';
        cmp.defaultImage = {};
        cmp.background = {};
        cmp.foreground = {};
        cmp.imageIndex = 0;

        // Test what version of browser we are ******************************
        var ff = (/Firefox/.test(navigator.userAgent));
        var edge = (/Edge/.test(navigator.userAgent));
        var chrome = ((/Chrome/.test(navigator.userAgent)));
        var safari = ((/Safari/.test(navigator.userAgent)) && !chrome);
        var ie = (/.NET/.test(navigator.userAgent));

        if (ff) { cmp.browserType = 'ff'; };
        if (chrome) { cmp.browserType = 'chrome'; };
        if (safari) { cmp.browserType = 'safari'; };
        if (ie) { cmp.browserType = 'ie'; };
        if (edge) { cmp.browserType = 'edge'; };
        // ******************************************************************

        $(window).resize(function () {
            cmp.sizeControl();
        });

        cmp.sizeControl = function () {
            //var width = cmp.background.parent().width() + 'px';
            //var height = cmp.background.parent().height() + 'px';
            //cmp.background.css('height', height);
            //cmp.background.css('width', width);
        }

        angular.element(document).ready(function () {
            cmp.background = $('.ew-rotator');
            cmp.foreground = $('.slide');
            //var width = cmp.background.parent().parent().width() + 'px';
            //var height = cmp.background.parent().parent().parent().height() + 'px';
            //cmp.background.css('height', height);
            //cmp.background.css('width', width);
            //cmp.background.image= cmp.imageBaseUrl + cmp.imagesList[cmp.imageIndex].Image;
        });
    }

    module.component('adRotator', {
        templateUrl: '/scripts/app/components/adRotator/adRotator.component.html?v=${new Date().getTime()',
        controllerAs: "cmp",
        bindings: {
            imagesList: '<',
            imageBaseUrl: '@',
            defaultImageUrl: '@'
        },
        controller: ['$scope',
            '$rootScope',
            'listService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope) {
        var cmp = this;

        cmp.browserType = 'default';
        cmp.defaultImage = {};
        cmp.background = {};
        cmp.foreground = {};
        cmp.imageIndex = 0;

        // Test what version of browser we are ******************************
        var ff = (/Firefox/.test(navigator.userAgent));
        var edge = (/Edge/.test(navigator.userAgent));
        var chrome = ((/Chrome/.test(navigator.userAgent)));
        var safari = ((/Safari/.test(navigator.userAgent)) && !chrome);
        var ie = (/.NET/.test(navigator.userAgent));

        if (ff) { cmp.browserType = 'ff'; };
        if (chrome) { cmp.browserType = 'chrome'; };
        if (safari) { cmp.browserType = 'safari'; };
        if (ie) { cmp.browserType = 'ie'; };
        if (edge) { cmp.browserType = 'edge'; };
        // ******************************************************************

        $(window).resize(function () {
            cmp.sizeControl();
        });

        cmp.sizeControl = function () {
        }

        angular.element(document).ready(function () {
        });
    }

    module.component('adRotator', {
        templateUrl: '/scripts/app/components/bannerRotator/bannerRotator.component.html',
        controllerAs: "cmp",
        bindings: {
            bannerList: '<',
            bannerBaseUrl: '@',
            defaultImageUrl: '@'
        },
        controller: ['$scope',
            '$rootScope',
            controller]
    });

}());;
(function () {
    "use strict";
    function controller($scope, $rootScope, constants, cartService) {
        var cmp = this;
        window.peekBibles = this;

        cmp.sortTitle = false;
        cmp.sortLang = false;
        cmp.sortPrice = false;
        cmp.pageData = {};

        cmp.cartUrl = constants[0].Urls.checkoutSummary;
        cmp.pageData.isIntegratedStore = $("body").hasClass("integratedStore");

        cmp.sort = function (val) {
            cmp.ob = [];
            //get the three orgainize icons
            var version_icon = document.getElementById('bible-version');
            var language_icon = document.getElementById('bible-language');
            var cost_icon = document.getElementById('bible-cost');
            switch (val) {
                //Title/Version
                case 't':
                    //sorts the bibles via Title/Version alphabetically
                    cmp.sortTitle = !cmp.sortTitle;
                    (cmp.sortTitle) ? cmp.ob.push('BibleAttributes.Abbreviation') : cmp.ob.push('-BibleAttributes.Abbreviation');
                    //Change the icon to show the correct sort and change it to blue
                    var info = version_icon.getAttribute('class');
                    if (info == "sortOrder icon-im-sort-alpha-desc" || info == "sortOrder icon-im-sort-alpha-desc blue") {
                        version_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-asc blue")
                    }
                    else {
                        version_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-desc blue")
                    }
                    //Change all other sort icons back to grey if they are blue
                    if (language_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-asc blue") {
                        language_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-asc")
                    }
                    else if (language_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-desc blue") {
                        language_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-desc")
                    }
                    else if (cost_icon.getAttribute("class") == "sortOrder icon-im-sort-amount-asc blue") {
                        cost_icon.setAttribute("class", "sortOrder icon-im-sort-amount-asc")
                    }
                    else if (cost_icon.getAttribute("class") == "sortOrder icon-im-sort-amount-desc blue") {
                        cost_icon.setAttribute("class", "sortOrder icon-im-sort-amount-desc")
                    }
                        break;
                //Language Sort
                case 'l':
                    cmp.sortLang = !cmp.sortLang;
                    (cmp.sortLang) ? cmp.ob.push('BibleAttributes.Language') : cmp.ob.push('-BibleAttributes.Language');
                    //Change the icon to show the correct sort and change it to blue
                    var info = language_icon.getAttribute('class');
                    if (info == "sortOrder icon-im-sort-alpha-desc" || info == "sortOrder icon-im-sort-alpha-desc blue") {
                        language_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-asc blue")
                    }
                    else {
                        language_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-desc blue")
                    }
                    //Change all other sort icons back to grey if they are blue
                    if (version_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-asc blue") {
                        version_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-asc")
                    }
                    else if (version_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-desc blue") {
                        version_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-desc")
                    }
                    else if (cost_icon.getAttribute("class") == "sortOrder icon-im-sort-amount-asc blue") {
                        cost_icon.setAttribute("class", "sortOrder icon-im-sort-amount-asc")
                    }
                    else if (cost_icon.getAttribute("class") == "sortOrder icon-im-sort-amount-desc blue") {
                        cost_icon.setAttribute("class", "sortOrder icon-im-sort-amount-desc")
                    }
                    break;
                //Price sort
                case 'p':
                    cmp.sortPrice = !cmp.sortPrice;
                    (cmp.sortPrice) ? cmp.ob.push('MaxPrice') : cmp.ob.push('-MaxPrice');
                    //Change the icon to show the correct sort and change it to blue
                    var info = cost_icon.getAttribute('class');
                    if (info == "sortOrder icon-im-sort-amount-desc" || info == "sortOrder icon-im-sort-amount-desc blue") {
                        cost_icon.setAttribute("class", "sortOrder icon-im-sort-amount-asc blue")
                    }
                    else {
                        cost_icon.setAttribute("class", "sortOrder icon-im-sort-amount-desc blue")
                    }
                    //Change all other sort icons back to grey if they are blue
                    if (version_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-asc blue") {
                        version_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-asc")
                    }
                    else if (version_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-desc blue") {
                        version_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-desc")
                    }
                    else if (language_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-asc blue") {
                        language_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-asc")
                    }
                    else if (language_icon.getAttribute('class') == "sortOrder icon-im-sort-alpha-desc blue") {
                        language_icon.setAttribute("class", "sortOrder icon-im-sort-alpha-desc")
                    }
                    break;
                default:
                    break;
            };
        };

        cmp.cartBible = function (itm) {

            if ($("body").hasClass("integratedStore")) {
                window.location.href = "/gui?action=quickbuy&detailId=" + itm.CartDetailId;
                return;
            }

            if (itm.IsInCart) {
                window.location = "/checkout";
            }
            else {
                var item = {};
                item.CartDetailId = itm.CartDetailId;

                cartService.cartIt(item, true);

                itm.IsInCart = true;

                itm.priceText = "Check Out";
            }
        };

        cmp.downloadUrl = function (item, version) {

            if (version == 'c') {
                return "/component/downloadBible?version=2&detailId=" + item.CartDetailId + "&format=" + item.FileTypes[0];
            }
            else {
                return "/component/downloadBible?version=1&detailId=" + item.CartDetailId + "&format=" + item.FileTypes[0];
            }
        }

        $rootScope.$on('cartRemove', function (evt, data) {
            $.each(cmp.bibles, function (key, bible) {
                if (data.item.CartDetailId === bible.CartDetailId) {
                    bible.IsInCart = false;
                    bible.priceText = "$" + bible.MaxPrice;
                }
            });
        });

        cmp.ob = [];

        window.peek = this;
    }

    angular.module('softouch').component('bible', {
        templateUrl: '/scripts/app/components/bible/bible.component.html',
        controllerAs: "cmp",
        bindings: { 'bibles': '=', 'bibleVersion': '@' },
        controller: ['$scope', '$rootScope', 'constants', 'cartService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope, itemService, dataFilterService) {
        var cmp = this;

        cmp.handleCrumbClick = function (item) {
            switch (item.key) {
                case 's':
                    dataFilterService.removeKey(item);
                    $rootScope.$broadcast('filtersUpdated', {clearSearch: true, resetCurrentPage: true});
                    break;
                case 'g':
                    dataFilterService.removeKey(item);
                    $rootScope.$broadcast('filtersUpdated', { resetCurrentPage: true });
                    break;
                default:
                    $rootScope.$broadcast('filterDeselectMe', { 'item': item });
                    break;
            }
        };

        function initService() {
            
        }

        angular.element(document)
        .ready(function () {
            initService();
        });
    }

    module.component('breadcrumb', {
        templateUrl: '/scripts/app/components/breadcrumb/breadcrumb.component.html',
        controllerAs: "cmp",
        bindings: { crumbStyle: '@', crumbData: '=' },
        controller: ['$scope', '$rootScope', 'itemService', 'dataFilterService', controller]
    });

}());;
(function () {
	"use strict";

	function controller($scope, $rootScope, cartService, popoutService, constants) {
        var cmp = this;
        cmp.baseUrl = constants[0].BaseUrl.previewImage_thumbnails;
		cmp.count = 0;
		cmp.href = "#";
		cmp.total = 0;
		cmp.dropList = [];
		cmp.popoutService = popoutService;

		window.peekCartInfo = this;

		var check1 = (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
		var check2 = (/Mobi/.test(navigator.userAgent));

		if (check1 || check2) {
			cmp.href = "/checkout";
			$('.cart-dropdown-content').css('display', 'none');
		}

        // Watched Events ******************************************
		var cartListener = $rootScope.$on('cartListReady', function (event, data) {
            cmp.dropList = cartService.cartData;
            cmp.total = total();
		});

		$scope.$on('$destroy', cartListener);

        // Object internal functions *******************************************
		function total()
		{
        var tmpVal = 0;
			var countVal = 0;
            $.each(cmp.dropList, function (key, value) {
                value.link = value.DetailUrl;

                $.each(value, function (subKey, subValue) {
            if (subKey == 'CheckoutPrice') { tmpVal += subValue;}
        });
            countVal += 1;
            });
            cmp.count = countVal;
            return tmpVal;
		}

		// Decide how best to include additional options with popoutService
		// or if it needs to stay here
		//cmp.checkPop = function () {
		//	if ($("body").hasClass("checkout"))
		//		return;

		//	if (!(check1 || check2)) {
		//		$('.cart-dropdown-content').finish();
		//		$('.cart-dropdown-content').stop();
		//		$('.cart-dropdown-content').fadeIn('fast');
		//	}

		//	$('.cart-dropdown-content').css('display', 'block');
		//};

		cmp.checkout = function () {
			window.location.href = '/checkout';
		};

		cmp.removeMe = function (itm, evt) {
			window.event.cancelBubble = true;
			cartService.cartIt(itm, false);
			$('.cart-dropdown-content').css('display', 'block');
		};
	}

	angular.module('softouch').component('cart', {
        templateUrl: '/scripts/app/components/cart/cart.component.html?v=${new Date().getTime()',
		controllerAs: "cmp",
		bindings: { c: '@' },
		controller: ['$scope', '$rootScope', 'cartService', 'popoutService', 'constants', controller]
	});

}());;
(function () {
	"use strict";

    function controller($scope, $rootScope, cartService, constants) {
        var cmp = this;
        window.peekcartBody = this;
        cmp.isIntegratedStore = window.integratedStore;
        cmp.baseUrl = constants[0].BaseUrl.previewImage_thumbnails;
        cmp.software = constants[0].ProductType.Software;
        cmp.bible = constants[0].ProductType.Bibles;
        cmp.producerPack = constants[0].ProductType.ProducerPack

        //Functions
        cmp.checkout = function () {
            if (cmp.type == 'checkout') {
                window.location.href = '/checkout/register';
            } else {
                window.location.href = '/checkout';
            }
        };

        cmp.removeMe = function (itm, evt) {
            /*console.log('removeMe');*/
            window.event.cancelBubble = true;
            cartService.cartIt(itm, false);
            $('.cart-dropdown-content').css('display', 'block');
        };

        ////Listener ****************
        //var cartListener = $rootScope.$on('cartListReady', function (event, data) {
        //    console.log("cart recieved", JSON.parse(JSON.stringify(data.cartList)));
        //    cmp.cart = data.cartList;
        //    cmp.total = total();
        //});

        //$scope.$on('$destroy', cartListener);

        //function total() {
        //    var tmpVal = 0;

        //    cmp.cart.forEach(function (item) {
        //        tmpVal += item.CheckoutPrice - item.PromoCode.CalculatedAmount;
        //    });

        //    return tmpVal;
        //}

	}

    angular.module('softouch').component('cartBody', {
        templateUrl: '/scripts/app/components/cartBody/cartBody.component.html?v=' + Date.now,
        controllerAs: "cmp",
        bindings: {
            'type': '@',
            'style': '@',
            'cart': '=',
            'total': '=',
		},
        controller: ['$scope', '$rootScope', 'cartService', 'constants', controller]
	});

}());;
(function () {

    function controller($scope, $rootScope, $timeout) {
        var cmp = this;

        $(window).resize(function () {
            cmp.sizeControl();
        });
        cmp.browser = '';
        // Test what version of browser we are
        var ff = (/Firefox/.test(navigator.userAgent));
        var edge = (/Edge/.test(navigator.userAgent));
        var chrome = ((/Chrome/.test(navigator.userAgent)));
        var safari = ((/Safari/.test(navigator.userAgent)) && !chrome);
        var ie = (/.NET/.test(navigator.userAgent));

        if (ff) { cmp.browser = 'ff'; };
        if (chrome) { cmp.browser = 'chrome'; };
        if (safari) { cmp.browser = 'safari'; };
        if (ie) { cmp.browser = 'ie'; };
        if (edge) { cmp.browser = 'edge'; };
        var windowWidth = $(window).width();
        cmp.setDimensions = function () {
            windowWidth = $(window).width();
                cmp.controlWidth = windowWidth * .6;
                cmp.controlHeight = 9 * cmp.controlWidth / 16;
        };

        cmp.$postLink = function () {
            $timeout(function () {
                cmp.sizeControl();
            });

        }


        cmp.sizeControl = function () {
            cmp.setDimensions();
            $('.ew-slider').each(function () {
                var cur = $(this);

                var width = cmp.controlWidth + 'px';
                var height = cmp.controlHeight + 'px';

                cur.find('.handle').css('left', ((windowWidth * .6 / 2.5) + 'px'))

                cur.css('width', width);
                cur.css('height', height);

                cur.css('background-size', width + ' ' + height);

                cur.find('.resize').css('width', ((windowWidth * .6 / 2.5) + 'px'));
                cur.find('.resize').css('height', height);
                cur.find('.resize').css('background-size', width + ' ' + height);
                drags(cur.find('.handle'), cur.find('.resize'), cur);
            });
        }

        function initService() {
            //cmp.sizeControl();
        }

        function drags(dragElement, resizeElement, container) {

            // Initialize the dragging event on mousedown.
            dragElement.on('mousedown touchstart', function (e) {

                dragElement.addClass('draggable');
                resizeElement.addClass('resizable');

                // Check if it's a mouse or touch event and pass along the correct value
                var startX = (e.pageX) ? e.pageX : e.originalEvent.touches[0].pageX;

                // Get the initial position
                //var marginAdj = parseInt(dragElement.css('margin-left'));
                var marginAdj = 0;
                var dragWidth = dragElement.outerWidth(),
                    posX = dragElement.offset().left + dragWidth - startX - marginAdj,
                    containerOffset = container.offset().left,
                    containerWidth = container.outerWidth();

                // Set limits
                minLeft = containerOffset -25;
                maxLeft = containerOffset + containerWidth - dragWidth + 25;

                // Calculate the dragging distance on mousemove.
                dragElement.parents().on("mousemove touchmove", function (e) {

                    // Check if it's a mouse or touch event and pass along the correct value
                    var moveX = (e.pageX) ? e.pageX : (e.originalEvent.touches) ? e.originalEvent.touches[0].pageX : 0;


                    leftValue = moveX + posX - dragWidth;

                    // Prevent going off limits
                    if (leftValue < minLeft) {
                        leftValue = minLeft;
                    } else if (leftValue > maxLeft) {
                        leftValue = maxLeft;
                    }

                    // Translate the handle's left value to masked divs width.
                    widthValue = (leftValue + dragWidth / 2 - (containerOffset - 4 )) * 100 / containerWidth + '%';

                    // Set the new values for the slider and the handle. 
                    // Bind mouseup events to stop dragging.
                    $('.draggable').css('left', widthValue).on('mouseup touchend touchcancel', function () {
                        $(this).removeClass('draggable');
                        resizeElement.removeClass('resizable');
                    });
                    $('.resizable').css('width', widthValue);
                }).on('mouseup touchend touchcancel', function () {
                    dragElement.removeClass('draggable');
                    resizeElement.removeClass('resizable');
                });
                e.preventDefault();
            }).on('mouseup touchend touchcancel', function (e) {
                dragElement.removeClass('draggable');
                resizeElement.removeClass('resizable');
            });
        }
            angular.element(document)
                .ready(function () {
                    initService();
                });
        

    }

    angular.module('softouch').component('compare', {
        templateUrl: ('/scripts/app/components/compare/compare.component.html?v=' + Date.now() ),
        controllerAs: "cmp",
        bindings: {
            imgOne: '@',
            imgTwo: '@',
            controlHeight: '=',
            controlWidth: '=',
        },
        controller: ['$scope', '$rootScope', '$timeout', controller]
    });

}());;
(function () {
    "use strict";
    function controller($rootScope, $scope, dataService, constants) {
        window.peekDemoView = $scope;

        $scope.tabPrefix = "figure";
        $scope.activeTab = 1;
        $scope.maxTabs = $("figure").length;
        $scope.download = {};
        $scope.download.signup = true;
        $scope.download.email = '';
        $scope.download.email_mobile = '';
        $scope.error = {};
        $scope.gettingStartedUrl = constants[0].Urls.supportVideos;
        $scope.pricingUrl = constants[0].Urls.pricing;
        $scope.demoUrl = '';
        $scope.browserWidth = window.innerWidth;

        $scope.select_group = function (tabNumber) {
            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + tabNumber + "']").addClass('sel');
            $scope.activeTab = parseFloat(tabNumber);
        };

        $scope.select_next = function () {
            if ($scope.activeTab + 1 > $scope.maxTabs) {
                $scope.activeTab = 1;
            } else {
                $scope.activeTab += 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.select_previous = function () {
            if ($scope.activeTab - 1 < 1) {
                $scope.activeTab = $scope.maxTabs;
            } else {
                $scope.activeTab -= 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.submit = function () {
            //hideMessage();

            if ($scope.download.signup && $scope.download.email == '') {
                /*alert("Please fill in all fields.")*/
                $scope.error.messages = ["Please fill in all fields."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    /*alert(response.ErrorMessages)*/
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                   hideMessage();

                    $('.demo-form').addClass('d-none');
                    $('.demo-success').removeClass('d-none');
                /*$('#mobile').addClass('d-none')*/
                    $scope.demoUrl = response.DemoUrl;
                    window.location.href = response.DemoUrl;
                }
            };

            var onError = function (response) {
                /*alert(response.responseText)*/
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            if ($scope.download.signup) {
                var postUrl = "/component/testdrive/";
                var postData = { email: $scope.download.email };

                dataService
                    .getSetData(postUrl, postData)
                    .then(onSuccess, onError);
            } else {
                dataService
                    .getSetData("/component/GetCurrentBuildUrl")
                    .then(onSuccess, onError);
            }
        };

        $scope.submit_mobile = function () {
            hideMessage();

            console.log("test")
            // if email is blank.
            if ($scope.download.email_mobile === undefined) {
                $scope.error.messages = ["Please fill in all fields."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response) {
                hideMessage();

                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    hideMessage();

                    $('#mobile').addClass('d-none');
                    $('#success').removeClass('d-none');
                    $('#fields').addClass('d-none');
                }
            };

            var onError = function (response) {
                console.log("boo :(")
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            var onGetBuildNumberSuccess = function (response) {
                if (response.Error === true) {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else {
                    var postUrl = "/component/DemoLinkEmail/";
                    var postData = { email: $scope.download.email2, demoLink: response.DemoUrl };

                    dataService
                        .getSetData(postUrl, postData)
                        .then(onSuccess, onError);
                }
            };

            // if box is checked
            if ($scope.download.signup2) {
                var postUrl = "/component/GettingStartedTutorialEmails/";
                var postData = { email: $scope.download.email2 };

                dataService
                    .getSetData(postUrl, postData)
                    .then(onSuccess, onError);
            }
            // send the email
            dataService
                .getSetData("/component/GetCurrentBuildUrl")
                .then(onGetBuildNumberSuccess, onError);
        };

        /*window.onresize = function () {
            $scope.browserWidth = window.innerWidth;
            if ($scope.browserWidth <= 767) {
                $scope.isEmailed = true;
                console.log('yay!', $scope.isEmailed);
            }
            else {
                $scope.isEmailed = false;
            }
        }*/

        angular.element(document).ready(function () {
        });
    }

    angular.module('softouch').component('demo', {
        templateUrl: '/scripts/app/components/demoView/demoView.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
        },
        controller: ['$rootScope', '$scope', 'dataService', 'constants', controller]
    });

}());;
(function () {
    "use strict";
    function controller($scope, $rootScope, constants, $element, dataService, userService, cartService, favoritesService, downloadItemService, $location, organizationService) {
        var cmp = this;
        if (window.peekDetailsView === undefined) {
            window.peekDetailsView = this;
            cmp.detailsVersion = '1'
            window.onresize = function () {
                if ($('#photoEditorModal').hasClass('show'))
                    setTimeout(cmp.updateVideoSize, 500)
            }
        }
        else {
            window.peekDetailsView2 = this;
            cmp.detailsVersion = '2'
        }

        cmp.productTypesNotAllowedInEditor = [constants[0].ProductType.LyricMedia, constants[0].ProductType.Minimovie, constants[0].ProductType.Countdown];

        cmp.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        if (!cmp.ieCheck) {

            var script1 = document.createElement('script');
            script1.src = "/Scripts/vendor/photoeditorsdk/umd/no-polyfills.js";
            document.head.appendChild(script1); //or something of the likes

            var script2 = document.createElement('script');
            script2.src = "/Scripts/vendor/photoeditorsdk/initialize.js";
            document.head.appendChild(script2); //or something of the likes

        }

        if (cmp.ieCheck) {
            $('body').addClass('ie');
        }

        cmp.videoPlayer = $element[0].querySelector("video");
        cmp.img = $element[0].querySelector(".previewDetailImg");
        cmp.img.className = "d-none";
        cmp.videoPlayed = false;
        cmp.isIntegratedStore = $("body").hasClass("integratedStore");

        cmp.collection = constants[0].ProductType.Collection;
        cmp.posterBase = constants[0].BaseUrl.previewImage_large;
        cmp.loginUrl = constants[0].ActInfo.LoginAJSurl;
        cmp.imgBase = constants[0].BaseUrl.previewImage_thumbnails;
        cmp.poster = constants[0].BaseUrl.thumbnailPlaceholder;
        cmp.premiumUrl = constants[0].Urls.premiumMedia;

        cmp.collectionItemId = "";
        cmp.openEditor = false;
        cmp.newPngSize = {};

        var originalHeight = 50;
        var originalHeightTags = 75;
        var scrollHeightDescription = 0;
        var clientHeightDescription = 0;
        var scrollHeightTags = 0;
        var clientHeightTags = 0;

        var check1 = (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
        var check2 = (/Mobi/.test(navigator.userAgent));

        //popover code for share popover here....
        $(document).tooltip({
            selector: ".tt",
        });

        $('.jq-share-popover').popover({
            html: true,
            content: function () {
                return cmp.sharePopoverContent;
            },
            delay: 100,
            placement: 'bottom',
            trigger: 'focus',
        })

        $('.jq-share-popover').on('shown.bs.popover', function () {
            $('.text' + cmp.itm.ProductId).attr("href", cmp.textMessage);
        })

        $('.jq-share-popover').on('hide.bs.popover', function () {
            $('.jq-popover-hide').tooltip('hide');
        });

        cmp.GetOverlayDimensions = function (CanvasSize) {
            const VertPad = 0.05
            const HorzPad = 0.05
            const ToolbarSize = 50
            const ToolbarVertPad = 18
            var OverlaySize = {};

            // Max size based on calc'd paddings
            OverlaySize.width = Math.round(CanvasSize.width * (1 - HorzPad));
            //OverlaySize.height = Math.round((CanvasSize.height - (2 * (ToolbarSize + ToolbarVertPad))) * (1 - VertPad));
            OverlaySize.height = Math.round((CanvasSize.height - (2 * (ToolbarSize))));


            // Content aspect ratio based on hight or width
            var ContentWidthAspect = cmp.newPngSize.width / cmp.newPngSize.height
            var ContentHeightAspect = cmp.newPngSize.height / cmp.newPngSize.width

            if (ContentWidthAspect > (OverlaySize.width / OverlaySize.height))
                OverlaySize.height = Math.round(OverlaySize.width * ContentHeightAspect)
            else
                OverlaySize.width = Math.round(OverlaySize.height * ContentWidthAspect)

            return OverlaySize;
        }

        cmp.updateVideoSize = function () {
            cmp.theCanvas = document.getElementsByTagName("canvas")[0];
            cmp.theVideo = document.getElementById("editorVideo");

            var canvasSize = {};
            canvasSize.width = cmp.theCanvas.clientWidth;
            canvasSize.height = cmp.theCanvas.clientHeight;

            var overlaySize = cmp.GetOverlayDimensions(canvasSize);

            cmp.theVideo.width = overlaySize.width;
            cmp.theVideo.height = overlaySize.height;
        }

        //load img in editor
        cmp.prepPhoto = function () {
            /*console.log('prepPhoto', cmp.inModal)*/
            if (cmp.itm.IsImage || (cmp.standaloneItem && cmp.standaloneItem.IsImage)) {
                var tkn = '';

                if ($rootScope.guestToken !== undefined && $rootScope.guestToken !== '') {
                    tkn = $rootScope.guestToken;
                }

                if (cmp.standaloneItem)
                    var url = '/component/GetImgForEdit?detailId=' + cmp.standaloneItem.CartDetailId + '&format=' + cmp.standaloneItem.FileTypes[0] + '&token=' + tkn;
                else
                    var url = '/component/GetImgForEdit?detailId=' + cmp.itm.CartDetailId + '&format=' + cmp.itm.FileTypes[0] + '&token=' + tkn;

                dataService.getSetData(url).then(function (data) {
                    cmp.editorImgSrc = data;
                    if ($(window).width() > 768)
                        initPhotoEditor(cmp.editorImgSrc, cmp.itm.Title, true);
                    else
                        initEditorBasic(cmp.editorImgSrc, cmp.itm.Title, true);
                    cmp.standaloneItem = null;
                });
            }
            else {
                /*create a png the correct size*/
                var newPng = document.createElement("canvas");
                var tkn = '';

                if ($rootScope.guestToken !== undefined && $rootScope.guestToken !== '') {
                    tkn = $rootScope.guestToken;
                }

                if (cmp.standaloneItem == null) {
                    var maxQualityDetail = cmp.itm.DetailItems.find(function (item) { return item.Quality === cmp.itm.MaxQuality; });
                    var videoUrl = '/component/download?detailId=' + cmp.itm.DetailIds[cmp.itm.DetailIds.length-1] + '&format=' + cmp.itm.FileTypes[0] + '&token=' + tkn;
                }
                else if (cmp.standaloneItem) {
                    var maxQualityDetail = cmp.standaloneItem.DetailItems.find(function (item) { return item.Quality === cmp.standaloneItem.MaxQuality; });
                    var videoUrl = '/component/download?detailId=' + cmp.standaloneItem.DetailIds[cmp.itm.DetailIds.length - 1] + '&format=' + cmp.standaloneItem.FileTypes[0] + '&token=' + tkn;
                }
                // set desired size of transparent image

                newPng.width = maxQualityDetail.Width;
                newPng.height = maxQualityDetail.Height;
                cmp.newPngSize.width = newPng.width;
                cmp.newPngSize.height = newPng.height;

                // extract as new image (data-uri)
                cmp.editorImgSrc = newPng.toDataURL();

                var productToPassToEditor = cmp.itm;

                if (cmp.standaloneItem)
                    productToPassToEditor = cmp.standaloneItem;

                if ($(window).width() > 768)
                    initPhotoEditor(cmp.editorImgSrc, productToPassToEditor.Title, false, productToPassToEditor, newPng.width, newPng.height, videoUrl);
                else
                    initEditorBasic(cmp.editorImgSrc, productToPassToEditor.Title, false, productToPassToEditor);

                /*cmp.theCanvas = document.getElementsByTagName("canvas")[0];
                
                var canvasSize = {};
                canvasSize.width = cmp.theCanvas.width;
                canvasSize.height = cmp.theCanvas.height;
                cmp.newPngSize.width = newPng.width;
                cmp.newPngSize.height = newPng.height;

                var overlaySize = cmp.GetOverlayDimensions(canvasSize);

                cmp.source = document.createElement('source');
                $(cmp.source).attr('type', 'video/mp4');
                $(cmp.source).attr('src', videoUrl);

                cmp.theVideo = document.createElement('video');
                $(cmp.theVideo).attr('loop', '');
                $(cmp.theVideo).attr('muted');
                $(cmp.theVideo).attr('preload', 'auto');
                $(cmp.theVideo).attr('width', overlaySize.width);
                $(cmp.theVideo).attr('height', overlaySize.height);
                $(cmp.theVideo).attr('id', 'editorVideo')
                $(cmp.theVideo).append(cmp.source);

                *//*cmp.videoWrapper = document.createElement('div');
                cmp.videoWrapper2 = document.createElement('div');
                $(cmp.videoWrapper).attr('id', 'editorVideo');
                $(cmp.videoWrapper).append(cmp.theVideo);
                $(cmp.videoWrapper2).append(cmp.videoWrapper);*//*

                cmp.theCanvas.insertAdjacentElement("beforebegin", cmp.theVideo);
                cmp.theVideo.play();*/
            }
        }


        //show photo editor function
        cmp.openPhotoEditor = function () {
            cmp.openThisEditor = true;
            /*console.log("openEditor", cmp.inModal)*/
            /*if in a modal set open editor to true and close the current modal*/
            if (cmp.inModal == true) {
                cmp.openEditor = true;
                $('#detailsModal').modal('hide')
            }
            else {
                $('#photoEditorModal').modal({
                    backdrop: 'static',
                    keyboard: false
                });
            }
        }
        /*When details modal is closed open edior if variable is set to true, if not set standaloneItem to null*/
        $('#detailsModal').on('hidden.bs.modal', function (e) {
            if (cmp.openEditor) {
                $('#photoEditorModal').modal({
                    backdrop: 'static',
                    keyboard: false
                })
            }
            else {
                cmp.standaloneItem = null;
            }
        })
        /*resets openEditor variable to false*/
        $('#photoEditorModal').on('hidden.bs.modal', function (e) {
            cmp.openEditor = false;
            cmp.openThisEditor = false;
        })

        $('#photoEditorModal').on('shown.bs.modal', function (e) {
            /*console.log('onEditorModalShown', cmp.inModal)*/
            if (cmp.openThisEditor == true) {
                cmp.prepPhoto();
            }
        })

        //Add Product To Cart
        cmp.addToCart = function (item, secondaryButton) {
            if ($("#mediaBuyNowBtn").hasClass("stopNgClick"))
                return;

            if ($("body").hasClass("integratedStore")) {
                cmp.itm.purchasing = true;
                window.location.href = "/gui?action=quickbuy&detailId=" + item.CartDetailId;
                return;
            }
            if (item.IsInCart) {
                window.location.href = "/checkout";
            } else {
                cartService.cartIt(item, true).then(function (data) {
                    if (secondaryButton == "standalone") {
                        item.IsInCart = true;
                        cmp.addToCartTextStandalone = setCheckoutText(item);
                        cmp.addToCartPriceStandalone = setCheckoutPrice(item);

                        var i;
                        for (i = 0; i < cmp.itm.CollectionItemFullDetails.length; i++) {
                            if (item.ProductId == cmp.itm.CollectionItemFullDetails[i].ProductId) {
                                cmp.itm.CollectionItemFullDetails[i].IsInCart = true;
                                break;
                            };
                        };
                    } else if (secondaryButton == "alsoAvailable") {
                        item.IsInCart = true;
                        cmp.addToCartTextAlsoAvailable = setCheckoutText(item);
                        cmp.addToCartPriceAlsoAvailable = setCheckoutPrice(item);

                    } else {
                        cmp.itm.IsInCart = true;
                        cmp.addToCartText = setCheckoutText(cmp.itm);
                        cmp.addToCartPrice = setCheckoutPrice(cmp.itm);
                    }
                });
            }
        };

        //Favorite the Product
        cmp.favoriteMe = function (productId, isFavorite) {
            var item = {};
            item.ProductId = productId;

            if (cmp.isIntegratedStore || userService.userData.loggedIn) {
                // visually make the change
            cmp.itm.IsFavorite = !isFavorite;
                // save the change in the db
                favoritesService.setFavorites(item, !isFavorite);
            } else {
                var url = constants[0].ActInfo.LoginAJSurl;;
                window.location.href = url;
            }
        };

        //Download the Product
        cmp.getDownloadItem = function (productId) {
            if ($('#detailsModal').hasClass('show')) {
                $('#detailsModal').modal('hide');
            }
            downloadItemService.requestDownloadItem(productId);
        };

        // Get also available list for details
        cmp.getAlsoAvailable = function () {
            cmp.alsoAvailableList = {};

            var pid = 'aic/' + cmp.itm.ProductId;
            var dat = { 'filter': pid };

            dataService.getSetData("/component/refreshview", dat).then(function (data) {
                if (data.Error) {
                    console.log(data.Error);
                }
                else {
                    cmp.alsoAvailableList = data.Products;

                    if (data.Products.length > 0) {
                        cmp.isInCollection = true;
                        cmp.itm.CollectionItemInfo = data.Products[0].CollectionItemInfo;
                        cmp.addToCartTextAlsoAvailable = setCheckoutText(cmp.alsoAvailableList[0]);
                        cmp.addToCartPriceAlsoAvailable = setCheckoutPrice(cmp.alsoAvailableList[0]);


                        cmp.getCollectionDetails();
                    }

                    if (cmp.inModal == true) {
                        cmp.getYouMightLike();
                    }
                }
            }, function (response) {
            });
        };

        // show thumb if in a collection
        cmp.showThumb = function (item) {

            cmp.videoPlayer.pause()

            var i;
            for (i = 0; i < cmp.itm.CollectionItemFullDetails.length; i++) {
                if (item.ProductId == cmp.itm.CollectionItemFullDetails[i].ProductId) {
                    cmp.standaloneItem = cmp.itm.CollectionItemFullDetails[i];
                    break;
                };
            };

            cmp.addToCartTextStandalone = setCheckoutText(cmp.standaloneItem);
            cmp.addToCartPriceStandalone = setCheckoutPrice(cmp.standaloneItem);

            if (cmp.isInCollection) {
                cmp.showDetailsModal(cmp.standaloneItem);
                return;
            }

            //sets type text and quality
            cmp.standaloneItem.TypeText = cmp.setType(cmp.standaloneItem)

            cmp.setQuality(cmp.standaloneItem);

            //gets the colors for palette
            var dat = { 'productId': item.ProductId };
            getColors(dat);

            if (item.AvailableStandalone) {
                setTimeout(function () {
                    $("#standalone-item" + cmp.standaloneItem.ProductId).removeClass('d-none');
                }, 1);
                
                cmp.collectionItemId = item.ProductId;
            }
            if (!item.AvailableStandalone) {
                $(".standalone-add").addClass('d-none');
            }
            if (item.IsImage) {
                cmp.videoPlayer.className = "d-none";
                cmp.imgSrc = cmp.posterBase + item.ProductId + ".jpg";
                cmp.img.className = "previewDetailImg ";
            }
            if (!item.IsImage) {
                cmp.img.className = "d-none";
                cmp.videoPlayer.src = constants[0].BaseUrl.videoLargeBase + item.ProductId + '.mp4';
                cmp.videoPlayer.autoplay = true;
                cmp.videoPlayer.controls = true;
                cmp.poster = cmp.posterBase + item.ProductId + ".jpg";
                cmp.videoPlayer.className = "";
            }
        };

        // COLOR PALLET
        cmp.rgbToHex = function (r, g, b) {
            r = r.toString(16);
            g = g.toString(16);
            b = b.toString(16);

            if (r.length == 1)
                r = "0" + r;
            if (g.length == 1)
                g = "0" + g;
            if (b.length == 1)
                b = "0" + b;

            return r + g + b;
        };

        cmp.invertColorValue = function (value) {
            var invertedValue = 255 - value;

            return invertedValue;
        };

        // Reset color tools to default
        cmp.resetPalette = function (parent) {
            cmp.deactivatePalette(parent);

            $(parent).children('.colors-tab:first-of-type').addClass('active');
            $(parent).children('.color-palette:first-of-type').addClass('active');
        };

        // Remove active classes from color tools
        cmp.deactivatePalette = function (parent) {
            if (!parent) {
                parent = '';
            }

            $(parent).children('.jq-toggle-color-tab').removeClass('active');
            $(parent).children('.jq-toggle-palette').removeClass('active');
        };

        cmp.updatePalette = function (type, event) {
            var wrapper = $(event.target).parent();
            cmp.deactivatePalette(wrapper);

            $(event.target).addClass('active');

            switch (type) {
                case 'primary':
                    $('#colorPalette' + cmp.itm.ProductId).addClass('active');

                    break;
                case 'comp':
                    $('#compPalette' + cmp.itm.ProductId).addClass('active');

                    break;
            }
        };

        //sets all data
        cmp.setData = function () {
            cmp.descriptionOverflow = false;
            cmp.tagsOverflow = false;

            var host;
            if ($location.host() == "localhost") {
                host = $location.host() + ":" + $location.port();
            } else {
                host = $location.host();
            }

            cmp.copyUrl = host + cmp.itm.DetailUrl;
            cmp.textMessage = "sms:?&body=" + cmp.itm.Title + " by " + cmp.itm.ProducerName + " " + cmp.copyUrl

            cmp.poster = cmp.posterBase + cmp.itm.ProductId + ".jpg";

            cmp.setQuality(cmp.itm);

            cmp.itm.TypeText = cmp.setType(cmp.itm);
            cmp.addToCartText = setCheckoutText(cmp.itm);
            cmp.addToCartPrice = setCheckoutPrice(cmp.itm);

            cmp.videoPlayed = false;

            if (!cmp.itm.IsImage && cmp.itm.Type != constants[0].ProductType.Collection) {
                cmp.img.className = "d-none";
                cmp.videoPlayer.controls = true;
                cmp.videoPlayer.src = constants[0].BaseUrl.videoLargeBase + cmp.itm.ProductId + '.mp4';
                cmp.videoPlayer.className = "";
            }
            else {
                cmp.videoPlayer.className = "d-none";
                cmp.imgSrc = cmp.posterBase + cmp.itm.ProductId + ".jpg";
                cmp.img.className = "previewDetailImg ";
            }

            //get Tags
            //var postData = { productId: cmp.itm.ProductId };
            //dataService.getSetData('/component/GetTagsForProduct', postData)
            //    .then(function (data) {
            //        if (data.Error) {
            //            console.log(data.Error);
            //        } else {
            //            cmp.itm.Tags = data;
            //            setTimeout(function () {
            //                checkTags("getTags")
            //            }, 200);
            //        }
            //    })
            //    .catch(function (data) {
            //        console.log(data);
            //    });

            var hrefLoc = 'http://www.easyworship.com/' + cmp.itm.DetailUrl;
            cmp.mtHref = "subject=Worship Media Content&body=";
            cmp.mtHref += "Amazing content from EasyWorship Media : " + hrefLoc;

            cmp.fbHref = "https://www.facebook.com/sharer.php?u=";
            cmp.fbHref += hrefLoc;

            cmp.twHref = "http://twitter.com/intent/tweet?text=";
            cmp.twHref += encodeURIComponent(cmp.itm.TypeText + ": " + cmp.itm.Title);
            cmp.twHref += "&via=EasyWorship";
            cmp.twHref += "&url=" + hrefLoc;

            cmp.sharePopoverContent = '<div class="social-icon-group">';
            cmp.sharePopoverContent += '<a href="' + cmp.fbHref + '" class="icon-im-facebook socialRound tt jq-popover-hide" target="_blank" title="Share on Facebook..." rel="noopener"></a>';
            cmp.sharePopoverContent += '<a href="mailto:?' + cmp.mtHref + '" class="icon-im-mail socialRound tt jq-popover-hide" title="Email this..."></a>';
            cmp.sharePopoverContent += '<a id="url' + cmp.itm.ProductId + '" class="icon-im-link socialRound tt jq-popover-hide" title="Copy link..."></a>';
            cmp.sharePopoverContent += '<a href="" class="icon-im-sms socialRound tt jq-popover-hide text' + cmp.itm.ProductId + ' d-sm-none" title="Text this..."></a>';
            cmp.sharePopoverContent += '</div>';

            $(document.body).off('click', '#url' + cmp.itm.ProductId);
            $(document.body).on('click', '#url' + cmp.itm.ProductId, function () {
                copyToClipboard(cmp.copyUrl, 'url');
            })

            //change url history
            if (window.location.pathname != cmp.itm.DetailUrl) {
                history.pushState(null, cmp.itm.DetailUrl, cmp.itm.DetailUrl);
                sessionStorage.setItem(cmp.itm.DetailUrl, JSON.stringify(cmp.itm));
                }
            
        };

        var copyToClipboard = function (contentToCopy, contentType) {
            var alertText;
            /*console.log('itemClicked: ' + contentType);*/

            if (cmp.ieCheck) {
                window.clipboardData.setData("Text", contentToCopy);
            } else {
                    var textField = document.createElement('textarea');
                textField.innerText = contentToCopy
                document.body.appendChild(textField);
                    textField.select();
                    textField.focus(); //SET FOCUS on the TEXTFIELD
                    document.execCommand('copy');
                    textField.remove();
                }

            switch (contentType) {
                case 'url':
                    alertText = 'Copied the link: ';

                    break;
                case 'hex':
                    alertText = 'Color copied: ';

                    break;
                default:
                    alertText = 'Text copied: ';
            }
            //console.log(cmp);

            alert(alertText + contentToCopy);
        };

        var setCheckoutText = function (item) {
            var type = cmp.setType(item);
            var addToCartText;

            if (item.IsInCart)
                addToCartText = "Check Out";
            else if (cmp.isIntegratedStore & item.Type == cmp.collection)
                addToCartText = 'Buy Collection Now ';
            else if (cmp.isIntegratedStore & item.Type != cmp.collection)
                addToCartText = 'Buy ' + type + ' Now ';
            else if (item.Type == cmp.collection)
                addToCartText = 'Add Collection To Cart ';
            else
                addToCartText = 'Add ' + type + ' To Cart ';

            return addToCartText;
        };

        cmp.setType = function (item) {
            var type = "";

            if (item.TypeText == "Backgrounds") {
                type = "Background"
            } else if (item.TypeText == "Countdowns") {
                type = "Countdown"
            } else if (item.TypeText == "Lower Thirds") {
                type = "Lower Third"
            } else if (item.TypeText == "Mini Movies") {
                type = "Mini Movie"
            } else if (item.TypeText == "Overlays") {
                type = "Overlay"
            } else if (item.TypeText == "Collections") {
                    type = "Collection"
            } else {
                type = item.TypeText
            }
            /*console.log('Here is the type! ' + type);*/
            return type;
        };

        var setCheckoutPrice = function (item) {
            var addToCartPrice = item.IsInCart ? '' : '$' + parseFloat(item.CheckoutPrice).toFixed(2);

            return addToCartPrice;
        };

        var getColors = function (dat) {
            dataService.getSetData("/component/GetColorsForProduct", dat).then(function (data) {
                if (data.Error) {
                    console.log(data)
                }
                else {
                    cmp.itm.ColorPalette = [];
                    cmp.itm.CompPalette = [];

                    data.forEach(function (color) {
                        var hex = cmp.rgbToHex(color.R, color.G, color.B),
                            searchPath = constants[0].Urls.mediaSearch + '/co/' + color.R + '-' + color.G + '-' + color.B;

                        cmp.itm.ColorPalette.push({
                            R: color.R,
                            G: color.G,
                            B: color.B,
                            Hex: hex,
                            SearchPath: searchPath,
                            PopoverContent: '<span id="hexValue' + hex + '" class="palette-swatch-hex btn btn-link">#' + hex + '</span> | <a href="' + searchPath + '" target="_blank">Search color</a>'
                        });

                        var compR = cmp.invertColorValue(color.R),
                            compG = cmp.invertColorValue(color.G),
                            compB = cmp.invertColorValue(color.B),
                            compHex = cmp.rgbToHex(compR, compG, compB),
                            compSearchPath = constants[0].Urls.mediaSearch + '/co/' + compR + '-' + compG + '-' + compB;

                        cmp.itm.CompPalette.push({
                            R: compR,
                            G: compG,
                            B: compB,
                            Hex: compHex,
                            SearchPath: compSearchPath,
                            PopoverContent: '<span id="hexValue' + compHex + '" class="palette-swatch-hex btn btn-link">#' + compHex + '</span> | <a href="' + compSearchPath + '" target="_blank">Search color</a>'
                        });
                    });


                    if (cmp.itm.ColorPalette.length > 0) {
                        setColorPalette();
                        setComplementaryPalette();

                        initializeColorPopover();
                    }
                }
            });
        };

        var setColorPalette = function () {
            var html = '';

            cmp.itm.ColorPalette.forEach(function (color) {
                html += '<a id="' + color.Hex + 'Swatch" class="color-palette-swatch btn btn-link jq-color-popover" style="background-color: #' + color.Hex + '" data-toggle="popover" role="button" tabindex="0"></a>';
            });

            $('#colorPalette' + cmp.itm.ProductId).html(html);
            $('#colorPalette' + cmp.itm.ProductId).parent().show();
        };

        var setComplementaryPalette = function () {
            var html = '';

            cmp.itm.CompPalette.forEach(function (color) {
                html += '<a id="' + color.Hex + 'Swatch" class="color-palette-swatch btn btn-link jq-color-popover" style="background-color: #' + color.Hex + '" data-toggle="popover" role="button" tabindex="0"></a>';
            });

            $('#compPalette' + cmp.itm.ProductId).html(html);
            $('#compPalette' + cmp.itm.ProductId).parent().show();
        };

        var initializeColorPopover = function () {
            cmp.itm.ColorPalette.forEach(function (color) {
                $('#' + color.Hex + 'Swatch').popover({
                    html: true,
                    content: function () {
                        return color.PopoverContent;
                    },
                    delay: 100,
                    placement: 'top',
                    trigger: 'focus',
                })
            });
            cmp.itm.CompPalette.forEach(function (color) {
                $('#' + color.Hex + 'Swatch').popover({
                    html: true,
                    content: function () {
                        return color.PopoverContent;
                    },
                    delay: 100,
                    placement: 'top',
                    trigger: 'focus',
                })
            });

            $(document.body).off('click', '.palette-swatch-hex');
            $(document.body).on('click', '.palette-swatch-hex', function () {
                var bgColor = $(this).text();
                copyToClipboard(bgColor, 'hex');
            })
        };

        var checkDescription = function (fromWhere) {
            //console.log("checkDescription", fromWhere);
            scrollHeightDescription = $('#descriptionWrapper' + cmp.itm.ProductId)[0].scrollHeight;
            clientHeightDescription = $('#descriptionWrapper' + cmp.itm.ProductId)[0].clientHeight;

            cmp.descriptionOverflow = originalHeight < scrollHeightDescription;

            if (clientHeightDescription < scrollHeightDescription) {
                $('#moreDescription' + cmp.itm.ProductId).html('See More');
            }
            if (clientHeightDescription == scrollHeightDescription) {
                $('#moreDescription' + cmp.itm.ProductId).html('See Less');
            }
            //console.log("data.overFlow=", cmp.data.overFlow);
        };

        var checkTags = function (event) {
            scrollHeightTags = $('#tagsWrapper' + cmp.itm.ProductId)[0].scrollHeight;
            clientHeightTags = $('#tagsWrapper' + cmp.itm.ProductId)[0].clientHeight;
           
            cmp.tagsOverflow = originalHeightTags +1  < scrollHeightTags;
            //console.log(cmp.tagsOverflow, originalHeightTags, scrollHeightTags,event)

            if (clientHeightTags < scrollHeightTags) {
                $('#moreTags' + cmp.itm.ProductId).html('See More');
            }
            if (clientHeightTags == scrollHeightTags) {
                $('#moreTags' + cmp.itm.ProductId).html('See Less');
            }
        };

        cmp.setQuality = function (product) {
            cmp.sd480 = undefined;
            cmp.dw480 = undefined;
            cmp.tw480 = undefined;

            if (product.MaxQuality <= 8) {
                cmp.sd480 = product.MaxQuality < 2 ? "disable" : "";
                cmp.sd720 = product.MaxQuality < 4 ? "disable" : "";
                cmp.hd1080 = product.MaxQuality < 8 ? "disable" : "";
            }
            else if (product.MaxQuality <= 10) {
                cmp.dw480 = product.MaxQuality < 9 ? "disable" : "";
                cmp.dw720 = product.MaxQuality < 10 ? "disable" : "";
            }
            else {
                cmp.tw480 = product.MaxQuality < 11 ? "disable" : "";
                cmp.tw720 = product.MaxQuality < 12 ? "disable" : "";
            }
        }

        cmp.showMoreDescription = function () {
            if ($('#descriptionWrapper' + cmp.itm.ProductId).hasClass('more')) {
                $('#descriptionWrapper' + cmp.itm.ProductId).removeClass('more');
                $('#moreDescription' + cmp.itm.ProductId).html('See More');
            }
            else {
                $('#descriptionWrapper' + cmp.itm.ProductId).addClass('more');
                $('#moreDescription' + cmp.itm.ProductId).html('See Less');
            }
        };

        //took out tags
        cmp.showMoreTags = function () {
            if ($('#tagsWrapper' + cmp.itm.ProductId).hasClass('more')) {
                $('#tagsWrapper' + cmp.itm.ProductId).removeClass('more');
                $('#moreTags' + cmp.itm.ProductId).html('See More');
            }
            else {
                $('#tagsWrapper' + cmp.itm.ProductId).addClass('more');
                $('#moreTags' + cmp.itm.ProductId).html('See Less');
            }
        }

        cmp.getYouMightLike = function () {
            //console.log("getYouMightLike", cmp.itm, cmp.itm.ProductId, cmp.itm.Type)
            cmp.viewAllLikeThisUrl = "/media/morelike/" + cmp.itm.ProductId;
            var postData = { productId: cmp.itm.ProductId, productType: cmp.itm.Type };

            dataService.getSetData("/component/GetProductsForTags", postData).then(function (data) {
                if (data.Error) {
                    console.log({ getYouMightLikeError: data });
                }
                else {
                    cmp.mightLike = data;
                    //console.log(cmp.mightLike)
                }
            }, function (response) {
                console.log({ getYouMightLikeDBError: response });
            });
        };

        //opens new modal when clicking an item inside the currently open model.
        cmp.showDetailsModal = function (item) {

            cmp.videoPlayer.pause();

            if (item == "collection") {

                var postData = { filter: 'pid/' + cmp.collectionItemId };

                dataService.getSetData("/component/refreshview", postData).then(function (data) {
                    if (data.Error) {
                        console.log({ Error: data });
                    }
                    else {
                        var item = data.Products[0];
                        $rootScope.$broadcast('detailsItemSet', { 'item': item });
                    }
                });
            }
            else if (item.ProductId !== null ) {
                //console.log("showDetails", item)
                $rootScope.$broadcast('detailsItemSet', { 'item': item });
            }
        };

        //if item is removed from cart
        $rootScope.$on('cartRemove', function (evt, data) {
            if (data.item.CartDetailId == cmp.itm.CartDetailId) {
                cmp.itm.IsInCart = false;
                cmp.addToCartText = setCheckoutText(cmp.itm);
                cmp.addToCartPrice = setCheckoutPrice(cmp.itm);
            }
        });

        $rootScope.$on('elementResized', function (evt, data) {
            if (cmp.itm.ProductId) {
                checkDescription("resized");
                //checkTags("resized");
                //console.log("resized")
                $scope.$apply();
            }
        });

        $rootScope.$on("loginDataReady", function (event, data) {
            if (data.data.length > 0) {
                /*console.log(data)*/
                cmp.LoggedIn = true;
            }
            else {
                cmp.LoggedIn = false;
            }
        });

        $rootScope.$on("orgListReady", function (event, data) {
            cmp.selectedOrg = organizationService.selectedOrganization;
        });

        $rootScope.$on("updatedOrg", function (event, data) {
            cmp.selectedOrg = organizationService.selectedOrganization;
        });

        $scope.$watch('cmp.itm', function (newVal, oldVal) {
            if (cmp.itm.ProductId) {
                cmp.standaloneItem = null;
                cmp.mightLike = {};
                cmp.isInCollection = false;
                // Hide color stuff from previous modal
                $('#colorPalette' + oldVal.ProductId).parent().hide();

                if (cmp.itm.Type == cmp.collection) {
                    cmp.getCollectionDetails();
                }
                if (cmp.itm.Type != cmp.collection) {
                    cmp.getAlsoAvailable();
                }
                cmp.setData();
                
                //check description more box
                setTimeout(function () {
                    //setInitialHeight("watch");
                    checkDescription("watch");
                    //checkTags("watch");
                    $scope.$apply();
                }, 2000);

                /*console.log('Product ID:' + cmp.itm.ProductId);*/
                var dat = { 'productId': cmp.itm.ProductId };
                getColors(dat);
            }
        });


        //function called when last thumb in added to slider. 
        $scope.collectionLoaded = function () {
            //console.log("collectionLoaded")
            $scope.mySwiper = new Swiper('.details-swiper', {
                    slidesPerView: 4,
                    spaceBetween: 30,
                    slidesPerGroup: 4,
                    pagination: {
                        el: '.swiper-pagination',
                        clickable: true,
                    },
                    navigation: {
                        nextEl: '.swiper-arrow-next',
                        prevEl: '.swiper-arrow-prev',
                    },
                    breakpoints: {
                        // when window width is >= 1px
                        1: {
                            slidesPerView: 2,
                            spaceBetween: 20,
                            slidesPerGroup: 2,
                        },
                        // when window width is >= 768px
                        768: {
                            slidesPerView: 3,
                            spaceBetween: 30,
                            slidesPerGroup: 3,
                        },
                        // when window width is >= 1200px
                        1200: {
                            slidesPerView: 4,
                            spaceBetween: 30,
                            slidesPerGroup: 4,
                        }
                    }
                })
            //console.log($scope.mySwiper);
        };

        //retreives all the details of the items in the collection.
        cmp.getCollectionDetails = function () {
            var ids = [];
            var i;

            for (i = 0; i < cmp.itm.CollectionItemInfo.length; i++) {
                ids.push(cmp.itm.CollectionItemInfo[i].ProductId)
            }

            dataService.getSetData("/component/GetCollectionItemsAsProducts", ids).then(function (data) {
                if (data.Error) {
                    console.log({ Error: data });
                }
                else {
                    cmp.itm.CollectionItemFullDetails = data;
                }
            });
        };

        //when detailsModal is shown
        $('#detailsModal').on('shown.bs.modal', function (e) {
            if (cmp.inModal) {
                if ($scope.mySwiper) {
                    /*console.log($scope.mySwiper)*/;
                    if ($scope.mySwiper.length >= 1) {
                        for (var i = 0; i < $scope.mySwiper.length; i++) {
                            $scope.mySwiper[i].update();
                            $scope.mySwiper[i].slideTo(1);
                        }
                    }
                    else {
                        $scope.mySwiper.update();
                        $scope.mySwiper.slideTo(1);
                    }
                }
                if (window.location.pathname != cmp.itm.DetailUrl) {
                    history.pushState(null, cmp.itm.DetailUrl, cmp.itm.DetailUrl);
                    sessionStorage.setItem(cmp.itm.DetailUrl, JSON.stringify(cmp.itm));
                }
            }
            else
                cmp.videoPlayer.pause();
        });

        //when detailsModal is closed
        $('#detailsModal').on('hide.bs.modal', function (e) {
            if (window.location.pathname != cmp.initialPathname && cmp.inModal) {
                history.pushState(null, cmp.initialPathname, cmp.initialPathname)
            }
            cmp.videoPlayer.pause();
            /*cmp.standaloneItem = null;*/
            $(".modal .standalone-add").addClass("d-none");

            cmp.resetPalette('#detailsModal .colors-wrapper');
        });

        // This is the browser back and forward buttons
        window.onpopstate = function (event) {
            // If url includes 'media/filters'
            if (window.location.pathname.includes('media/filters')) {
                //If the page was on details standalone page
                if (cmp.detailsPage) {
                    window.location = window.location.href;
                }
                //If the page had a modal open, close the modal and don't redo filter search
                if ($('#detailsModal').hasClass('show')) {
                    $('#detailsModal').modal('hide');
                }
                //broadcast filter search
                else {
                    $rootScope.$broadcast('executeFilterOnItmPage');
                }
            }
            // url doesn't include media/filters
            else {
                //url isn't the initial loading pathname, reload the modal with new content from session
                if (window.location.pathname != cmp.initialPathname) {
                    let item = JSON.parse(sessionStorage.getItem(window.location.pathname));
                    $rootScope.$broadcast('detailsItemSet', { 'item': item });
                }
                //url is the initial loading pathname, close the modal.
                if (window.location.pathname == cmp.initialPathname) {
                    $('#detailsModal').modal('hide');
                }
            }
        };

        angular.element(document).ready(function () {
            if (cmp.inModal) {
                cmp.videoPlayer.autoplay = true;
                cmp.initialPathname = window.location.pathname;
                if (window.location.pathname.indexOf('media/filters')!= -1)
                    cmp.detailsPage = true;
            }
            if (check1 || check2) {
                cmp.videoPlayer.muted = true;
            }

            /* Attempting to get icons to show while paused, but disappear while playing
            var vid = document.getElementById('previewDetailVideo' + cmp.itm.ProductId);
            console.log(vid);

            vid.onpause = function () {
                console.log('Paused!');
                $('.js-hide-icons').css('opacity', '0.8');
            };

            vid.onplay = function () {
                console.log('Playing!');
                $(this).mouseleave(function () {
                    $('.js-hide-icons').css('opacity', '0');
                });
            };*/
        });
    }

    angular.module('softouch').component('detailsView', {
        templateUrl: '/scripts/app/components/detailsView/detailsView.component.html',
        controllerAs: "cmp",
        bindings: { itm: '<', inModal: '<'},
        controller: ['$scope', '$rootScope', 'constants', '$element', 'dataService', 'userService', 'cartService', 'favoritesService', 'downloadItemService', '$location', 'organizationService', controller]
    });

}());;
(function () {
    "use strict";

    function controller($http, $scope, $rootScope, constants, $element) {
        window.peekDownload = this;
        var cmp = this;
        
        cmp.quality = {};
        cmp.downloadCaption = "Download";
        cmp.btnIcon = 'icon-im-download-button';
        cmp.vp = $element[0].querySelector("video");
        cmp.img = $element[0].querySelector("img");

        cmp.getImg = function () {
            return (constants[0].BaseUrl.previewImage_thumbnails + cmp.itm.ProductId + '.jpg');
        };

        cmp.downloadItem = function () {
            var isIntegratedStore = $("body").hasClass("integratedStore");

            var item = document.querySelector("#downloadBtn" + cmp.index);
            if (!isIntegratedStore) {
                cmp.downloadCaption = "Downloaded";
                cmp.btnIcon = 'icon-im-checkmark';
            } else {
                cmp.downloadCaption = "Downloading";
            }
            $("#downloadBtn" + cmp.index).addClass("stopNgClick");
            $("#downloadBtn" + cmp.index).addClass("gtm-item-downloaded");

            var tkn = '';

            if ($rootScope.guestToken !== undefined && $rootScope.guestToken !== '') {
                tkn = $rootScope.guestToken;
            }
            
            var url = '/component/download?detailId=' + cmp.quality.DetailId + '&format=' + cmp.itm.FileTypes[0] + '&token=' + tkn;

            if (($("#iguid").val() !== undefined && $("#iguid").val() !== "")
                || ($("#accountGuid").val() !== undefined && $("#accountGuid").val() !== ""))
                url = "/gui2?action=download&btnIndex=" + cmp.index + "&detailid=" + cmp.quality.DetailId + "&fileformat=" + cmp.itm.FileTypes[0];

            window.location.href = url;
        };

        cmp.playThis = function (evt) {
            if (!(cmp.vp.currentTime > 0 && !cmp.vp.paused && !cmp.vp.ended && cmp.vp.readyState > 2)) {
                if (!(cmp.itm.ProductId === null)) {
                    if (cmp.itm.TypeText != "Stills" && cmp.itm.TypeText != "Collections") {
                        $('#preview-loaderDownload' + cmp.itm.ProductId).html("<div class='preview-loader'><label >●</label ><label>●</label><label>●</label><label>●</label><label>●</label><label>●</label></div>");
                        cmp.vp.load();
                        cmp.vp.play();
                        cmp.vp.onplaying = function (event) {
                            $('#previewDownload' + cmp.itm.ProductId).removeClass("jq-video-hide");
                            $('#preview-loaderDownload' + cmp.itm.ProductId).empty();
                            $('#imgDownload' + cmp.itm.ProductId).addClass("jq-video-hide");
                        };
                    }
                }
            }

        };

        cmp.stopThis = function (evt) {
            if (!(cmp.itm.ProductId === null)) {
                $('#preview-loaderDownload' + cmp.itm.ProductId).empty();
                cmp.vp.pause();
                $('#imgDownload' + cmp.itm.ProductId).removeClass("jq-video-hide");
                $('#previewDownload' + cmp.itm.ProductId).addClass("jq-video-hide");
                if (!cmp.vp.playing) {
                    try {
                        cmp.vp.load();
                    }
                    catch (e) {
                        console.log("error loading video for id:" + cmp.itm.ProductId);
                    }
                }
            }
        };

        cmp.img.onload = function () {
            $('.thumb-img').removeClass("jq-video-hide");
            $(".thumb").removeClass("loading");
            $('.thumb').removeClass('d-none');
            if (!($('#imgDownload' + cmp.itm.ProductId).hasClass("smaller-img"))) {
                $('#imgDownload' + cmp.itm.ProductId).addClass("smaller-img");
                $('#containerDownload' + cmp.itm.ProductId).addClass("black");
                $('#previewDownload' + cmp.itm.ProductId).addClass("black").removeClass("gray-background");
            }
            if ($('#containerDownload' + cmp.itm.ProductId).width() - $('#imgDownload' + cmp.itm.ProductId).width() < 1) {
                $('#imgDownload' + cmp.itm.ProductId).removeClass("smaller-img");
                $('#containerDownload' + cmp.itm.ProductId).removeClass("black");
                $('#previewDownload' + cmp.itm.ProductId).removeClass("black").addClass("gray-background");
            }
        };
    }

    angular.module('softouch').component('downloadItem', {
        templateUrl: '/scripts/app/components/downloadItem/downloadItem.component.html',
        controllerAs: "cmp",
        bindings: {'itm': '<', 'index': '@'},
        controller: ['$http', '$scope', '$rootScope', 'constants', '$element', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope,
        $rootScope,
        listService,
        dataService,
        dataFilterService,
        itemService,
        organizationService,
        userService,
        cartService,
        cookieService) {
        var cmp = this;
        cmp.dropList = [];
        cmp.selectedItem = {};
        cmp.adjustPosition = '';
        cmp.hasSoftware = cartService.containSoftware();
        cmp.$onInit = function () {
            switch (cmp.listType) {
                case 'ipp':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") {
                        var tmpItem = itemService.itemData.selectedFilters.ipp.length > 0 ? itemService.itemData.selectedFilters.ipp[0] : cmp.dropList[0];
                        var tmpAvailable = cmp.dropList.filter(function (item) {
                            return item.id == tmpItem.id;
                        });
                        cmp.selectedItem = tmpAvailable[0];
                    }
                    break;
                case 'home':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0]; }
                    break;
                case 'media':
                    cmp.dropList = listService.getStaticList('home');
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0]; }
                    break;
                case 'sort':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") {
                        var tmpItem = itemService.itemData.selectedFilters.o.length > 0 ? itemService.itemData.selectedFilters.o[0] : cmp.dropList[0];
                        var tmpAvailable = cmp.dropList.filter(function (item) {
                            return item.id == tmpItem.id;
                        });
                        cmp.selectedItem = tmpAvailable[0];
                    }
                    break;
                case 'search':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0];}
                    break;
                case 'natureOfRequest':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0]; }
                    break;
                case 'freePurchased':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0]; }
                    break;
                case 'org':
                    if (!(organizationService.orgList.length === 0)) {
                        cmp.dropList = organizationService.orgList;
                        if (typeof cmp.dropList !== "undefined" && cmp.dropList !== null) {
                            cmp.selectedItem = organizationService.selectedOrganization;
                            unselect();
                            select(organizationService.selectedOrganization);
                        }
                    }
                    break;
                default:
                    cmp.dropList = cmp.newList;
                    break;
            };
            switch (cmp.customStyle) {
                case 'homeFilter':
                    cmp.adjustPosition = 'adjust-position';
                    break;
                case 'accountFilter':
                    cmp.adjustPosition = 'adjust-position';
                    break;
                case 'searchbar':
                    cmp.adjustPosition = 'search-position';
                    break;
                case 'checkoutOrg':
                    cmp.adjustPosition = 'org-position';
                    break;
                case 'mediaDownloadsOrg':
                    cmp.adjustPosition = 'downloads-position';
                    break;
                case 'activationOrg':
                    cmp.adjustPosition = 'act-position';
                    break;
                case 'licenseOrg':
                    cmp.adjustPosition = 'lic-position';
                    break;
                case 'natureOfRequest':
                    cmp.adjustPosition = 'nature-position';
                    break;
                case "accountOrgFilter":
                    cmp.adjustPosition = 'account-org-position';
                    break;
                default:
                    cmp.adjustPosition = '';
                    break;
            }   
        };

        cmp.send = function () {

        };
        cmp.selectMe = function (itm) {
            unselect();
            select(itm);
            switch (cmp.listType) {
                case 'ipp':
                    itemService.itemData.selectedFilters.ipp =[];
                    itemService.itemData.selectedFilters.ipp.push({
                    id: itm.value, key: 'ipp', value: itm.value });
                    $rootScope.$broadcast('ippChanged', {
                        'ippChanged': true,
                        'id': itm.value
                    });
                    break;
                    break;
                case 'home':
                    itemService.categoryName = itm.Name;
                    //itemService.itemData.selectedFilters.b.push(itm);
                    break;
                case 'media':
                    itemService.categoryName = itm.Name;
                    //itemService.itemData.selectedFilters.b.push(itm);
                    break;
                case 'sort':
                    itemService.itemData.selectedFilters.pg = [];
                    itemService.itemData.selectedFilters.pg.push({ id: 1, key: 'pg', value: 1});
                    itemService.itemData.selectedFilters.o = [];
                    itemService.itemData.selectedFilters.o.push({ id: itm.id, key: 'o', value: itm.Name });
                    cookieService.setFiltersCookie();
                    $rootScope.$broadcast('orderChanged', {
                        'orderChanged': true, 
                        'id':itm.id
                    });
                    break;
                case 'search':
                    itemService.categoryName = itm.Name;
                    //itemService.itemData.selectedFilters.b.push(itm);
                    break;
                case 'org':
                    toggleBodyCover(true);
                    organizationService.selectedOrganization = itm;
                    organizationService.changeOrg();
                    break;
                case 'natureOfRequest':
                    supportService.nature = itm;
                    break;
                case "freePurchased":
                    $scope.$parent.toggleData(itm);
                    break;
                default:
                    itemService.categoryName = "All Media";
                    //itemService.itemData.selectedFilters.b = [];
                    //itemService.itemData.selectedFilters.o = [];
                    break;
            };
        };
        function unselect() {
            $.each(cmp.dropList, function (key, value) {
                value.checked = false;
                dataService.order = '';
                switch (cmp.listType) {
                    case 'home':
                        itemService.setCategory('allmedia');
                        break;
                    case 'sort':
                        dataService.order = 'popular';
                        break;
                    case "org":
                    case "freePurchased":
                    case "media":
                        break;
                    case "ipp":
                        break;
                    default:
                        itemService.setCategory('all-media');
                        break;
                };
            });
        }
        function select(itm) {
            cmp.selectedItem = itm;
            $.each(cmp.dropList, function (key, value) {
                switch (cmp.listType) {
                    case 'home':
                        if (value.id == itm.id) { value.checked = true; cmp.selected = itm; };
                        break;
                    case 'media':
                        if (value.id == itm.id) { value.checked = true; cmp.selected = itm; };
                        $rootScope.$broadcast('mediaValueChanged', {
                            'mediaValue': itm
                        });
                        break;
                    case 'sort':
                        if (value.id == itm.id) { value.checked = true; };
                        break;
                    case 'search':
                        if (value.id == itm.id) { value.checked = true; };
                        break;
                    case 'org':
                        if (value.AccountId == itm.AccountId) { value.checked = true; };
                        break;
                    case 'ipp':
                        break;
                    case 'freePurchased':
                        if (value.id == itm.id) { value.checked = true; };
                        break;
                    default:
                        itemService.categoryName = "All Media";
                        itemService.itemData.selectedFilters.b = [];
                        itemService.itemData.selectedFilters.o = [];
                        break;
                };
                
            });
        }
         var updateOrgListner = $rootScope.$on('updatedOrg', function (evt, data) {
            if (cmp.listType == 'org') {
                cmp.selectedItem = organizationService.selectedOrganization;
                unselect();
                select(organizationService.selectedOrganization);
            }
         });

         $scope.$on('$destroy', updateOrgListner);

        var orgListReadyListener = $rootScope.$on('orgListReady', function (event, data) {
            if (cmp.listType == 'org') {
                if (typeof data.orgList === 'undefined') { cmp.dropList = []; } else { cmp.dropList = data.orgList; }
                cmp.selectedItem = organizationService.selectedOrganization;
                unselect();
                select(organizationService.selectedOrganization);
            }
        });

        $scope.$on('$destroy', orgListReadyListener);

        var orderListener = $rootScope.$on('selectOrder', function (evt, data) {
            if (cmp.listType == 'sort') {
                var tmp = cmp.dropList.filter(function(item){
                    return item.id == data.item.id;
                });
                (tmp.length > 0) ? cmp.selectedItem = tmp[0]: null;
                unselect();
                select(cmp.selectedItem);
            }
        });
        $scope.$on('$destroy', orderListener);

        var ippListener = $rootScope.$on('selectIpp', function (evt, data) {
            if (cmp.listType == 'ipp') {
                var tmp = cmp.dropList.filter(function (item) {
                    return item.id == data.item.id;
                });
                (tmp.length > 0) ? cmp.selectedItem = tmp[0] : null;
                unselect();
                select(cmp.selectedItem);
            }
        });
        $scope.$on('$destroy', ippListener);


    }

    module.component('ddlMenuOld', {
        templateUrl: '/scripts/app/components/dropDownMenu/ddl-menu.component-old.html',
        controllerAs: "cmp",
        bindings: {
            listType: '@',
            customStyle: '@',
            newList: '=',
            icon: '@',
            arrowClass: '@',
            ddlStyle: '@'
        },              
        controller: ['$scope',
            '$rootScope',
            'listService',
            'dataService',
            'dataFilterService',
            'itemService',
            'organizationService',
            'userService',
            'cartService',
            'cookieService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope,
        $rootScope,
        listService,
        dataService,
        dataFilterService,
        itemService,
        organizationService,
        userService,
        cartService,
        cookieService) {
        var cmp = this;
        cmp.dropList = [];
        cmp.selectedItem = {};
        cmp.adjustPosition = '';
        cmp.hasSoftware = cartService.containSoftware();
        cmp.$onInit = function () {
            switch (cmp.listType) {
                case 'ipp':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") {
                        var tmpItem = itemService.itemData.selectedFilters.ipp.length > 0 ? itemService.itemData.selectedFilters.ipp[0] : cmp.dropList[0];
                        var tmpAvailable = cmp.dropList.filter(function (item) {
                            return item.id == tmpItem.id;
                        });
                        cmp.selectedItem = tmpAvailable[0];
                    }
                    break;
                case 'home':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0]; }
                    break;
                case 'media':
                    cmp.dropList = listService.getStaticList('home');
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0]; }
                    break;
                case 'sort':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") {
                        var tmpItem = itemService.itemData.selectedFilters.o.length > 0 ? itemService.itemData.selectedFilters.o[0] : cmp.dropList[0];
                        var tmpAvailable = cmp.dropList.filter(function (item) {
                            return item.id == tmpItem.id;
                        });
                        cmp.selectedItem = tmpAvailable[0];
                    }
                    break;
                case 'search':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0];}
                    break;
                case 'freePurchased':
                    cmp.dropList = listService.getStaticList(cmp.listType);
                    if (typeof cmp.dropList !== "undefined") { cmp.selectedItem = cmp.dropList[0]; }
                    break;
                case 'org':
                    if (!(organizationService.orgList.length === 0)) {
                        cmp.dropList = organizationService.orgList;
                        if (typeof cmp.dropList !== "undefined" && cmp.dropList !== null) {
                            cmp.selectedItem = organizationService.selectedOrganization;
                            unselect();
                            select(organizationService.selectedOrganization);
                        }
                    }
                    break;
                default:
                    cmp.dropList = cmp.newList;
                    break;
            };
            switch (cmp.customStyle) {
                case 'searchbar':
                    cmp.adjustPosition = 'search-position';
                    break;
                default:
                    cmp.adjustPosition = '';
                    break;
            }   
        };

        cmp.send = function () {

        };
        cmp.selectMe = function (itm) {
            unselect();
            select(itm);
            switch (cmp.listType) {
                case 'ipp':
                    itemService.itemData.selectedFilters.ipp =[];
                    itemService.itemData.selectedFilters.ipp.push({
                    id: itm.value, key: 'ipp', value: itm.value });
                    $rootScope.$broadcast('ippChanged', {
                        'ippChanged': true,
                        'id': itm.value
                    });
                    break;
                case 'home':
                    itemService.categoryName = itm.Name;
                    //itemService.itemData.selectedFilters.b.push(itm);
                    break;
                case 'media':
                    itemService.categoryName = itm.Name;
                    //itemService.itemData.selectedFilters.b.push(itm);
                    break;
                case 'sort':
                    itemService.itemData.selectedFilters.pg = [];
                    itemService.itemData.selectedFilters.pg.push({ id: 1, key: 'pg', value: 1});
                    itemService.itemData.selectedFilters.o = [];
                    itemService.itemData.selectedFilters.o.push({ id: itm.id, key: 'o', value: itm.Name });
                    cookieService.setFiltersCookie();
                    $rootScope.$broadcast('orderChanged', {
                        'orderChanged': true, 
                        'id':itm.id
                    });
                    break;
                case 'search':
                    itemService.categoryName = itm.Name;
                    //itemService.itemData.selectedFilters.b.push(itm);
                    break;
                case 'org':
                    toggleBodyCover(true);
                    organizationService.selectedOrganization = itm;
                    organizationService.changeOrg();
                    break;
                case "freePurchased":
                    $scope.$parent.toggleData(itm);
                    break;
                default:
                    itemService.categoryName = "All Media";
                    //itemService.itemData.selectedFilters.b = [];
                    //itemService.itemData.selectedFilters.o = [];
                    break;
            };
        };
        function unselect() {
            $.each(cmp.dropList, function (key, value) {
                value.checked = false;
                dataService.order = '';
                switch (cmp.listType) {
                    case 'home':
                        itemService.setCategory('allmedia');
                        break;
                    case 'sort':
                        dataService.order = 'popular';
                        break;
                    case "org":
                    case "freePurchased":
                    case "media":
                        break;
                    case "ipp":
                        break;
                    default:
                        itemService.setCategory('all-media');
                        break;
                };
            });
        }
        function select(itm) {
            cmp.selectedItem = itm;
            $.each(cmp.dropList, function (key, value) {
                switch (cmp.listType) {
                    case 'home':
                        if (value.id == itm.id) { value.checked = true; cmp.selected = itm; };
                        break;
                    case 'media':
                        if (value.id == itm.id) { value.checked = true; cmp.selected = itm; };
                        $rootScope.$broadcast('mediaValueChanged', {
                            'mediaValue': itm
                        });
                        break;
                    case 'sort':
                        if (value.id == itm.id) { value.checked = true; };
                        break;
                    case 'search':
                        if (value.id == itm.id) { value.checked = true; };
                        break;
                    case 'org':
                        if (value.AccountId == itm.AccountId) { value.checked = true; };
                        break;
                    case 'ipp':
                        break;
                    case 'freePurchased':
                        if (value.id == itm.id) { value.checked = true; };
                        break;
                    default:
                        itemService.categoryName = "All Media";
                        itemService.itemData.selectedFilters.b = [];
                        itemService.itemData.selectedFilters.o = [];
                        break;
                };
                
            });
        }
         var updateOrgListner = $rootScope.$on('updatedOrg', function (evt, data) {
            if (cmp.listType == 'org') {
                cmp.selectedItem = organizationService.selectedOrganization;
                unselect();
                select(organizationService.selectedOrganization);
            }
         });

         $scope.$on('$destroy', updateOrgListner);

        var orgListReadyListener = $rootScope.$on('orgListReady', function (event, data) {
            if (cmp.listType == 'org') {
                if (typeof data.orgList === 'undefined') { cmp.dropList = []; } else { cmp.dropList = data.orgList; }
                cmp.selectedItem = organizationService.selectedOrganization;
                unselect();
                select(organizationService.selectedOrganization);
            }
        });

        $scope.$on('$destroy', orgListReadyListener);

        var orderListener = $rootScope.$on('selectOrder', function (evt, data) {
            if (cmp.listType == 'sort') {
                var tmp = cmp.dropList.filter(function(item){
                    return item.id == data.item.id;
                });
                (tmp.length > 0) ? cmp.selectedItem = tmp[0]: null;
                unselect();
                select(cmp.selectedItem);
            }
        });
        $scope.$on('$destroy', orderListener);

        var ippListener = $rootScope.$on('selectIpp', function (evt, data) {
            if (cmp.listType == 'ipp') {
                var tmp = cmp.dropList.filter(function (item) {
                    return item.id == data.item.id;
                });
                (tmp.length > 0) ? cmp.selectedItem = tmp[0] : null;
                unselect();
                select(cmp.selectedItem);
            }
        });
        $scope.$on('$destroy', ippListener);


    }

    module.component('ddlMenu', {
        templateUrl: '/scripts/app/components/dropDownMenu/ddl-menu.component.html?v=${new Date().getTime()',
        controllerAs: "cmp",
        bindings: {
            listType: '@',
            customStyle: '@',
            newList: '=',
            icon: '@',
            arrowClass: '@',
            ddlStyle: '@'
        },              
        controller: ['$scope',
            '$rootScope',
            'listService',
            'dataService',
            'dataFilterService',
            'itemService',
            'organizationService',
            'userService',
            'cartService',
            'cookieService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($http, $scope, $rootScope, $element) {
        var cmp = this;
        cmp.overFlow = false;
        cmp.originalClientHeight = 0;
        cmp.originalScrollHeight = 0;

        cmp.wrapper = $element[0].querySelector('#descriptionWrapper'); //wrapper
        cmp.txt = $element[0].querySelector('#descriptionText'); //text
        cmp.more = $element[0].querySelector('#more'); //button

        var checkDescription = function () {
            setHeight('checkDescription');
            cmp.overFlow = (cmp.originalClientHeight + 4) < cmp.originalScrollHeight;
            cmp.overFlow ? $(cmp.txt).addClass('textFade') : $(cmp.txt).removeClass('textFade');
        };
        cmp.showMoreDescription = function () {
            if ($(cmp.wrapper).hasClass('more')) {
                $(cmp.wrapper).removeClass('more');
                $(cmp.more).html('...');
            }
            else {
                $(cmp.wrapper).addClass('more');
                $(cmp.more).html('See Less');
            }
        };

        function setHeight(state) {
            cmp.originalClientHeight = cmp.wrapper.clientHeight;
            cmp.originalScrollHeight = cmp.wrapper.scrollHeight;
        };

        var elementResizedListener = $rootScope.$on('elementResized', function (evt, data) {
            checkDescription();
        });
        $scope.$on('$destroy', elementResizedListener);

        function initService() {
            checkDescription();
        }

        angular.element(document)
            .ready(function () {
                initService();
            });

    }

    module.component('ellipsisBox', {
        templateUrl: '/scripts/app/components/ellipsisBox/ellipsisBox.component.html',
        controllerAs: "cmp",
        bindings: { description: '@', detailUrl :'@' },
        controller: ['$http', '$scope', '$rootScope', '$element', controller]
    });

}());;
(function ()
{
    "use strict";
    function controller($rootScope, $scope, dataService, constants)
    {
        window.peekDemoView = $scope;

        $scope.tabPrefix = "figure";
        $scope.activeTab = 1;
        $scope.maxTabs = $("figure").length;
        $scope.download = {};
        $scope.download.signup = true;
        $scope.download.email = '';
        $scope.download.email_mobile = '';
        $scope.error = {};
        $scope.gettingStartedUrl = constants[0].Urls.supportVideos;
        $scope.pricingUrl = constants[0].Urls.pricing;
        $scope.demoUrl = '';
        $scope.browserWidth = window.innerWidth;
        $scope.download.signup = true;

        $scope.select_group = function (tabNumber)
        {
            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + tabNumber + "']").addClass('sel');
            $scope.activeTab = parseFloat(tabNumber);
        };

        $scope.select_next = function ()
        {
            if ($scope.activeTab + 1 > $scope.maxTabs)
            {
                $scope.activeTab = 1;
            } else
            {
                $scope.activeTab += 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.select_previous = function ()
        {
            if ($scope.activeTab - 1 < 1)
            {
                $scope.activeTab = $scope.maxTabs;
            } else
            {
                $scope.activeTab -= 1;
            }

            $("[target]").removeClass('sel');
            $("[target='" + $scope.tabPrefix + $scope.activeTab + "']").addClass('sel');
        };

        $scope.submit = function ()
        {

            if ($scope.download.signup && $scope.download.email == '')
            {
                //alert("Please fill in all fields.")
                $scope.error.messages = ["Please fill in all fields."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response)
            {
                hideMessage();

                if (response.Error === true)
                {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else
                {
                    hideMessage();
                    $('.email-form').addClass('d-none');
                    $('.email-success').removeClass('d-none');
                }
            };

            var onError = function (response)
            {
                /*alert(response.responseText)*/
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            if ($scope.download.signup)
            {
                var postUrl = "/component/PreSaleEmails/";
                var postData = { email: $scope.download.email };

                dataService
                    .getSetData(postUrl, postData)
                    .then(onSuccess, onError)
            } else
            {
                dataService
                    .getSetData("/component/GetCurrentBuildUrl")
                    .then(onSuccess, onError);
            }
        };

        $scope.submit_mobile = function ()
        {
            hideMessage();

            // if email is blank.
            if ($scope.download.email_mobile === undefined)
            {
                $scope.error.messages = ["Please fill in all fields."];
                showErrorMessage();
                return;
            }

            var onSuccess = function (response)
            {
                hideMessage();

                if (response.Error === true)
                {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else
                {
                    hideMessage();

                    $('#mobile').addClass('d-none');
                    $('#success').removeClass('d-none');
                    $('#fields').addClass('d-none');
                }
            };

            var onError = function (response)
            {
                $('#errorMessage').html(response.responseText).slideDown(250);
                showErrorMessage();
            };

            var onGetBuildNumberSuccess = function (response)
            {
                if (response.Error === true)
                {
                    $scope.error.messages = response.ErrorMessages;
                    showErrorMessage();
                } else
                {
                    var postUrl = "/component/DemoLinkEmail/";
                    var postData = { email: $scope.download.email2, demoLink: response.DemoUrl };

                    dataService
                        .getSetData(postUrl, postData)
                        .then(onSuccess, onError);
                }
            };

            // if box is checked
            if ($scope.download.signup2)
            {
                var postUrl = "/component/GettingStartedTutorialEmails/";
                var postData = { email: $scope.download.email2 };

                dataService
                    .getSetData(postUrl, postData)
                    .then(onSuccess, onError);
            }
            // send the email
            dataService
                .getSetData("/component/GetCurrentBuildUrl")
                .then(onGetBuildNumberSuccess, onError);
        };

        /*window.onresize = function () {
            $scope.browserWidth = window.innerWidth;
            if ($scope.browserWidth <= 767) {
                $scope.isEmailed = true;
                console.log('yay!', $scope.isEmailed);
            }
            else {
                $scope.isEmailed = false;
            }
        }*/

        angular.element(document).ready(function ()
        {
        });
    }

    angular.module('softouch').component('emailList', {
        templateUrl: '/scripts/app/components/emailList/emailList.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
        },
        controller: ['$rootScope', '$scope', 'dataService', 'constants', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope, itemService, dataFilterService) {
        var cmp = this;
        cmp.title = 'All your church presentation needs in one software.';
        cmp.bottomText = 'EasyWorship is a powerful, yet simple church presentation software. Build your entire service - song lyrics, Scriptures, announcements, videos and sermon notes - in one place, quickly and efficiently. Experience the software that is uniquely designed to meet the needs of churches, big and small, around the world.';
        cmp.bannerClick = function (item) {};

        cmp.banners = [];
        cmp.banners.push(
            {
                image: '/Images/features-screen-1.png', overlay: ''
            },
            {
                image: '/Images/features-screen-2.png', overlay: ''
            },
            {
                image: '/Images/features-screen-3.png', overlay: ''
            },
            {
                image: '/Images/features-screen-4.png', overlay: ''
            }
        );

        function initService() {
            cmp.selectImage(1);
        };
        var lastIndex = 0;
        cmp.selectImage = function (ind) {
            $("[id^='bannerImage']").css('z-index', '0').css('opacity', '.5');
            $('#bannerImage' + lastIndex).css('z-index', '5').css('opacity', '1');
            lastIndex = ind;
            var tmp = '#bannerImage' + ind;
            $(tmp).css('z-index', '10')
            $(tmp).css('opacity', '.5');
            $(tmp).animate({ opacity: '1' }, 'slow');
            selectButton(ind);
        };

        var selectButton = function (ind) {
            $("[id^='listbuttons']").removeClass('sel');
            var selectedButton = "#listbuttons" + ind;
            $(selectedButton).addClass('sel');
        };

        cmp.selectNext = function(){
            lastIndex += 1;
            (lastIndex > cmp.banners.length) ? lastIndex = 1 : null;
            cmp.selectImage(lastIndex);
        }

        angular.element(document)
            .ready(function () {
                initService();
            });
    }

    module.component('ewFadeBanner', {
        templateUrl: '/scripts/app/components/ewFadeBanner/ewFadeBanner.component.html',
        controllerAs: "cmp",
        bindings: { pricingUrl : '@'},
        controller: ['$scope', '$rootScope', 'itemService', 'dataFilterService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');
    function Controller($scope, $rootScope, $location, $element, constants) {

        var cmp = this;

        var inp = $element[0].querySelector('input');
        var ewIcon = $element[0].querySelector('[id^="ewIcon"]');
        var inIcon = $element[0].querySelector('[id^="inIcon"]');
        var field = $element[0].querySelector('.inputWrapper');
        var msgWrapper = $element[0].querySelector('[id^="msgWrapper"]');

        cmp.labelIt = function () {
            $(field).addClass('fieldNotEmpty');
            $(inp).addClass('fieldNotEmpty');
            $(ewIcon).addClass('fieldNotEmpty');
            $(inIcon).removeClass("required");
            if (cmp.data.selectedOption.name === '') { cmp.unlabelIt();}
        };

        cmp.unlabelIt = function () {
            $(field).removeClass('fieldNotEmpty');
            $(inp).removeClass('fieldNotEmpty');
            $(ewIcon).removeClass('fieldNotEmpty');
            $(inIcon).removeClass("required");
        };

        

        $scope.$watch('cmp.data.selectedOption', function (n, o) {
            if (typeof n !== 'undefined') {
                if (o !== n) {
                    if (cmp.data.selectedOption.name == '') {
                        cmp.unlabelIt();
                    } 
                }
            }
        });

        angular.element(document)
            .ready(function () {

            });
    }

    module.component('ewSelect', {
        templateUrl: '/scripts/app/components/ewSelect/ewSelect.component.html',
        controllerAs: "cmp",
        bindings: {
            placeholder: '@',
            specialStyle: '@',
            fieldId: '@',
            labelIcon: '@',
            data: '<'
        },
        controller: ['$scope', '$rootScope', '$location', '$element', 'constants', Controller]
    });

}());
;
(function () {
    "use strict";
    var module = angular.module('softouch');
    function Controller($scope, $rootScope, $location, constants) {

        var cmp = this;
        var check = {};
        var success = false;
        var danger = false;
        var info = false;
        var warning = false;
        cmp.messages = [];

        cmp.labelIt = function (evt) {
            var $field = $(evt.target).closest('.inputWrapper' );
            $field.addClass('fieldNotEmpty');
            $(evt.target).addClass('fieldNotEmpty');
            $("#ewIcon" + cmp.fieldId).addClass('fieldNotEmpty');
            $('#inIcon' + cmp.fieldId).removeClass("required");
            //showErrors();
        };
        cmp.unlabelIt = function (evt) {
            check.empty = ($('#' + cmp.fieldId)[0].value.length == 0);
            if (check.empty) {
                var $field = $(evt.target).closest('.inputWrapper');
                $field.removeClass('fieldNotEmpty');
                $(evt.target).removeClass('fieldNotEmpty');
                $("#ewIcon" + cmp.fieldId).removeClass('fieldNotEmpty');
                $('#inIcon' + cmp.fieldId).removeClass("required");
            }
            //hideErrors();
        };

        var showErrors = function () {
            if (cmp.messages.length > 0) {
                $('#msgWrapper' + cmp.fieldId).addClass('expand');
            }
           
        }

        var hideErrors = function () {
            $('#msgWrapper' + cmp.fieldId).removeClass('expand');
        }

        cmp.validate = function () {
            checkPatterns();
            checkErrors();
        }

        var checkPatterns = function () {
            check.specialChar = testPattern(constants[0].textPattern.special);
            check.LC = testPattern(constants[0].textPattern.alphaLower);
            check.UC = testPattern(constants[0].textPattern.alphaUpper);
            check.alphaOnly = (check.LC || check.UC) && (!check.specialChar);
            check.space = testPattern(constants[0].textPattern.whiteSpaces);
            check.digit = testPattern(constants[0].textPattern.digit);
            check.nonDigit = testPattern(constants[0].textPattern.nonDigit);
            check.empty = ($('#' + cmp.fieldId)[0].value.length == 0);
            (cmp.minLength) ? check.minLength = ($('#' + cmp.fieldId)[0].value.length >= parseInt(cmp.minLength)) : check.minLength = true;
            (cmp.maxLength) ? check.maxLength = ($('#' + cmp.fieldId)[0].value.length <= parseInt(cmp.maxLength)) : check.maxLength = true;
        }



        var checkErrors = function () {
            cmp.messages = [];
            success = false;
            danger = false;
            info = false;
            warning = false;
            if (cmp.testFor) {
                for (var x = 0; x < cmp.testFor.length; x++)
                {
                    var val = cmp.testFor.substr(x, 1);
                    switch (val) {
                        case 'C':
                            (check.specialChar) ? success = true : danger = true;
                            (check.specialChar) ?  null: cmp.messages.push("Special Character Required");
                            break;
                        case 'U':
                            (check.UC) ? success = true : danger = true;
                            (check.UC) ? success = true : cmp.messages.push("Uppercase Character Required");
                            break;
                        case 'L':
                            (check.LC) ? success = true : danger = true;
                            (check.LC) ? success = true : cmp.messages.push("Lower Character Required");
                            break;
                        case 'S':
                            (check.space) ? danger = true : null;
                            (check.space) ? cmp.messages.push("Space detected") : null;
                            break;
                        case 'D':
                            (check.digit) ? success = true : danger = true;
                            (check.digit) ? success = true : cmp.messages.push("Numeric Character Required");
                            break;
                        case 'N':
                            (check.nonDigit) ? success = true : danger = true;
                            (check.nonDigit) ? success = true : cmp.messages.push("Non-numeric Character Required");
                            break;
                        case 'R':
                            (check.empty) ? danger = true : success = true;
                            (check.empty) ? cmp.messages.push("Field Required") : success = true ;
                            break;
                        case 'M': // minlength 
                            (check.minLength) ? success = true : danger = true;
                            (check.minLength) ? success = true : cmp.messages.push("Min Length of " + cmp.minLength + " Required");
                            break;
                        case 'X': // maxlength
                            (check.maxLength) ? success = true : danger = true ;
                            (check.maxLength) ? success = true : cmp.messages.push("Exceeds Max Length of " + cmp.maxLength );
                            break;
                        case 'A':
                            (check.alphaOnly) ? success = true : danger = true;
                            (check.alphaOnly) ? success = true : cmp.messages.push("Alpha Only for this Field");
                        default:
                    }
                }
                cmp.msgType = "";
                (success && !danger) ? cmp.msgType = 'success' : null;
                (info && !danger) ? cmp.msgType = 'info' : null;
                (danger) ? cmp.msgType = 'danger' : null;
                
                
            }


        } 

        var testPattern = function (exp) {
            var pattern = new RegExp(exp);
            var ctrl = $('#' + cmp.fieldId)[0];
            var tmpStr = ctrl.value;
            return pattern.test(tmpStr);
        }

        var removeSpecialChars = function (txt) {
            var pattern = new RegExp(constants[0].textPattern.special);
            var tmp = txt;
            if (tmp) { tmp = tmp.replace(pattern, " "); };
            return tmp;
        }


        function initObject() {
            if (cmp.maxLength) { $('#' + cmp.fieldId).attr("maxLength", cmp.maxLength) }
            if (cmp.width) { $('#inputWrapper' + cmp.fieldId).css("width", cmp.width) }
            if (cmp.maxwidth) { $('#inputWrapper' + cmp.fieldId).css("max-width", cmp.maxwidth) }
            if (cmp.testFor.indexOf('R') > 0) {
                
                $('#inIcon' + cmp.fieldId).addClass("required");
                //cmp.msgType = "required";
            }

        }

        angular.element(document)
            .ready(function () {
                initObject();
            });
    }

    module.component('ewTextBox', {
        templateUrl: '/scripts/app/components/ewTextBox/ewTextBox.component.html',
        controllerAs: "cmp",
        bindings: {
            placeholder: '@',
            minLength: '@',
            maxLength: '@',
            msgType: '@',
            message: '@',
            type: '@',
            fieldId: '@',
            testFor: '@',
            labelIcon: '@',
            width: '@',
            maxwidth: '@'

        },
        controller: ['$scope', '$rootScope', '$location', 'constants', Controller]
    });

}());
;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope, $element, $interval, itemService) {

        var cmp = this;
        cmp.selectedData = [];
        cmp.footerLabel = 'More';
        cmp.expanded = false;

        var oListener = $rootScope.$on('removeFilter', function (evt, data) {
            cmp.deSelectMe(data);
        });
        
        $scope.$on('$destroy', oListener);

        var oAllListener = $rootScope.$on('removeAll', function (evt, data) {
            cmp.clearSelected(data.event);
        });

        $scope.$on('$destroy', oAllListener);

       

        cmp.selectMe = function (itm) {
            if (itm.key === cmp.key) {
                itm.selected = true;
                itm.checked = true;
                cmp.selectedData.push(itm);
                var list = $element[0].querySelector('.list');
                $(list).css('height', 'auto');

                //update the itemService with the filters****************************************************
                var exist = itemService.itemData.selectedFilters[cmp.key].filter(function (item) {
                    return item.id == itm.id;
                }).length > 0;
                if (!exist) { itm.checked = true; itemService.itemData.selectedFilters[cmp.key].push(itm) }
                //*******************************************************************************************
                $rootScope.$broadcast('filterSelected', { 'filterItem': itm, 'add': true });
            }
        };

        cmp.deSelectMe = function (itm) {
            if (itm.key === cmp.key) {
                itm.selected = false;
                itm.checked = false;
                var list = $element[0].querySelector('.list');
                $(list).css('height', 'auto');
                var index = cmp.selectedData.indexOf(itm);
                if (index > -1) {
                    cmp.selectedData.splice(index, 1);
                }
                var zeroList = itemService.itemData.selectedFilters[cmp.key].length > 0;
                zeroList ? itemService.removeFilterKey(itm) : null;
                $rootScope.$broadcast('filterSelected', { 'filterItem': itm, 'add': false });
            }

        };

        cmp.clearSelected = function (event) {
            cmp.cancel(event);
            cmp.selectedData = [];
            angular.forEach(cmp.data, function (value, key) {
                value.selected = false;
                value.checked = false;
            });
            $rootScope.$broadcast('clearedFilters', {
                'key': cmp.key
            });
        }
        cmp.cancel = function (event) {
            if (event) {
                event.cancelBubble = true;
                event.preventDefault();
                event.stopImmediatePropagation();
            }
        };

        cmp.showList = function (clear) {
                
                var list = $element[0].querySelector('.list');
                var title = $element[0].querySelector('.title');
                var h = $(list)[0].clientHeight;
                var sh = $(list)[0].scrollHeight;

                $(title).hasClass('show') ?
                    $(title).removeClass('show') :
                    $(title).addClass('show');

            if (cmp.key == 'b') {
                h == sh ?
                null :
                $(list).animate({ height: $(list)[0].scrollHeight + 'px' }, 200);
                return;
            }

                h == sh ?
                    $(list).animate({ height: 0 }, 200) :
                    $(list).animate({ height: $(list)[0].scrollHeight + 'px' }, 200);

                h == sh ?
                    cmp.expanded = false : cmp.expanded = true;

                h == sh ?
                    $(title).addClass('noBottom') : $(title).removeClass('noBottom');
        }

        cmp.expandList = function () {

            var list = $element[0].querySelector('.list');
            var title = $element[0].querySelector('.title');
            var h = $(list)[0].clientHeight;
            var sh = $(list)[0].scrollHeight;
            
                $(title).addClass('show');

            if (cmp.key == 'b') {
                $(list).height($(list)[0].scrollHeight);//({ height: $(list)[0].scrollHeight + 'px' }, 200);
                return;
            }

            h == sh ?
               null:
                $(list).animate({ height: $(list)[0].scrollHeight + 'px' }, 200);

            h == sh ?
                null : cmp.expanded = true;

            h == sh ?
               null : $(title).removeClass('noBottom');
        }
        cmp.ShowModalFilters = function () {
            $rootScope.$broadcast('modalListReady', {
                'modalList': cmp.data,
                'title': cmp.label,
                'orderByValue': cmp.orderByValue
            });
            $('#FiltersModal').modal('show');
        }
        // listeners *************************************************************************
        var modalListSelectedListener = $rootScope.$on('ModalListSelected', function (event, data) {
            if (data.filterItem.key == cmp.key) {
                (data.add) ? cmp.selectMe(data.filterItem) : cmp.deSelectMe(data.filterItem);
            }
        });

        $scope.$on('$destroy', modalListSelectedListener);

        var clearAllListener = $rootScope.$on('clearAll', function (event, data) {
            if (cmp.key != 'b') { cmp.clearSelected(); }
        });
        $scope.$on('$destroy', clearAllListener);

        var selectMeListener = $rootScope.$on('filterSelectMe', function (event, data) {
            if (data.item.key == cmp.key) {
                cmp.selectMe(data.item);
            };
        });
        $scope.$on('$destroy', selectMeListener);

        var deselectMeListener = $rootScope.$on('filterDeselectMe', function (event, data) {
            if (data.item.key == cmp.key) {
                cmp.deSelectMe(data.item);
            };
        });
        $scope.$on('$destroy', deselectMeListener);

        var showListListener = $rootScope.$on('showList', function (event, data) {
            cmp.selectedData.length > 0 ? cmp.expandList() : null;
            cmp.key === 't' ? cmp.expandList():null;
        });
        $scope.$on('$destroy', showListListener);


        var refreshListener = $rootScope.$on('filterRefresh', function (event, data) {
        });
        $scope.$on('$destroy', refreshListener);
        //************************************************************************************
        cmp.setModel = function () {
            $.each(cmp.data, function (key, value) {
                value.id = value.Key
                value.key = cmp.key;
                value.value = value.Value;
                value.checked = false;
                value.selected = false;
            });
            //
            $.each(itemService.itemData.selectedFilters[cmp.key], function (key, value) {
                var tmp = cmp.data.filter(function (item) {
                    if (value.id === item.id) {
                        item.checked = true;
                        item.selected = true;
                        return true;
                    }
                    
                });
                cmp.selectedData.push(tmp[0]);
            });
            //
        }
        cmp.$onInit = function () {
            cmp.setModel();
        };
        angular.element(document).ready(function () {
            cmp.expand === 'true' ? cmp.showList() : null;
        });
    }

    module.component('filters', {
        templateUrl: '/scripts/app/components/filters/filters.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            controlId: '@',
            label: '@',
            data: '<',
            amountShown: '@',
            expand: '@',
            key: '@'
        },
        controller: ['$scope',
            '$rootScope', '$element', '$interval', 'itemService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');
    function controller($rootScope, $scope, $location, $element, favoritesService, cartService, userService, constants, downloadItemService) {
        var cmp = this;
        cmp.product = MiniViewProduct();
        cmp.product.IsInCart = false;
        var check1 = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
        var check2 = /Mobi/.test(navigator.userAgent);
        cmp.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        cmp.clickThru = true;
        // Test for iPhone ******************************
        cmp.iphone = /iPhone/.test(navigator.userAgent);
        cmp.product.resolution = 'hd';
        // ******************************************************************


        cmp.IsIntegratedStore = $("body").hasClass("integratedStore");

        cmp.playThis = function (evt) {
            if (!(cmp.product.ProductId === null)) {
                if (!cmp.still && !cmp.collection) {
                    cmp.vp.src = constants[0].BaseUrl.videoBase + cmp.product.ProductId + '.mp4';
                    cmp.vp.muted = true;
                    cmp.vp.load();
                    cmp.vp.play();
                }
            }
        };
        cmp.stopThis = function (evt) {
            if (!(cmp.product.ProductId === null)) {
                cmp.vp.pause();
                if (!cmp.vp.playing) {
                    cmp.vp.load();
                }
            }
        };
        cmp.favoriteMe = function (id, evt) {
            if (evt) {
                evt.stopPropagation();
                evt.preventDefault();
                window.event.cancelBubble = true;
                evt.originalEvent.cancelBubble = true;
            }
            if (!(cmp.product.ProductId === null)) {
                if (userService.userData.loggedIn) {
                    favoritesService.setFavorites(cmp.product, !cmp.product.IsFavorite);
                }
                else {
                    userService.lastPageUrl = $location.url();
                    var url = '/account/login';
                    window.location.href = url;
                }
            }
        };

        cmp.addToCart = function (evt) {
            if (cmp.isIntegratedStore) {
                window.location.href = cmp.product.DetailUrl;
            }
            else {
                if (!(cmp.product.ProductId === null)) {
                    cartService.cartItem(cmp.product.CartDetailId, !cmp.product.IsInCart);
                }
                if (evt) {
                    evt.stopPropagation();
                    evt.preventDefault();
                    window.event.cancelBubble = true;
                    evt.originalEvent.cancelBubble = true;
                }
            }

        };
        cmp.showDownloadModal = function () {
            if (!(cmp.product.ProductId === null)) {
                $rootScope.$broadcast('downloadItemSet', { 'item': cmp.product });
            }
        };
        cmp.goUrl = function (evt) {
            if (evt !== undefined) {
                if (evt.button === 0) {
                    evt.originalEvent.cancelBubble = true;
                    window.event.cancelBubble = true;
                }
            }

            if (typeof (cmp.clickThru) === 'undefined') {
                cmp.clickThru = true;
            }

            if (cmp.clickThru) {
                var title = parseUrlTitle(cmp.product.Title);
                var url = cmp.product.DetailUrl + '/' + cmp.product.ProductId + '/' + cmp.product.Title;
                if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey) { window.location.href = url; }
            }
            else {
                evt.stopPropagation();
                evt.preventDefault();
                window.event.cancelBubble = true;
                evt.originalEvent.cancelBubble = true;
                cmp.showDownloadModal();
            }
        };
        cmp.setModel = function () {
            cmp.control = $element[0].querySelector('.miniView'); //wrapper
            cmp.wrapper = $element[0].querySelector('#descriptionWrapper'); //wrapper
            cmp.txt = $element[0].querySelector('#descriptionText'); //text
            cmp.more = $element[0].querySelector('#more'); //button
            cmp.vp = $element[0].querySelector("video[id^='preview']");
            var category = '';
            var typ = '';
            typ = cmp.product.TypeText;

            if (typ !== undefined) {
                switch (typ.toLowerCase()) {
                    case "motions":
                        category = "motion-backgrounds";
                        break;
                    case "minimovies":
                        category = "sermonvideos";
                        break;
                    case "sermon videos":
                        category = "sermonvideos";
                        break;
                    case "worship tracks":
                        category = "worshiptracks";
                        break;
                    case "countdowns":
                        category = "countdowns";
                        break;
                    default:
                        category = cmp.product.TypeText;
                }
            }
            cmp.product.DetailUrl = '/media/' + category + '/' + cmp.product.ProductId + '/' + parseUrlTitle(cmp.product.Title);
            cmp.product.ProducerUrl = '/media/producer/' + cmp.product.ProducerId + '/' + cmp.product.ProducerName;
            cmp.product.hd = cmp.product.MaxQuality > 2;
            cmp.product.sd = !cmp.product.hd;
            if (cmp.product.hd) { cmp.product.resolution = 'hd'; }
            if (cmp.product.sd) { cmp.product.resolution = 'sd'; }

            var chk = constants[0].ProductType.AllVideos;
            var chk_countdown = constants[0].ProductType.Countdown;
            var chk_motion = constants[0].ProductType.Motion;
            var chk_collection = constants[0].ProductType.Collection;
            var chk_still = constants[0].ProductType.Still;
            var chk_worshipTrack = constants[0].ProductType.WorshipTracks;

            cmp.product.video = (cmp.product.Type & chk) === cmp.product.Type;
            cmp.product.countdown = (cmp.product.Type & chk_countdown) === cmp.product.Type;
            cmp.product.motion = (cmp.product.Type & chk_motion) === cmp.product.Type;
            cmp.product.still = (cmp.product.Type & chk_still) === cmp.product.Type;
            cmp.product.collection = (cmp.product.Type & chk_collection) === cmp.product.Type;
            cmp.product.worshipTrack = (cmp.product.Type & chk_worshipTrack) === cmp.product.Type;

            if (cmp.product.still) { cmp.type = 'still'; }
            if (cmp.product.video) { cmp.type = 'sermon video'; }
            if (cmp.product.countdown) { cmp.type = 'countdown'; }
            if (cmp.product.motion) { cmp.type = 'motion'; }
            if (cmp.product.collection) { cmp.type = 'collection'; }
            if (cmp.product.worshipTrack) { cmp.type = 'worship track'; }

            cmp.product.bagIt = 'bagIt';
            if (cmp.product.IsInCart) { cmp.product.bagIt = 'checkout'; }
            if (cmp.product.IsDownloadable) { cmp.product.bagIt = 'downloadable'; }
            //***********************************************************************

            checkDescription();

        };
        //*************************************** from elipsis component

        cmp.overFlow = false;
        cmp.originalClientHeight = 0;
        cmp.originalScrollHeight = 0;
        cmp.controlHeight = 0;

        var checkDescription = function () {
            try {
                setHeight();
                var descriptionHeight = cmp.thmb.clientHeight - 50;
                var totalHeight = (Math.floor(descriptionHeight / 18)) * 18;

                totalHeight < 36 ? totalHeight = 36 : null;

                $(cmp.wrapper).css('max-height', totalHeight);

                cmp.overFlow = totalHeight < cmp.originalScrollHeight;
                cmp.overFlow ? $(cmp.txt).addClass('textFade') : $(cmp.txt).removeClass('textFade');
            } catch (e) {
                //console.log(e);
            }

        };

        function setHeight() {
            try {
                cmp.originalClientHeight = cmp.wrapper.clientHeight;
                cmp.originalScrollHeight = cmp.wrapper.scrollHeight;
            } catch (e) {
                //console.log(e);
            }

        };
        // Lisetners *************************************************************************
        var elementResizedListener = $rootScope.$on('elementResized', function (evt, data) {
            checkDescription();
        });
        $scope.$on('$destroy', elementResizedListener);

        $rootScope.$on('toggleLike', function (evt, data) {
            checkDescription();
        });
        // Lisetners *************************************************************************

        var cartRemoveListener = $rootScope.$on('cartRemove', function (evt, data) {
            if (data.item.CartDetailId === cmp.product.CartDetailId) { cmp.product.IsInCart = false; cmp.product.bagIt = 'bagIt'; }

        });
        $scope.$on('$destroy', cartRemoveListener);

        var cartAddListener = $rootScope.$on('cartAdd', function (evt, data) {
            if (data.item.CartDetailId === cmp.product.CartDetailId) { cmp.product.IsInCart = true; cmp.product.bagIt = 'checkout'; }

        });
        $scope.$on('$destroy', cartAddListener);

        var unfavoriteListener = $rootScope.$on('unfavorite', function (evt, data) {
            if (data.item.CartDetailId === cmp.product.CartDetailId) { cmp.product.IsFavorite = false; }
        });
        $scope.$on('$destroy', unfavoriteListener);

        var favoriteListener = $rootScope.$on('favorite', function (evt, data) {
            if (data.item.CartDetailId === cmp.product.CartDetailId) { cmp.product.IsFavorite = true; }
        });
        $scope.$on('$destroy', favoriteListener);

        var cartListener = $rootScope.$on('cartListReady', function (event, data) {
            cmp.checkCart();
        });

        $scope.$on('$destroy', cartListener);

        var favoriteReadyistener = $rootScope.$on('favoritesReady', function (event, data) {
            cmp.checkFavorites(data);
        });

        $scope.$on('$destroy', favoriteReadyistener);

        $scope.$watch('cmp.product', function (newVal, oldVal) {
            cmp.setModel();
        });

        //***********************************************************************************

        cmp.checkCart = function () {
            cmp.product.IsInCart = false;
            cmp.product.bagIt = 'bagIt';
            $.each(cartService.cartData, function (key, value) {
                $.each(value, function (subkey, subvalue) {
                    if (subkey === 'CartDetailId') {
                        cmp.product.CartDetailId === subvalue ? cmp.product.IsInCart = true : null;
                    }
                });
            });
            if (cmp.product.IsInCart) { cmp.product.bagIt = 'checkout'; }
        };

        cmp.checkFavorites = function (data) {
            cmp.product.IsFavorite = false;
            $.each(data, function (key, value) {
                $.each(value, function (subkey, subvalue) {
                    if (subkey === 'CartDetailId') {
                        cmp.product.CartDetailId === subvalue ? cmp.product.IsFavorite = true : null;
                    }
                });
            });
        };
        cmp.bagItIcon = function () {
            var rtrn = 'bagIt';
            if (cmp.product.IsInCart) { rtrn = 'checkout'; }
            if (cmp.product.IsDownloadable) { rtrn = 'downloadable'; }
            //console.log(rtrn);
            return rtrn;
        };
        cmp.$onInit = function () {
            cmp.control = $element[0].querySelector('.miniView'); //wrapper
            cmp.vp = $element[0].querySelector("video[id^='preview']");
            cmp.thmb = $element[0].querySelector(".thumb");
            cmp.product.bagIt = 'bagIt';
            if (cmp.product.IsInCart) { cmp.product.bagIt = 'checkout'; }
            if (cmp.product.IsDownloadable) { cmp.product.bagIt = 'downloadable'; }
            checkDescription();
        };

        angular.element(document)
            .ready(function () {
                cmp.setModel();
            });

    }


    module.component('miniView', {
        templateUrl: '/scripts/app/components/miniView/miniView.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            'product': '<',
            'thumbImage': '@',
            'primaryClass': '@',
            'overlayClass': '@',
            'videoClass': '@',
            'isMac': '<'
        },
        controller: ['$rootScope', '$scope', '$location', '$element', 'favoritesService', 'cartService', 'userService', 'constants', 'downloadItemService', controller]
    });

}());;
var MiniViewProduct = function () {

    var tmp = {
        archive_price: 0,
        aspect_ratio: 0.0,
        description: "",
        duration: "",
        minutes: "",
        seconds:"",
        filesize: 0,
        height: 0,
        is_seasonal: 0,
        meta_desc: "",
        price: 0,
        producer_id: 0,
        producer_name: "",
        product_id: 0,
        product_type: 0,
        product_type_desc: "",
        quality_text: "",
        quality_bit: "",
        retail_price: 0,
        title: "",
        topic_id: 0,
        view_count: 0,
        width: 0,
        video: false,
        still: false,
        hd: false,
        sd: false,
        isFavorite: false,
        isDownloadable: false,
        isInCart: false,
        resolution: '',
        sale_price: 0,
        bagIt: 'bagIt',
        checkout_price: 0,
        max_price: 0,
        category_id: 0
    };
    return tmp;
};;
(function () {
    "use strict";
    var module = angular.module('softouch');
    function controller($rootScope, $scope, $location, $element, favoritesService, cartService, userService, constants, downloadItemService) {
        var cmp = this;
        cmp.model = MiniViewProduct();
        cmp.model.isInCart = false;
        var check1 = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
        var check2 = /Mobi/.test(navigator.userAgent);
        cmp.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        // Test for iPhone ******************************
        cmp.iphone = /iPhone/.test(navigator.userAgent);
        // ******************************************************************


        cmp.isIntegratedStore = $("body").hasClass("integratedStore");
       

        cmp.playThis = function (evt) {
            if (!(cmp.model.product_id === null)) {
                if (!cmp.model.still && !cmp.model.collection) {
                    cmp.vp.src = constants[0].BaseUrl.videoBase + cmp.model.product_id + '.mp4';
                    cmp.vp.muted = true;
                    cmp.vp.load();
                    cmp.vp.play();
                }
            }
        };
        cmp.stopThis = function (evt) {
            if (!(cmp.model.product_id === null)) {
                cmp.vp.pause();
                if (!cmp.vp.playing) {
                    cmp.vp.load();
                }
            }
        };
        cmp.favoriteMe = function () {
            if (!(cmp.model.product_id === null)) {
                if (userService.userData.loggedIn) {
                    console.log(cmp.model);
                    favoritesService.setFavorites(cmp.model, !cmp.model.isFavorite);
                }
                else {
                    userService.lastPageUrl = $location.url();
                    var url = '/account/login';
                    window.location.href = url;
                }
            }
        };

        cmp.addToCart = function (evt) {
            if (cmp.isIntegratedStore) {
                window.location.href = cmp.model.detail_url;
            }
            else {
                if (!(cmp.model.product_id === null)) {
                    cartService.cartItem(cmp.model.detail_id, !cmp.model.isInCart);
                }
                if (evt) {
                    evt.stopPropagation();
                    evt.preventDefault();
                    window.event.cancelBubble = true;
                    evt.originalEvent.cancelBubble = true;
                }
            }

        };
        cmp.showDownloadModal = function () {
            if (!(cmp.model.product_id === null)) {
                $rootScope.$broadcast('downloadItemSet', { 'item': cmp.model });
            }
        };
        cmp.goUrl = function (evt) {
            if (evt !== undefined) {
                if (evt.button === 0) {
                    evt.originalEvent.cancelBubble = true;
                    window.event.cancelBubble = true;
                }
            }

            if (typeof (cmp.clickThru) === 'undefined') {
                cmp.clickThru = true;
            }

            if (cmp.clickThru) {
                var title = parseUrlTitle(cmp.model.title);
                var url = cmp.model.detail_url + '/' + cmp.model.product_id + '/' + cmp.model.title;
                if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey) { window.location.href = url; }
            }
            else {
                evt.stopPropagation();
                evt.preventDefault();
                window.event.cancelBubble = true;
                evt.originalEvent.cancelBubble = true;
                cmp.showDownloadModal();
            }
        };
        cmp.setModel = function () {
            $.each(cmp.product, function (key, value) {
                cmp.model[key] = value;
                if (key == 'discount') {
                    (value) ? cmp.model.sale_price = Math.round(cmp.product.price - (cmp.product.price * (value / 100)), 2) : cmp.model.sale_price = 0;
                }
            });

            var category = '';

            switch (cmp.model.product_type_desc.toLowerCase()) {
                case "motions":
                    category = "motion-backgrounds";
                    break;
                case "minimovies":
                    category = "sermonvideos";
                    break;
                case "sermon videos":
                    category = "sermonvideos";
                    break;
                case "worship tracks":
                    category = "worshiptracks";
                    break;
                case "countdowns":
                    category = "countdowns";
                    break;
                default:
                    category = cmp.model.product_type_desc;
            }

            cmp.model.detail_url = '/media/' + category + '/' + cmp.model.product_id + '/' + parseUrlTitle(cmp.model.title);
            cmp.model.producer_url = '/media/producer/' + cmp.model.producer_id + '/' + cmp.model.producer_name;
            cmp.model.max_price = cmp.model.price;
            cmp.model.checkout_price = cmp.model.sale_price > 0 ? cmp.model.sale_price : cmp.model.price;
            cmp.model.hd = cmp.model.quality_bit > 2;
            cmp.model.sd = !cmp.model.hd;
            if (cmp.model.hd) { cmp.model.resolution = 'hd'; }
            if (cmp.model.sd) { cmp.model.resolution = 'sd'; }

            if (cmp.model.duration) {
                var dur = cmp.model.duration.split(':');
                dur.length > 0 ? cmp.model.minutes = parseInt(dur[1]) : 0;
                dur.length > 1 ? cmp.model.seconds = parseInt(dur[2]) : 0;
            }
            
        };

        //*************************************** from elipsis component

        cmp.overFlow = false;
        cmp.originalClientHeight = 0;
        cmp.originalScrollHeight = 0;
        cmp.controlHeight = 0;

        var checkDescription = function () {
            setHeight();
            var descriptionHeight = cmp.thmb.clientHeight - 50;
            var totalHeight = (Math.floor(descriptionHeight / 18)) * 18;

            totalHeight < 36 ? totalHeight = 36 : null;

            $(cmp.wrapper).css('max-height', totalHeight);

            cmp.overFlow = totalHeight < cmp.originalScrollHeight;
            cmp.overFlow ? $(cmp.txt).addClass('textFade') : $(cmp.txt).removeClass('textFade');
        };


        function setHeight() {
            cmp.originalClientHeight = cmp.wrapper.clientHeight;
            cmp.originalScrollHeight = cmp.wrapper.scrollHeight;
        };
        // Lisetners *************************************************************************
        var elementResizedListener = $rootScope.$on('elementResized', function (evt, data) {
            setTimeout(function () {
                checkDescription();
            }, 200);
            
        });
        $scope.$on('$destroy', elementResizedListener);

        $rootScope.$on('toggleLike', function (evt, data) { 
            checkDescription();
        });

        var cartRemoveListener = $rootScope.$on('cartRemove', function (evt, data) {
            if (data.item.CartDetailId === cmp.model.CartDetailId) { cmp.model.isInCart = false; cmp.model.bagIt = 'bagIt'; }

        });
        $scope.$on('$destroy', cartRemoveListener);

        var cartAddListener = $rootScope.$on('cartAdd', function (evt, data) {
            //console.log("cart add called");
            //if (data.item.CartDetailId === cmp.model.CartDetailId) { cmp.model.isInCart = true; cmp.model.bagIt = 'checkout'; }
            checkCart();

        });
        $scope.$on('$destroy', cartAddListener);

        var unfavoriteListener = $rootScope.$on('unfavorite', function (evt, data) {
            if (data.item.product_id === cmp.model.product_id) { cmp.model.isFavorite = false; }
        });
        $scope.$on('$destroy', unfavoriteListener);

        var favoriteListener = $rootScope.$on('favorite', function (evt, data) {
            console.log({ data: data.item });
            console.log({ model: cmp.model });
            //console.log({ dataFavID: data.item.CartDetailId });
            //console.log({ modelFavID: cmp.model.CartDetailId });
            if (data.item.product_id === cmp.model.product_id) { cmp.model.isFavorite = true; }
        });
        $scope.$on('$destroy', favoriteListener);

        var cartListener = $rootScope.$on('cartListReady', function (event, data) {
            cmp.checkCart();
        });

        $scope.$on('$destroy', cartListener);

        var favoriteReadyistener = $rootScope.$on('favoritesReady', function (event, data) {
            cmp.checkFavorites(data);
        });

        $scope.$on('$destroy', favoriteReadyistener);

        $scope.$watch('cmp.product', function (newVal, oldVal) {
            cmp.setModel();
        });

        //***********************************************************************************

        cmp.checkCart = function () {
            cmp.model.isInCart = false;
            cmp.model.bagIt = 'bagIt';
            $.each(cartService.cartData, function (key, value) {
                $.each(value, function (subkey, subvalue) {
                    if (subkey === 'CartDetailId') {
                        cmp.model.detail_id === subvalue ? cmp.model.isInCart = true : null;
                    }
                });
            });
            if (cmp.model.isInCart) { cmp.model.bagIt = 'checkout'; }
        };

        cmp.checkFavorites = function (data) {
            cmp.model.isFavorite = false;
            $.each(data, function (key, value) {
                $.each(value, function (subkey, subvalue) {
                    if (subkey === 'CartDetailId') {
                        cmp.model.detail_id === subvalue ? cmp.model.isFavorite = true : null;
                    }
                });
            });
        };

        cmp.$onInit = function () {
            cmp.setModel();

            var chk = constants[0].ProductType.AllVideos;
            var chk_countdown = constants[0].ProductType.Countdown;
            var chk_motion = constants[0].ProductType.Motion;
            var chk_collection = constants[0].ProductType.Collection;
            var chk_still = constants[0].ProductType.Still;

            cmp.model.video = (cmp.model.type & chk) === cmp.model.type;
            cmp.model.countdown = (cmp.model.type & chk_countdown) === cmp.model.type;
            cmp.model.motion = (cmp.model.type & chk_motion) === cmp.model.type;
            cmp.model.still = (cmp.model.type & chk_still) === cmp.model.type;
            cmp.model.collection = (cmp.model.type & chk_collection) === cmp.model.type;

            if (cmp.model.still) { cmp.type = 'still'; }
            if (cmp.model.video) { cmp.type = 'video'; }
            if (cmp.model.countdown) { cmp.type = 'countdown'; }
            if (cmp.model.motion) { cmp.type = 'motion'; }
            if (cmp.model.collection) { cmp.type = 'collection'; }

            //if (cmp.model.CollectionItemProductIds) {
            //    if (cmp.model.CollectionItemProductIds.length > 0) { cmp.model.type = 'collection'; }
            //}

            cmp.model.bagIt = 'bagIt';
            if (cmp.model.isInCart) { cmp.model.bagIt = 'checkout'; }
            if (cmp.model.isDownloadable) { cmp.model.bagIt = 'downloadable'; }
        };
        function initComponent() {
            cmp.control = $element[0].querySelector('.miniView'); //wrapper
            cmp.wrapper = $element[0].querySelector('#descriptionWrapper'); //wrapper
            cmp.txt = $element[0].querySelector('#descriptionText'); //text
            cmp.more = $element[0].querySelector('#more'); //button
            cmp.vp = $element[0].querySelector("video[id^='preview']");
            cmp.thmb = $element[0].querySelector(".thumb");
            checkDescription();

            $($element[0].querySelector("#preview" + cmp.model.product_id)).attr("poster", cmp.thumbImage);
            $($element[0].querySelector("#imagePreview" + cmp.model.product_id)).attr("src", cmp.thumbImage);
        }

        angular.element(document)
            .ready(function () {
                initComponent();
            });

    }


    module.component('miniViewR2', {
        templateUrl: '/scripts/app/components/miniViewR2/miniViewR2.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            'product': '<',
            'thumbImage': '@',
            'primaryClass': '@',
            'overlayClass': '@',
            'videoClass': '@',
            'isMac': '<'
        },
        controller: ['$rootScope', '$scope', '$location', '$element', 'favoritesService', 'cartService', 'userService', 'constants', 'downloadItemService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope) {
        var cmp = this;
        window.peekMe = cmp;
        cmp.data = { overFlow: false};
        var originalClientHeight = 0;
        var scrollHeight = 0;
        var clientHeight = 0;
        
        var checkDescription = function (fromWhere) {
            //console.log("checkDescription", fromWhere);
            setHeight();
            cmp.data.overFlow = originalClientHeight < scrollHeight;
            if (clientHeight < scrollHeight) {
                $('#more').html('See More');
            }
            if (clientHeight == scrollHeight) {
                $('#more').html('See Less');
            }
            //console.log("data.overFlow=", cmp.data.overFlow);
        };

        function setHeight() {
            scrollHeight = $('#descriptionWrapper')[0].scrollHeight;
            clientHeight = $("#descriptionWrapper")[0].clientHeight;
        }

        function setInitialHeight() {
            originalClientHeight = $("#descriptionWrapper")[0].clientHeight;
        }

        cmp.showMoreDescription = function () {
            if ($('#descriptionWrapper').hasClass('more')) {
                $('#descriptionWrapper').removeClass('more');
                $('#more').html('See More');
            }
            else {
                $('#descriptionWrapper').addClass('more');
                $('#more').html('See Less');
            }
        };

        $rootScope.$on('elementResized', function (evt, data) {
            checkDescription("resized");
			$scope.$apply();
        });

        $scope.$watch('cmp.description', function (newVal, oldVal) {
            //console.log("description updated");
            setTimeout(function () {
                setInitialHeight("watch");
                checkDescription("watch");
            }, 500);
        });

        angular.element(document)
            .ready(function () {
                checkDescription("ready");
            });

    }

    module.component('moreBox', {
        templateUrl: '/scripts/app/components/moreBox/moreBox.component.html',
        controllerAs: "cmp",
        bindings: { description: '@', tags :'=', list: '<' },
        controller: ['$scope', '$rootScope', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope) {
        var cmp = this;
        window.peekMore = this;

        cmp.overFlowList = {};
        var originalClientHeight = 0;
        var originalScrollHeight = 0;

        var checkDescription = function () {
            if (cmp.tagData === undefined || cmp.tagData.length === undefined)
                return;

            var tmp = "<p class='details-list-label'>Tags:</p>";

            cmp.tagData.forEach(function (tag) {
                tmp += "<a class='details-list-itm'href='/media/tag/" + tag.Id + "/" + removeSpecialChars(tag.Name) + "'>" + tag.Name + "</a>";
            });

            //console.log("tagData", cmp.tagData);

            $('#emptyList' + cmp.controlId).html(tmp);

            setHeight();

            cmp.overFlowList.value = ((originalClientHeight + 1) < originalScrollHeight);
        };

        cmp.handleTagClick = function (id) {
            var tag = cmp.tagData.filter(function (itm, idx) { return itm.Id == id; });
            cmp.tagSearch(tag[0]);
        };

        cmp.tagSearch = function (tag) {
            window.location.href = "/media/search/#/s/" + tag.id + '/' + parseUrlTitle(tag.Name);
        };

        cmp.showMoreDescriptionList = function () {
            if ($('#descriptionWrapperList').hasClass('more')) {
                $('#descriptionWrapperList').removeClass('more');
                $('#moreList').html('See More');
            }
            else {
                $('#descriptionWrapperList').addClass('more');
                $('#moreList').html('See Less');
            }
        };

        var elementResizedListener = $rootScope.$on('elementResized', function (evt, data) {
            checkDescription();
        });
        $scope.$on('$destroy', elementResizedListener);

        $scope.$watch('cmp.tagData', function (newVal, oldVal) { checkDescription(); });

        function setHeight() {
            originalClientHeight = $("#descriptionWrapperList")[0].clientHeight;
            originalScrollHeight = $('#descriptionWrapperList')[0].scrollHeight;
        }

        $scope.$watch('cmp.tagData', function (newVal, oldVal) {
            checkDescription();
        });

        angular.element(document)
            .ready(function () {
                checkDescription();
            });
    }

    module.component('moreBoxListStyle', {
        templateUrl: '/scripts/app/components/moreBox/moreBoxListStyle.component.html',
        controllerAs: "cmp",
        bindings: { description: '@', tagData: '=', controlId: '@' },
        controller: ['$scope', '$rootScope', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');
    function controller($http, $rootScope, $sce, $element, $timeout, $scope, $location, favoritesService, cartService, userService, constants, downloadItemService) {
        window.itemPrev = this;
        var cmp = this;
        var maxChar = 50;
        cmp.baseUrl = '';
        cmp.imgSrc = '';
        var check1 = (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
        var check2 = (/Mobi/.test(navigator.userAgent));

        cmp.$postLink = function () {
            $timeout(function () {
                if (cmp.previewItem.ProductId > 0) {
                    var poster = cmp.baseUrl + cmp.previewItem.ProductId + '.jpg';

                    $("#imagePreview" + cmp.previewItem.ProductId).css("background", "url(" + poster + ") center no - repeat");
                    $("#preview" + cmp.previewItem.ProductId).attr("poster", poster);
                }
                $rootScope.$broadcast('componentLoaded', { 'id': cmp.previewItem.ProductId });
            });

        };
        cmp.isMobile = check1 || check1;

        cmp.isIntegratedStore = $("body").hasClass("integratedStore");

        // Events to watch for
        // ****************************************************************************************
        var loggedInListener = $rootScope.$on('loggedIn', function (evt, data) {
            //(userService.userData.loggedIn) ? cmp.iconsFav = 'visible' : cmp.iconsFav = 'hidden';
        });
        $scope.$on('$destroy', loggedInListener);

        var loggedOutListener = $rootScope.$on('loggedOut', function (evt, data) {
            //(userService.userData.loggedIn) ? cmp.iconsFav = 'visible' : cmp.iconsFav = 'hidden';
        });
        $scope.$on('$destroy', loggedOutListener);

        var cartRemoveListener = $rootScope.$on('cartRemove', function (evt, data) {
            if (data.item.CartDetailId === cmp.previewItem.CartDetailId) { cmp.previewItem.IsInCart = false; }
        });
        $scope.$on('$destroy', cartRemoveListener);

        var cartAddListener = $rootScope.$on('cartAdd', function (evt, data) {
            if (data.item.CartDetailId === cmp.previewItem.CartDetailId) { cmp.previewItem.IsInCart = true; }
        });
        $scope.$on('$destroy', cartAddListener);

        var unfavoriteListener = $rootScope.$on('unfavorite', function (evt, data) {
            if (data.item.CartDetailId === cmp.previewItem.CartDetailId) { cmp.previewItem.IsFavorite = false; }
        });
        $scope.$on('$destroy', unfavoriteListener);

        var favoriteListener = $rootScope.$on('favorite', function (evt, data) {
            if (data.item.CartDetailId === cmp.previewItem.CartDetailId) { cmp.previewItem.IsFavorite = true; }
        });
        $scope.$on('$destroy', favoriteListener);

        // ****************************************************************************************

        function addReturn(description) {
            var rtrnString = "";
            var wordArray = description.split(" ");
            var lineNum = 0;
            var oldLIneNum = 0;
            for (var x = 0; x < wordArray.length; x++) {
                lineNum = Math.floor(rtrnString.length / maxChar);

                if (lineNum > oldLIneNum) {
                    oldLIneNum = lineNum;
                    rtrnString += "\r\n";
                    rtrnString += wordArray[x];
                }
                else {
                    rtrnString += " " + wordArray[x];
                }
            }
            if (rtrnString.length < 2) { rtrnString = ""; }
            return rtrnString;
        }

        cmp.previewMouseOver = function (elm) {
            var value = constants[0].BaseUrl.videoBase + cmp.previewItem.ProductId + '.mp4';
            if ((typeof (cmp.prev) == 'undefined')) cmp.prev = true;
            if (cmp.prev) {
                try {
                    if (!(check1 || check2)) {
                        if (cmp.video) {
                            cmp.selectedVideoId = '#preview' + cmp.previewItem.ProductId;
                            cmp.videoSrc = (value);
                            $(cmp.selectedVideoId)[0].src = cmp.videoSrc;
                            $(cmp.selectedVideoId)[0].load();
                            $(cmp.selectedVideoId)[0].play();
                        }
                    }
                }
                catch (e) {

                }
            }

        };
        cmp.previewMouseout = function () {
            try {
                if (cmp.video) {
                    $(cmp.selectedVideoId)[0].pause();
                    if (!$(cmp.selectedVideoId)[0].playing) {
                        $(cmp.selectedVideoId)[0].load();
                    }
                }
            }
            catch (e) {
                console.log(e.message);
            }
        };


        cmp.favoriteMe = function () {
            if (userService.userData.loggedIn) {
                favoritesService.setFavorites(cmp.previewItem, !cmp.previewItem.IsFavorite);
            }
            else {
                userService.lastPageUrl = $location.url();
                var url = '/account/login';
                window.location.href = url;
            }
        };

        cmp.addToCart = function () {
            cartService.cartIt(cmp.previewItem, !cmp.previewItem.IsInCart);
        };

        cmp.showIcons = function (elm) {
            if (cmp.icn == 'none') { return; }
            if (!(check1 || check2)) {
                cmp.iconsCart = 'show';
            }
            if ((typeof (cmp.icn) == 'undefined')) cmp.icn = 'all';
            switch (cmp.icn) {
                case 'none':
                    hideBoth();
                    break;
                case 'favorite':
                    cmp.iconsCart = 'hide';
                    cmp.iconsFav = 'show';
                    break;
                case 'cart':
                    cmp.iconsCart = 'show';
                    cmp.iconsFav = 'hide';
                    break;
                case 'all':
                    showBoth();
                    break;

            }
        };

        cmp.hideIcons = function (elm) {
            hideBoth();
        };
        cmp.showContext = function (i) {

        };

        cmp.goUrl = function (evt) {
            if (evt !== undefined) {
                if (evt.button === 0) {
                    evt.originalEvent.cancelBubble = true;
                    window.event.cancelBubble = true;
                }
            }

            if (typeof (cmp.clickThru) == 'undefined') {
                cmp.clickThru = true;
            }

            if (cmp.clickThru) {
                var title = parseUrlTitle(cmp.previewItem.Title);
                var url = cmp.previewItem.DetailUrl + '/' + cmp.previewItem.ProductId + '/' + title;
                if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey) { window.location.href = url; }
            }
            else {
                evt.stopPropagation();
                evt.preventDefault();
                window.event.cancelBubble = true;
                evt.originalEvent.cancelBubble = true;
                cmp.showDownloadModal();
            }
        };

        cmp.showDownloadModal = function () {
            $rootScope.$broadcast('downloadItemSet', { 'item': cmp.previewItem });
        };

        cmp.goProducer = function () {
            if (typeof (cmp.clickThru) == 'undefined') {
                var url = '/producers/' + cmp.previewItem.ProducerId + '/' + cmp.previewItem.ProducerName;
                $location.path(url, true);
            }
        };

        cmp.send = function () {

        };

        var showBoth = function () {
            cmp.iconsCart = 'show';
            cmp.iconsFav = 'show';
        };
        var hideBoth = function () {
            if (cmp.previewItem.IsFavorite || cmp.previewItem.IsInCart) {
                showBoth();
            } else {
                cmp.iconsCart = 'hide';
                cmp.iconsFav = 'hide';
            }
        };
        cmp.$onInit = function () {
            cmp.baseUrl = constants[0].BaseUrl.previewImage_thumbnails;
            cmp.imgSrc = cmp.baseUrl + cmp.previewItem.ProductId + '.jpg';
            cmp.description = addReturn(cmp.previewItem.Description);
            (cmp.previewItem.IsFavorite || cmp.previewItem.IsInCart) ? showBoth() : hideBoth();
            var chk = constants[0].ProductType.AllVideos;
            cmp.video = ((cmp.previewItem.Type & chk) == cmp.previewItem.Type);
            cmp.still = (cmp.previewItem.Type === 64);
            cmp.hd = (cmp.previewItem.MaxQuality > 2);
            cmp.sd = (!cmp.hd);

            if (cmp.previewItem.ProductId > 0) {
                var poster = cmp.baseUrl + cmp.previewItem.ProductId + '.jpg';
                $("#imagePreview" + cmp.previewItem.ProductId).css("background", "url(" + poster + ") center no - repeat");
                $("#preview" + cmp.previewItem.ProductId).attr("poster", cmp.poster);
            }
        };

        $scope.fadeIconIn = function (elm) {
            $(elm.target).find("div").each(function (idx, itm) {
                $(itm).stop(true, true).animate({ opacity: "1" }, 300);
            });
        };
        $scope.fadeIconOut = function (elm) {
            $(elm.target).find("div").each(function (idx, itm) {
                $(itm).stop(true, true).animate({ opacity: ".7" }, 300);
            });
        };
    }

    module.component('itemPreview', {
        templateUrl: '/scripts/app/components/preview/itempreview.component.html',
        controllerAs: "cmp",
        bindings: { 'previewItem': '<', 'prev': '<', 'icn': '@', 'clickThru': '<' },
        controller: ['$http', '$rootScope', '$sce', '$element', '$timeout', '$scope', '$location', 'favoritesService', 'cartService', 'userService', 'constants', 'downloadItemService', controller]
    });

}());;
(function () {
    "use strict";
    function controller($scope, $rootScope, listService) {
        var cmp = this;
        window.peekSearch = cmp;
        cmp.search = {};
        cmp.search.phrase = "";
        cmp.selectedItem = {};
        cmp.$onInit = function () {
            if (!cmp.placeholder) {
                cmp.placeholder = 'Search Media';
            }
        };
        cmp.dropList = {};

        // Test what version of browser we are
        var ff = /Firefox/.test(navigator.userAgent);
        var edge = /Edge/.test(navigator.userAgent);
        var chrome = /Chrome/.test(navigator.userAgent);
        var safari = /Safari/.test(navigator.userAgent) && !chrome;
        var ie = /.NET/.test(navigator.userAgent);

        if (ff) { cmp.arrowStyle = 'ff'; }
        if (chrome) { cmp.arrowStyle = 'chrome'; }
        if (safari) { cmp.arrowStyle = 'safari'; }
        if (ie) { cmp.arrowStyle = 'ie'; }
        if (edge) { cmp.arrowStyle = 'edge'; }

        cmp.menuOpen = false;

        cmp.cancel = function (event) {
            event.cancelBubble = true;
            event.preventDefault();
            event.stopImmediatePropagation();
        };

        cmp.selectMe = function (itm, event) {
            cmp.cancel(event);
            cmp.closeAllSelectMenus();
            cmp.selectedItem = itm;
        };

        cmp.dropdown = function (event) {
            cmp.cancel(event);
            cmp.menuOpen = $("#menu" + cmp.controlId).hasClass('open');
            cmp.closeAllSelectMenus();
            if (!cmp.menuOpen) {
                cmp.openMenu();
            }
        };

        cmp.closeAllSelectMenus = function () {
            $(".menu").removeClass('open');
        };

        cmp.openMenu = function () {
            $("#menu" + cmp.controlId).addClass('open');
        };

        cmp.controllerListener = $rootScope.$on('bodyClick', function (evt, data) {
                $("#menu" + cmp.controlId).removeClass('open');
                cmp.menuOpen = false;
        });
        $scope.$on('$destroy', cmp.controllerListener);

        cmp.keysearch = function (evt) {
            if (evt != undefined) {
                if (evt.key === 'Enter') {
                    cmp.search.phrase != '' ? searchIt() : null;
                } else if (evt.key === 'Escape') {
                    toggleBodyCover();
                }
            } else {
                searchIt();
            }
        };

        var searchIt = function () {
            if (cmp.search.phrase == '') { return false; }

            cmp.search.phrase = cmp.search.phrase.replace(/[^a-zA-Z0-9 ']/g, "");

            var typeParam = "";

            if (cmp.selectedItem.url !== undefined) {
                typeParam = cmp.selectedItem.url;
            }
            
            window.location.href = "/media/search/" + cmp.search.phrase + typeParam;
        };

        cmp.dropList = listService.getStaticList('search');
        cmp.selectedItem = cmp.dropList[0];
    }

    angular.module('softouch').component('searchbar', {
        templateUrl: '/scripts/app/components/searchbar/searchbar.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            searchLook: '@',
            listType: '@',
            customStyle: '@',
            controlId: '@',
            textColor: '@',
            placeholder: '@'
        },
        controller: ["$scope", '$rootScope', 'listService', controller]
    });

}());
;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope, listService) {
        var cmp = this;
        cmp.browserStyle = '';
        cmp.$onInit = function () {
            
        };

        cmp.selectFromList = function () {
            var tmp = cmp.dropList.filter(function (item) {
                return item.id == cmp.selectedItem.id;
            });
            (tmp.length > 0) ? cmp.selectedItem = tmp[0] : null;
        }

        //if (cmp.dropList) { (cmp.dropList.length > 0) ? cmp.selectedItem = cmp.dropList[0] : null };

        // Test what version of browser we are
        var ff = (/Firefox/.test(navigator.userAgent));
        var edge = (/Edge/.test(navigator.userAgent));
        var chrome = ((/Chrome/.test(navigator.userAgent)));
        var safari = ((/Safari/.test(navigator.userAgent)) && !chrome);
        var ie = (/.NET/.test(navigator.userAgent));

        if (ff) { cmp.browserStyle = 'ff'; };
        if (chrome) { cmp.browserStyle = 'chrome'; };
        if (safari) { cmp.browserStyle = 'safari'; };
        if (ie) { cmp.browserStyle = 'ie'; };
        if (edge) { cmp.browserStyle = 'edge'; };

        cmp.menuOpen = false;

        cmp.cancel = function (event) {
            event.cancelBubble = true;
            event.preventDefault();
            event.stopImmediatePropagation();
        };

        cmp.selectMe = function (itm, event) {
            cmp.cancel(event);
            cmp.selectedItem = itm;
            $rootScope.$broadcast('itemSelected', { item: itm, controlId: cmp.controlId });
            cmp.closeAllSelectMenus();
        }

        cmp.dropdown = function (event) {
            cmp.cancel(event);
            $('.flyout').addClass('hide'); 
            cmp.mnuOpen = $("#menu" + cmp.controlId).hasClass('open');
            cmp.closeAllSelectMenus();
            if (!cmp.mnuOpen) {
                cmp.openMenu();
            };
        }

        cmp.closeAllSelectMenus = function () {
            $(".menu").removeClass('open');
        };

        cmp.openMenu = function () {
            $("#menu" + cmp.controlId).addClass('open');
        };

        cmp.controllerListener = $rootScope.$on('bodyClick', function (evt, data) {
            if ($("#menu" + cmp.controlId).hasClass('open')) {
                $("#menu" + cmp.controlId).removeClass('open');
                cmp.menuOpen = false;
            }
            
        });
        $scope.$on('$destroy', cmp.controllerListener);

        angular.element(document).ready(function () {
            if (!cmp.dropList) {
                cmp.dropList = listService.getStaticList(cmp.listType);
                (cmp.selectedItem) ? cmp.selectFromList() : cmp.selectedItem = cmp.dropList[0];
            }
            else {
                if (cmp.dropList.length > 0) {
                    (cmp.selectedItem) ? cmp.selectFromList() : cmp.selectedItem = cmp.dropList[0];
                }
            }
        });

    }

    module.component('orderSelect', {
        templateUrl: '/scripts/app/components/select/select.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            listType: '@',
            customStyle: '@',
            dropList: '<',
            controlId: '@',
            textColor: '@',
            selectedItem: '='
        },              
        controller: ['$scope',
            '$rootScope',
            'listService', controller]
    });

}());;
(function () {
    
    function controller($rootScope, listService) {
        var cmp = this;

        cmp.browserStyle = '';
        cmp.menuOpen = false;
        
        // Test what version of browser we are
        var ff = /Firefox/.test(navigator.userAgent);
        var edge = /Edge/.test(navigator.userAgent);
        var chrome = /Chrome/.test(navigator.userAgent);
        var safari = /Safari/.test(navigator.userAgent) && !chrome;
        var ie = /.NET/.test(navigator.userAgent);

        if (ff) { cmp.browserStyle = 'ff'; }
        if (chrome) { cmp.browserStyle = 'chrome'; }
        if (safari) { cmp.browserStyle = 'safari'; }
        if (ie) { cmp.browserStyle = 'ie'; }
        if (edge) { cmp.browserStyle = 'edge'; }

        cmp.selectFromList = function () {
            var tmp = cmp.dropList.filter(function (item) {
                return item.id == cmp.selectedItem.id;
            });
            tmp.length > 0 ? cmp.selectedItem = tmp[0] : null;
        };

        cmp.cancel = function (event) {
            event.cancelBubble = true;
            event.preventDefault();
            event.stopImmediatePropagation();
        };

        cmp.selectMe = function (itm, event) {
            cmp.cancel(event);
            cmp.selectedItem = itm;
            $rootScope.$broadcast('itemSelected', { item: itm, controlId: cmp.controlId });
            cmp.closeAllSelectMenus();
        };

        cmp.dropdown = function (event) {
            cmp.cancel(event);
            $('.flyout').addClass('hide');
            cmp.mnuOpen = $("#menu" + cmp.controlId).hasClass('open');
            cmp.closeAllSelectMenus();
            if (!cmp.mnuOpen) {
                cmp.openMenu();
            }
        };

        cmp.closeAllSelectMenus = function () {
            $(".menu").removeClass('open');
        };

        cmp.openMenu = function () {
            $("#menu" + cmp.controlId).addClass('open');
        };

        $rootScope.$on('bodyClick', function (evt, data) {
            if ($("#menu" + cmp.controlId).hasClass('open')) {
                $("#menu" + cmp.controlId).removeClass('open');
                cmp.menuOpen = false;
            }
        });

        $rootScope.$on('orgListReady', function (evt, data) {
            if (cmp.controlId === "org") {
                cmp.dropList = data.orgList;
                cmp.selectedItem = cmp.dropList.filter(function (item) {
                    return item.IsDefaultAccount === true;
                });
            }
        });

        $rootScope.$on('updatedOrg', function (evt, data) {
            if (cmp.controlId === "org") {
                cmp.selectedItem = data.selectedOrganization;
            }
        });

        $rootScope.$on('pageListReady', function (evt, data) {
            if (cmp.controlId === "pageSelector") {
                cmp.dropList = data.pages;
                cmp.selectFromList();
            }
        });

        angular.element(document).ready(function () {
            if (!cmp.dropList) {
                cmp.dropList = listService.getStaticList(cmp.listType);
                cmp.selectedItem ? cmp.selectFromList() : cmp.selectedItem = cmp.dropList[0];
            }
            else {
                if (cmp.dropList.length > 0) {
                    cmp.selectedItem
                        ? cmp.selectFromList()
                        : cmp.selectedItem = cmp.dropList[0];
                }
            }

            switch (cmp.controlId) {
                case "pageSelector":
                    window.peekPages = cmp;
                    break;

                case "org":
                    window.peekOrgs = cmp;
                    break;

                case "pageSort":
                    window.peekSort = cmp;
                    break;

                default:
                    window.peekSelect = cmp;
            }
        });
    }

    angular.module('softouch').component('customSelect', {
        templateUrl: '/scripts/app/components/select/select.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            listType: '@',
            customStyle: '@',
            dropList: '<',
            controlId: '@',
            textColor: '@',
            selectedItem: '=',
            displayPrefix: '@'
        },              
        controller: ['$rootScope', 'listService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');

    function controller($scope, $rootScope, listService) {
        var cmp = this;
        cmp.dropList = [];
        cmp.selectedItem = {};
        cmp.$onInit = function () { };

        cmp.menuOpen = false;

        cmp.cancel = function (event) {
            event.cancelBubble = true;
            event.preventDefault();
            event.stopImmediatePropagation();
        };

        cmp.selectMe = function (itm, event) {
            if (event) { cmp.cancel(event); }
            cmp.selectedItem = itm;
            (itm.id == 2) ? cmp.selectedItem.a = cmp.a : cmp.selectedItem.a = '';
            $rootScope.$broadcast('itemSelected', { item: itm, controlId: cmp.controlId });
            cmp.closeAllSelectMenus();
            
        }

        cmp.dropdown = function (event) {
            cmp.cancel(event);
            $('.flyout').addClass('hide');
            cmp.mnuOpen = $("#menu" + cmp.controlId).hasClass('open');
            cmp.closeAllSelectMenus();
            if (!cmp.mnuOpen) {
                cmp.openMenu();
            };
        }

        cmp.closeAllSelectMenus = function () {
            $(".menu").removeClass('open');
        };

        cmp.openMenu = function () {
            $("#menu" + cmp.controlId).addClass('open');
        };

        cmp.controllerListener = $rootScope.$on('controllerclick', function (evt, data) {
            if (cmp.menuOpen) {
                $("#menu" + cmp.controlId).removeClass('open');
                cmp.menuOpen = false;
            }

        });
        $scope.$on('$destroy', cmp.controllerListener);

        cmp.selectionListener = $rootScope.$on('itemSelected', function (evt, data) {
            (cmp.selectedItem.id == 2) ? cmp.selectedItem.at = cmp.at : cmp.selectedItem.at = '';
        });
        $scope.$on('$destroy', cmp.selectionListener);

        angular.element(document).ready(function () {
            if (!cmp.customList) {
                cmp.dropList = listService.getStaticList(cmp.listType);
            }
            // default to annual price
            cmp.selectedItem = cmp.dropList[1];
            cmp.selectMe(cmp.selectedItem);
        });
    }

    module.component('specialSelect', {
        templateUrl: '/scripts/app/components/select/select.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            listType: '@',
            customStyle: '@',
            customList: '<',
            controlId: '@',
            textColor: '@',
            arrowStyle: '@',
            a: "="
        },
        controller: ['$scope',
            '$rootScope',
            'listService', controller]
    });

}());;
(function () {
    "use strict";
    function controller($rootScope, $scope, $element, favoritesService, cartService, userService, downloadItemService, constants, productEventService) {
        var cmp = this;
        window.peekSubscriptionChoices = this;
        cmp.premiumCount = '';
        cmp.currentSubscription = {};
        cmp.subscriptionTypes = [];
        cmp.commitmentChoices = [
            { index: '0', name: 'Annual plan, prepaid' },
            { index: '1', name: 'Annual plan, paid monthly' },
            { index: '2', name: 'Monthly plan (no commitment)' }
        ]
        cmp.selectedCommitment = cmp.commitmentChoices[0];
        cmp.current = {};
        cmp.userLoggedIn = false;
        if (cmp.IsModal) {
            cmp.basicButtonText = 'Select Plan';
            cmp.premiumButtonText = 'Select Plan';
            cmp.choiceIsPremium = false;
            $('#basicSubscription, #premiumSubscription').addClass("clickable");
        }
        if (!cmp.IsModal) {
            cmp.basicButtonText = 'Subscribe Now';
            cmp.premiumButtonText = 'Subscribe Now';
        }

        cmp.urls = {
            licenses: constants[0].Urls.licenses,
            premiumMedia: constants[0].Urls.premiumMedia,
            requirements: constants[0].Urls.requirements,
        }

        cmp.buyNow = function (Choice) {
            if (!cmp.isModal) {
                var item = {};
                item.CartDetailId = Choice.CartDetailId;
                cartService.cartIt(item, true)
                    .then(function (data) {
                        var url = '/checkout/addons';

                        if ($("body").hasClass("integratedStore")) {
                            url = "/checkout/register";
                        }
                        
                        if ($("body").hasClass("purchasepremiumsoftware") || $("body").hasClass("integratedpurchasesoftware")) {
                            //if current subscription is basic and upgrading to premium
                            if(!cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium)
                                url = "/checkout/payment?iguid=" + document.querySelector('#iguid').value;
                            else
                                url = "/checkout/addons?iguid=" + document.querySelector('#iguid').value;
                        }

                       window.location.href = url;
                    });
            }
        };

        cmp.choosePackage = function () {
            if (cmp.choiceIsPremium)
                var Choice = cmp.subscription.premium[cmp.selectedCommitment.index];
            else
                var Choice = cmp.subscription.base[cmp.selectedCommitment.index];

            if (!cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium && cmp.choiceIsPremium) {
                $rootScope.$broadcast('displayPackageOptionsModal', { 'title': 'Change Subscription Package', 'modalType': 'newPurchase', 'choice': Choice });
                return;
            }

            /*If you have basic and choose a premium, or if your current subscription is expired: open newPurchase*/
            if (!cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium && cmp.choiceIsPremium
                || cmp.currentSubscription.Expired || (cmp.currentSubscription.Cancelled && cmp.currentSubscription.PastDue)) {
                $rootScope.$broadcast('displayPackageOptionsModal', { 'title': 'Change Subscription Package', 'modalType': 'newPurchase', 'choice': Choice });
                return;
            }

            /*If you have basic and choose basic, or you have premium sub: open editSubscription*/
            if (!cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium && !cmp.choiceIsPremium || !cmp.currentSubscription.Expired && cmp.currentSubscription.CurrentIsPremium) {
                $rootScope.$broadcast('displayPackageOptionsModal', { 'title': 'Change Subscription Package', 'modalType': 'editSubscription', 'choice': Choice });
                return;
            }
        }

        $scope.changeSubscription = function () {
            $rootScope.$broadcast('displayPackageOptionsModal', { 'title': 'Change Subscription Package', 'modalType': 'changeSubscription' });
        };

        $(".box").on("click", function () {
            if (!cmp.isModal)
                return;

            $('.box').removeClass('selected');
            $(this).addClass("selected");

            $(".box").each(function () {
                if ($(this).hasClass("selected"))
                    $(this).parent().addClass("selected");
                else
                    $(this).parent().removeClass("selected");
            })

            cmp.applyChanges();
        });

        $scope.$watch('cmp.subscriptionTypes', function () {
            if (cmp.subscriptionTypes == undefined || cmp.subscriptionTypes[0] == undefined) {
                return
            }

            cmp.subscription = cmp.subscriptionTypes[cmp.currentSubscription.ChurchSize];

            //if current is basic
            if (!cmp.currentSubscription.IsTrial && !cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium) {
                cmp.selectedCommitment = cmp.commitmentChoices[cmp.currentSubscription.BasicPreSelect];
                cmp.choiceIsPremium = false;

                if (cmp.isModal) {
                    $($("#basicSubscription").children().first()).addClass("selected")
                    $('#basicSubscription').addClass("selected");
                    $('#premiumSubscription').removeClass("selected");
                    cmp.basicButtonText = 'Selected';
                    cmp.premiumButtonText = 'Select Plan';
                    cmp.selectedSubscription = cmp.subscription.base[cmp.selectedCommitment.index];
                }
                else {
                    $('#premiumSubscription').removeClass("dark");
                    $('#basicSubscription').addClass("dark");
                    $('#churchSizeDropdown, #commitmentDropdown').removeClass("disabled");
                    $('.JQ-basic').removeClass('d-none');
                    $('.JQ-premium').addClass('d-none');
                    $('#basicEdit').prop('disabled', true);
                    $('#basicBuyNow').prop('disabled', true);
                    $('#premiumBuyNow').prop('disabled', false);
                    cmp.basicButtonText = 'Current Plan';
                    cmp.current = cmp.subscriptionTypes[cmp.currentSubscription.ChurchSize].base[cmp.currentSubscription.BasicPreSelect];
                }
            }
            //if current is premium
            else if (!cmp.currentSubscription.IsTrial && !cmp.currentSubscription.Expired && cmp.currentSubscription.CurrentIsPremium) {
                cmp.selectedCommitment = cmp.commitmentChoices[cmp.currentSubscription.PremiumPreSelect];
                cmp.choiceIsPremium = true;

                if (cmp.isModal) {
                    $($("#premiumSubscription").children().first()).addClass("selected")
                    $('#basicSubscription').removeClass("selected");
                    $('#premiumSubscription').addClass("selected");
                    cmp.basicButtonText = 'Select Plan';
                    cmp.premiumButtonText = 'Selected';
                    cmp.selectedSubscription = cmp.subscription.premium[cmp.selectedCommitment.index];
                }
                else {
                    cmp.basicButtonText = 'Included';
                    cmp.premiumButtonText = 'Current Plan';
                    $('#basicBuyNow, #premiumBuyNow').prop('disabled', true);
                    $('#churchSizeDropdown, #commitmentDropdown').addClass("disabled");
                    $('#basicSubscription, #premiumSubscription').addClass("dark");
                    $('.JQ-basic').removeClass('d-none');
                    $('.JQ-premium').removeClass('d-none');
                    cmp.current = cmp.subscriptionTypes[cmp.currentSubscription.ChurchSize].premium[cmp.currentSubscription.PremiumPreSelect];
                }
            }
            //don't have a subscription
            else {
                if (cmp.isModal) {
                    cmp.choiceIsPremium = true;
                }

                cmp.basicButtonText = 'Subscribe Now';
                cmp.premiumButtonText = 'Subscribe Now';
                $('.JQ-basic').addClass('d-none');
                $('.JQ-premium').addClass('d-none');
                $('#basicSubscription, #premiumSubscription').removeClass("dark");
                $('#churchSizeDropdown, #commitmentDropdown').removeClass("disabled");
                $('#basicBuyNow, #premiumBuyNow').prop('disabled', false);
            }
        })

        $scope.$watch('cmp.selectedCommitment', function () {
            cmp.applyChanges();
        })

        $scope.$watch('cmp.subscription', function () {
            cmp.applyChanges();
        })

        cmp.applyChanges = function () {
            if (cmp.subscriptionTypes == undefined || cmp.subscriptionTypes[0] == undefined) {
                return
            }

            if (cmp.isModal) {
                /*if monthly no commit was choosen*/
                if (cmp.selectedCommitment.index == 2) {
                    $('#premiumSubscription').removeClass("clickable");

                    cmp.premiumButtonText = 'Unavailable';

                    if ($('#premiumSubscription').hasClass('selected')) {
                        $('#premiumSubscription').removeClass('selected');
                        cmp.basicButtonText = 'Select Plan';
                        cmp.choiceIsPremium = undefined;
                        cmp.selectedSubscription = {};
                    }
                    if ($('#basicSubscription').hasClass('selected')) {
                        cmp.basicButtonText = 'Selected';
                        cmp.selectedSubscription = cmp.subscription.base[cmp.selectedCommitment.index];
                    }
                }
                if (cmp.selectedCommitment.index != 2) {
                    $('#basicSubscription, #premiumSubscription').addClass("clickable");

                    if ($('#premiumSubscription').hasClass('selected')) {
                        cmp.basicButtonText = 'Select Plan';
                        cmp.premiumButtonText = 'Selected';
                        cmp.choiceIsPremium = true;
                        cmp.selectedSubscription = cmp.subscription.premium[cmp.selectedCommitment.index];
                    }
                    if ($('#basicSubscription').hasClass('selected')) {
                        cmp.basicButtonText = 'Selected';
                        cmp.premiumButtonText = 'Select Plan';
                        cmp.choiceIsPremium = false;
                        cmp.selectedSubscription = cmp.subscription.base[cmp.selectedCommitment.index];
                    }
                    if (!$('#basicSubscription').hasClass('selected') && !$('#premiumSubscription').hasClass('selected')) {
                        cmp.selectedSubscription = {};
                        cmp.choiceIsPremium = undefined;
                        cmp.premiumButtonText = 'Select Plan';
                        cmp.basicButtonText = 'Select Plan';
                    }
                }
            }
            else {
                if (cmp.selectedCommitment.index == 2)
                    cmp.premiumButtonText = 'Unavailable';
                else if (!cmp.currentSubscription.IsTrial && !cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium && cmp.selectedCommitment.index == 1)
                    cmp.premiumButtonText = 'Upgrade Now for $' + cmp.subscription.premium[cmp.selectedCommitment.index].CheckoutPrice.toFixed(2) + '/mo.';
                else if (!cmp.currentSubscription.IsTrial && !cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium && cmp.selectedCommitment.index == 0)
                    cmp.premiumButtonText = 'Upgrade Now for $' + cmp.subscription.premium[cmp.selectedCommitment.index].CheckoutPrice.toFixed(2);
                else if (!cmp.currentSubscription.IsTrial && !cmp.currentSubscription.Expired && cmp.currentSubscription.CurrentIsPremium)
                    cmp.premiumButtonText = 'Current Plan';
                else
                    cmp.premiumButtonText = 'Subscribe Now';
            }
        }

        $rootScope.$on("loginDataReady", function (event, user) {
            /*console.log(user.data)*/
            if (user.data.length > 0) {
                cmp.userLoggedIn = true;
            }
            else {
                cmp.userLoggedIn = false;
            }
        });

        $('#packageOptionsModal').on('hidden.bs.modal', function (e) {
            cmp.subscription = cmp.subscriptionTypes[cmp.currentSubscription.ChurchSize];
            //if current is basic
            if (!cmp.currentSubscription.Expired && !cmp.currentSubscription.CurrentIsPremium) {
                cmp.selectedCommitment = cmp.commitmentChoices[cmp.currentSubscription.BasicPreSelect];
                $('#basicSubscription').addClass("selected");
                $('#premiumSubscription').removeClass("selected");
                cmp.choiceIsPremium = false;
                cmp.basicButtonText = 'Selected';
                cmp.premiumButtonText = 'Select Plan';
                cmp.selectedSubscription = cmp.subscription.base[cmp.selectedCommitment.index];
            }
            //if current is premium
            else if (!cmp.currentSubscription.Expired && cmp.currentSubscription.CurrentIsPremium) {
                cmp.selectedCommitment = cmp.commitmentChoices[cmp.currentSubscription.PremiumPreSelect];
                $('#basicSubscription').removeClass("selected");
                $('#premiumSubscription').addClass("selected");
                cmp.choiceIsPremium = true;
                cmp.basicButtonText = 'Select Plan';
                cmp.premiumButtonText = 'Selected';
                cmp.selectedSubscription = cmp.subscription.premium[cmp.selectedCommitment.index];
            }
            //don't have a subscription
            else {
                $('#basicSubscription #premiumSubscription').removeClass("selected");
                cmp.choiceIsPremium = undefined;
            }
        })

        angular.element(document).ready(function () {
        });
    }

    angular.module('softouch').component('subscriptionChoices', {
        templateUrl: '/scripts/app/components/subscriptionChoices/subscriptionChoices.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            'storeCreditBalance': '<',
            'subscriptionTypes': '<',
            'currentSubscription': '<',
            'premiumCount': '<',
            'isModal': '<'
        },
        controller: ['$rootScope', '$scope', '$element', 'favoritesService', 'cartService', 'userService', 'downloadItemService', 'constants', 'productEventService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');
    function controller($rootScope, $scope, $element) {
        var cmp = this;
    }
    module.component('thumbHolder', {
        templateUrl: '/scripts/app/components/thumbHolder/thumbHolder.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            'link': '@',
            'src': '@',
            'title': '@',
            'byLine': '@'
        },
        controller: ['$rootScope', '$scope', '$element', controller]
    });

}());;
(function () {
    "use strict";
    function controller($rootScope, $scope, $element, favoritesService, cartService, userService, organizationService, downloadItemService, constants, productEventService) {
        var cmp = this;
        window.peekThumbs = cmp;
        cmp.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        // Test for iPhone ******************************
        cmp.iphone = /iPhone/.test(navigator.userAgent);
        // ******************************* video and img tags ***********************************
        cmp.vp = $element[0].querySelector("video");
        
        // ******************************* purchase message ***********************************
        cmp.product = {};
        cmp.product.purchaseMessage = '';
        cmp.imgSrc = constants[0].BaseUrl.thumbnailPlaceholder;
        cmp.videoSrc = {};
        cmp.cartUrl = constants[0].Urls.checkoutSummary;
        cmp.canPlay = false;
        cmp.popupClosed = true;
        cmp.collection = constants[0].ProductType.Collection;
        cmp.imgBase = constants[0].BaseUrl.previewImage_thumbnails;
        var videoBase = constants[0].BaseUrl.videoBase;

        cmp.isIntegratedStore = $("body").hasClass("integratedStore");

        cmp.showPopup = function (thumb)
        {
            setTimeout(function ()
            {
                $('.collection-thumb-item').each(function ()
                {
                    var height = ($(this).width() / 16) * 9;
                    $(this).height(height);
                });
            }, 0);
            
            if (!cmp.isScrolled)
            {
                var PopupThumb = document.getElementById('JQ-popupThumb');
                
                var PopupThumbTop = document.getElementsByClassName('topthumb');
                var PopupThumbBottom = document.getElementsByClassName('popupDetail');
                //removes previous styling on PopupThumb
                PopupThumb.classList.remove('popup-animate-out');
                if (PopupThumb.style.removeProperty)
                {
                    PopupThumb.style.removeProperty('left');
                    PopupThumb.style.removeProperty('right');
                    PopupThumb.style.removeProperty('box-shadow');
                } else
                {
                    PopupThumb.style.removeAttribute('left');
                    PopupThumb.style.removeAttribute('right');
                    PopupThumb.style.removeProperty('box-shadow');
                }
                //get the info for current thumb
                var bodyRect = document.body.getBoundingClientRect();
                var elemRect = thumb.getBoundingClientRect();
                /*console.log('elemRect', elemRect)*/
                //newWidth Calc
                var newWidth = elemRect.width * 1.3;
                PopupThumb.style.width = (newWidth + 'px');
                //new Top Calc
                //let Top = elemRect.top - bodyRect.top - ((elemRect.height / 2));
                //new Top for whole thumb growing
                //let Top = elemRect.top - bodyRect.top - ((elemRect.height / 2.7));
                let Top = elemRect.top - bodyRect.top - ((elemRect.height / 4.425));
                PopupThumb.style.top = (Top + 'px');

                //if its on the left
                if (elemRect.left < 90)
                {
                    var offsetLeft = elemRect.left - bodyRect.left;
                    PopupThumb.style.left = (offsetLeft + 'px');
                    PopupThumb.style.transformOrigin = 'center left';
                    PopupThumbBottom[0].style.transformOrigin = 'top left';
                    PopupThumbTop[0].style.transformOrigin = 'bottom left';
                }
                //if its on the right 
                else if ((bodyRect.right - elemRect.right) < 90)
                {
                    var offsetRight = bodyRect.right - elemRect.right;
                    PopupThumb.style.right = (offsetRight + 'px');
                    PopupThumb.style.transformOrigin = 'center right';
                    PopupThumbBottom[0].style.transformOrigin = 'top right';
                    PopupThumbTop[0].style.transformOrigin = 'bottom right';
                }
                //everything else
                else
                {
                    var offsetLeft = elemRect.left - bodyRect.left - ((newWidth - elemRect.width) / 2);
                    PopupThumb.style.left = (offsetLeft + 'px');
                    PopupThumb.style.transformOrigin = 'center center';
                    PopupThumbBottom[0].style.transformOrigin = 'top center';
                    PopupThumbTop[0].style.transformOrigin = 'bottom center';
                }
                //make popup show
                PopupThumb.style.display = 'block'
                PopupThumbTop[0].style.display = 'block';
                PopupThumbBottom[0].style.display = 'block';

                PopupThumb.classList.add('popup-animate-in');
            }
        };

        function whichAnimationEvent()
        {
            var t,
                el = document.createElement("fakeelement");

            var animations = {
                "animation": "animationend",
                "OAnimation": "oAnimationEnd",
                "MozAnimation": "animationend",
                "WebkitAnimation": "webkitAnimationEnd"
            }

            for (t in animations) {
                if (el.style[t] !== undefined) {
                    return animations[t];
                }
            }
        }

        var animationEvent = whichAnimationEvent();

        cmp.hidePopup = function () {

            console.log('HIDE POPUP')
            var PopupThumb = document.getElementById('JQ-popupThumb');

            PopupThumb.style.boxShadow = 'none';
            PopupThumb.classList.add('popup-animate-out');
            $("#JQ-popupThumb").one(animationEvent,
                function (event) {
                    PopupThumb.style.display = 'none';
                });
            PopupThumb.classList.remove('popup-animate-in');

            /*Annimation for top*//*
            var PopupThumbTop = document.getElementsByClassName('topthumb');
            var PopupThumbBottom = document.getElementsByClassName('popupDetail');

            var annimateTop = PopupThumbTop[0].animate([
                { transform: 'scale(1)' },
                { transform: 'scale(.777777)' },
            ], 100);
            annimateTop.addEventListener('finish', function () {
            });

            *//*Annimation for bottom*//*
            var annimateBottom = PopupThumbBottom[0].animate([
                { transform: 'scale(1)' },
                { transform: 'scale(.777777)' },
            ], 100);
            annimateBottom.addEventListener('finish', function () {
                PopupThumbTop[0].style.display = 'none';
                PopupThumbBottom[0].style.display = 'none';
                *//*$rootScope.$broadcast('popupItemSet', { 'item': {} });*//*
            });*/
        };

        cmp.playThis = function (evt)
        {
            cmp.canPlay = true;
            if (cmp.iphone == true) {
                cmp.showDetailsModal();
            }
            else if (!(cmp.vp.currentTime > 0 && !cmp.vp.paused && !cmp.vp.ended && cmp.vp.readyState > 2)) {
                if (cmp.product.ProductId !== null && cmp.canPlay && !cmp.isPopup) {
                    if (cmp.canPopup && window.innerWidth > 575) {
                        clearTimeout(cmp.timeout);
                        cmp.timeout = setTimeout(function () {
                            if (cmp.canPlay) {
                                $rootScope.$broadcast('popupItemSet', { 'item': cmp.product, 'thumb': evt.currentTarget });
                                $scope.$applyAsync(function () {
                                    cmp.showPopup(evt.currentTarget);
                                })
                            }
                        }, 350); 
                    }
                    else if (!cmp.product.IsImage && cmp.product.TypeText != "Collections") {
                        $('.productTitle' + cmp.product.ProductId).addClass("secondary-color")
                        $('.preview-loader' + cmp.product.ProductId).html("<div class='preview-loader'><label >●</label ><label>●</label><label>●</label><label>●</label><label>●</label><label>●</label></div>");
                        /var video = document.getElementsByClassName('preview' + cmp.product.ProductId)*/
                        cmp.vp.load();
                        cmp.vp.play();
                        cmp.vp.onplaying = function (event) {
                            $('.preview' + cmp.product.ProductId).removeClass("jq-video-hide");
                            $('.preview-loader' + cmp.product.ProductId).empty();
                        };
                        var p = {
                            productId: cmp.product.ProductId,
                            eventId: 4
                        };
                        productEventService.insertProductEvent(p);
                    }
                }
            }
        };

        cmp.stopThis = function (evt)
        {
            cmp.canPlay = false;
            if (cmp.isPopup) {
                cmp.hidePopup();
            };
            if ((cmp.product.ProductId > 0 && !cmp.canPopup) || window.innerWidth < 575) {
                $('.productTitle' + cmp.product.ProductId).removeClass("secondary-color")
                $('.preview-loader' + cmp.product.ProductId).empty();
                $('.preview' + cmp.product.ProductId).addClass("jq-video-hide");
                if (cmp.vp.readyState == 4) {
                    cmp.vp.pause();
                };
                if (cmp.vp.readyState != 4) {
                    cmp.vp.onplaying = function (event) {
                        cmp.vp.pause();
                    };
                };
            };
        };

        cmp.favoriteMe = function () {
            if (cmp.product.ProductId !== null) {
                if (cmp.isIntegratedStore || userService.userData.loggedIn) {
                    // visually make the change
                    cmp.product.IsFavorite = !cmp.product.IsFavorite;
                    // save the change in the db
                    favoritesService.setFavorites(cmp.product, cmp.product.IsFavorite);
                }
                else {
                    var url = constants[0].ActInfo.LoginAJSurl;;
                    window.location.href = url;
                }
            }
        };

        cmp.addToCart = function (evt) {
            if (evt) {
                evt.stopPropagation();
                evt.preventDefault();
                window.event.cancelBubble = true;
                evt.originalEvent.cancelBubble = true;
            }

            if (cmp.isIntegratedStore) {
                window.location.href = cmp.product.DetailUrl;
            }
            else {
                if (cmp.product.ProductId !== null) {
                    cartService.cartIt(cmp.product, !cmp.product.IsInCart);
                    cmp.product.IsInCart = true;
                }
            }
        };

        cmp.showDownloadModal = function ()
        {
            console.log("SHOW DOWNLOAD MODAL");
            if (cmp.product.ProductId !== null) {
                downloadItemService.requestDownloadItem(cmp.product.ProductId);
            }
        };

        cmp.showDetailsModal = function ()
        {
            console.log("SHOW DETAILS MODAL");
            // Prevent modal on ctrl+click
            if (event.ctrlKey) {
                return;

            // Prevent redirect on click
            } else {
                event.preventDefault();
            }

            if (cmp.product.ProductId !== null) {
                //console.log("cmp.product", cmp.product)
                $rootScope.$broadcast('detailsItemSet', { 'item': cmp.product });
            }
        };

        cmp.viewMore = function () {
            window.location.href = "/media/morelike/" + cmp.product.ProductId;
        };

        cmp.changeToSecondaryColor = function () {
            $('.productTitle' + cmp.product.ProductId).addClass("secondary-color")
        };

        cmp.removeSecondaryColor = function () {
            $('.productTitle' + cmp.product.ProductId).removeClass("secondary-color")
        };

        //**************************************************************** Lisetners *************************************************************************
        //$('[data-toggle="tooltip"]').tooltip()

        //var cartListener = $rootScope.$on('cartListReady', function (event, data) {
        //    cmp.checkCart();
        //});
        //$scope.$on('$destroy', cartListener);

        //cmp.checkCart = function () {
        //    cmp.product.IsInCart = false;
        //    $.each(cartService.cartData, function (key, value) {
        //        $.each(value, function (subkey, subvalue) {
        //            if (subkey === 'CartDetailId') {
        //                cmp.product.CartDetailId === subvalue ? cmp.product.IsInCart = true : null;
        //            }
        //        });
        //    });
        //};

        //adds and removes background color according to img size


        $rootScope.$on('cartRemove', function (evt, data) {
            if (data.item.CartDetailId === cmp.product.CartDetailId) {
                cmp.product.IsInCart = false;
            }
        });

        $rootScope.$on('orgListReady', function (evt, data)
        {
            if (organizationService.selectedOrganization.HasPremiumSubscription) {
                cmp.premiumUrl = constants[0].Urls.mediaSearch + '/' + constants[0].ProductViewFilterKey.AllPremium;
            } else {
                cmp.premiumUrl = constants[0].Urls.premiumMedia;
            }
        });

        var mywatch = $scope.$watch('cmp.product', function (newVal, oldVal)
        {
            if (cmp.product.ProductId) {
                cmp.videoSrc = videoBase + cmp.product.ProductId + ".mp4";
                //cmp.producerUrl = constants[0].Urls.featuredProducer + formatUrl(cmp.product.ProducerName);
                // Using cmp.product.ProducerPackUrl instead
                if (cmp.product.IsPremium && cmp.product.ProducerSubscriptionId == 0) {
                    $('.container' + cmp.product.ProductId + " .premium").addClass("only");
                }

            }
            else {
                cmp.videoSrc = {};
            }
        });

        angular.element(document).ready(function ()
        {


            //$('body').on("mouseenter", ".jq-mouseover-out" + cmp.product.ProductId, function () {
            //    cmp.playThis(cmp.product.ProductId);
            //});
            //$('body').on("mouseleave", ".jq-mouseover-out" + cmp.product.ProductId, function () {
            //    cmp.stopThis();
            //});

            //adds and removes background color according to img size
            cmp.img = $element[0].querySelector("img");
            cmp.img.onload = function () {
                var container = document.querySelector('.container' + cmp.product.ProductId);
                var img = document.querySelector('.img' + cmp.product.ProductId);
                var preview = document.querySelector('.preview' + cmp.product.ProductId)
                if (img != null) {
                    if (!container.classList.contains("black")) {
                        container.classList.add("black");
                        preview.classList.add("black");
                        preview.classList.remove("gray-background");
                    }
                    if (!(img.classList.contains("narrow-img"))) {
                        img.classList.add("narrow-img");
                    }
                    //it isn't a narrow img
                    if (container.clientWidth - img.clientWidth < 1) {
                        img.classList.remove("narrow-img");
                    }
                    if (!(img.classList.contains("wider-img"))) {
                        img.classList.add("wider-img");
                    }
                    //it isn't a wider-img
                    if (container.clientHeight- img.clientHeight < 1 ) {
                        img.classList.remove("wider-img");
                    }
                    if (!img.classList.contains("wider-img") && !img.classList.contains("narrow-img")) {
                        container.classList.remove("black");
                        preview.classList.remove("black");
                        preview.classList.add("gray-background");
                    }
                }

           };
        });
    }

    angular.module('softouch').component('thumbView', {
        templateUrl: '/scripts/app/components/thumbView/thumbView.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            'product': '<',
            'thumbImage': '@',
            'primaryClass': '@',
            'overlayClass': '@',
            'videoClass': '@',
            'isMac': '<',
            'showDetails': '<',
            'isPopup': '<',
            'canPopup': '<',
            'isScrolled': '<'
        },
        controller: ['$rootScope', '$scope', '$element', 'favoritesService', 'cartService', 'userService', 'organizationService', 'downloadItemService', 'constants', 'productEventService', controller]
    });

}());;
(function () {
    "use strict";
    var module = angular.module('softouch');
    function controller($rootScope, $scope, $location, $element, favoritesService, cartService, userService, constants, downloadItemService) {
        var cmp = this;
        cmp.model = MiniViewProduct();
        cmp.model.isInCart = false;
        var check1 = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
        var check2 = /Mobi/.test(navigator.userAgent);
        cmp.ieCheck = (/rv:11.0/.test(navigator.userAgent));
        // Test for iPhone ******************************
        cmp.iphone = /iPhone/.test(navigator.userAgent);
        cmp.iPad = /iPad/.test(navigator.userAgent);
        // ******************************************************************


        cmp.isIntegratedStore = $("body").hasClass("integratedStore");

        cmp.playThis = function (evt) {
            if (!(cmp.model.product_id === null)) {

                if (!cmp.model.still && !cmp.model.collection) {
                    var value = constants[0].BaseUrl.videoBase + cmp.model.product_id + '.mp4';
                    cmp.selectedVideoId = '#preview' + cmp.model.product_id;
                    cmp.videoSrc = (value);
                    $(cmp.selectedVideoId)[0].src = cmp.videoSrc;

                    cmp.vp.load();
                    cmp.vp.play();
                }
            }
        };
        cmp.stopThis = function (evt) {
            if (!(cmp.model.product_id === null)) {
                //var isPlaying = video.currentTime > 0 && !video.paused && !video.ended
                //    && video.readyState > 2;
                //if (isPlaying) {
                cmp.vp.pause();
                if (!cmp.vp.playing) {
                    cmp.vp.load();
                }
                //}
            }
        };
        cmp.favoriteMe = function () {
            if (!(cmp.model.product_id === null)) {
                if (userService.userData.loggedIn) {
                    favoritesService.setFavorites(cmp.model, !cmp.model.isFavorite);
                }
                else {
                    userService.lastPageUrl = $location.url();
                    var url = '/account/login';
                    window.location.href = url;
                }
            }
        };

        cmp.addToCart = function (evt) {
            if (cmp.isIntegratedStore) {
                window.location.href = cmp.model.detail_url;
            }
            else {
                if (!(cmp.model.product_id === null)) {
                    cartService.cartItem(cmp.model.detail_id, !cmp.model.isInCart);
                }
                if (evt) {
                    evt.stopPropagation();
                    evt.preventDefault();
                    window.event.cancelBubble = true;
                    evt.originalEvent.cancelBubble = true;
                }
            }

        };
        cmp.showDownloadModal = function () {
            if (!(cmp.model.product_id === null)) {
                $rootScope.$broadcast('downloadItemSet', { 'item': cmp.model });
            }
        };
        cmp.goUrl = function (evt) {
            if (evt !== undefined) {
                if (evt.button === 0) {
                    evt.originalEvent.cancelBubble = true;
                    window.event.cancelBubble = true;
                }
            }

            if (typeof (cmp.clickThru) === 'undefined') {
                cmp.clickThru = true;
            }

            if (cmp.clickThru) {
                var title = parseUrlTitle(cmp.model.title);
                var url = cmp.model.detail_url + '/' + cmp.model.product_id + '/' + cmp.model.title;
                if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey) { window.location.href = url; }
            }
            else {
                evt.stopPropagation();
                evt.preventDefault();
                window.event.cancelBubble = true;
                evt.originalEvent.cancelBubble = true;
                cmp.showDownloadModal();
            }
        };
        cmp.setModel = function () {
            $.each(cmp.product, function (key, value) {
                cmp.model[key] = value;
                if (key == 'discount') {
                    (value) ? cmp.model.sale_price = Math.round(cmp.product.price - (cmp.product.price * (value / 100)), 2) : cmp.model.sale_price = 0;
                }
            });
            //console.log({ 'cmp.model.sale_price': cmp.model.sale_price, 'model.isDownloadable': cmp.model.isDownloadable });
            var category = '';
            var typ = '';
            (cmp.model.product_type_desc) ? typ = cmp.model.product_type_desc : typ = cmp.model.product_type;
            switch (typ.toLowerCase()) {
                case "motions":
                    category = "motion-backgrounds";
                    break;
                case "minimovies":
                    category = "sermonvideos";
                    break;
                case "sermon videos":
                    category = "sermonvideos";
                    break;
                case "worship tracks":
                    category = "worshiptracks";
                    break;
                case "countdowns":
                    category = "countdowns";
                    break;
                default:
                    category = cmp.model.product_type_desc;
            }

            cmp.model.detail_url = '/media/' + category + '/' + cmp.model.product_id + '/' + parseUrlTitle(cmp.model.title);
            cmp.model.producer_url = '/media/producer/' + cmp.model.producer_id + '/' + cmp.model.producer_name;
            cmp.model.max_price = cmp.model.price;
            cmp.model.checkout_price = cmp.model.price;
            cmp.model.hd = cmp.model.quality_bit > 2;
            cmp.model.sd = !cmp.model.hd;
            if (cmp.model.hd) { cmp.model.resolution = 'hd'; }
            if (cmp.model.sd) { cmp.model.resolution = 'sd'; }

            if (cmp.model.duration) {
                var dur = cmp.model.duration.split(':');
                dur.length > 0 ? cmp.model.minutes = parseInt(dur[1]) : 0;
                dur.length > 1 ? cmp.model.seconds = parseInt(dur[2]) : 0;
            }
            var chk = constants[0].ProductType.AllVideos;
            var chk_countdown = constants[0].ProductType.Countdown;
            var chk_motion = constants[0].ProductType.Motion;
            var chk_collection = constants[0].ProductType.Collection;
            var chk_still = constants[0].ProductType.Still;

            cmp.model.video = (cmp.model.type & chk) === cmp.model.type;
            cmp.model.countdown = (cmp.model.type & chk_countdown) === cmp.model.type;
            cmp.model.motion = (cmp.model.type & chk_motion) === cmp.model.type;
            cmp.model.still = (cmp.model.type & chk_still) === cmp.model.type;
            cmp.model.collection = (cmp.model.type & chk_collection) === cmp.model.type;

            if (cmp.model.still) { cmp.type = 'still'; }
            if (cmp.model.video) { cmp.type = 'video'; }
            if (cmp.model.countdown) { cmp.type = 'countdown'; }
            if (cmp.model.motion) { cmp.type = 'motion'; }
            if (cmp.model.collection) { cmp.type = 'collection'; }

            //if (cmp.model.CollectionItemProductIds) {
            //    if (cmp.model.CollectionItemProductIds.length > 0) { cmp.model.type = 'collection'; }
            //}

            cmp.model.bagIt = 'bagIt';
            if (cmp.model.isInCart) { cmp.model.bagIt = 'checkout'; }
            if (cmp.model.isDownloadable) { cmp.model.bagIt = 'downloadable'; }
            cmp.initComponent();
        };

        //*************************************** from elipsis component

        //cmp.overFlow = false;
        //cmp.originalClientHeight = 0;
        //cmp.originalScrollHeight = 0;
        //cmp.controlHeight = 0;

        //var checkDescription = function () {
        //    setHeight();
        //    var descriptionHeight = cmp.vp.clientHeight - 40;
        //    var totalHeight = (Math.floor(descriptionHeight / 18)) * 18;

        //    totalHeight < 36 ? totalHeight = 36 : null;

        //    $(cmp.wrapper).css('max-height', totalHeight);

        //    cmp.overFlow = totalHeight < cmp.originalScrollHeight;
        //    cmp.overFlow ? $(cmp.txt).addClass('textFade') : $(cmp.txt).removeClass('textFade');
        //};


        //function setHeight() {
        //    cmp.originalClientHeight = cmp.wrapper.clientHeight;
        //    cmp.originalScrollHeight = cmp.wrapper.scrollHeight;
        //};
        // Lisetners *************************************************************************
        var elementResizedListener = $rootScope.$on('elementResized', function (evt, data) {
            //checkDescription();
        });
        $scope.$on('$destroy', elementResizedListener);

        $rootScope.$on('toggleLike', function (evt, data) {
            //checkDescription();
        });

        var cartRemoveListener = $rootScope.$on('cartRemove', function (evt, data) {
            if (data.item.CartDetailId === cmp.model.detail_id) { cmp.model.isInCart = false; cmp.model.bagIt = 'bagIt'; }

        });
        $scope.$on('$destroy', cartRemoveListener);

        var cartAddListener = $rootScope.$on('cartAdd', function (evt, data) {
            if (data.item.CartDetailId === cmp.model.detail_id) { cmp.model.isInCart = true; cmp.model.bagIt = 'checkout'; }

        });
        $scope.$on('$destroy', cartAddListener);

        var unfavoriteListener = $rootScope.$on('unfavorite', function (evt, data) {
            if (data.item.detail_id === cmp.model.detail_id) { cmp.model.isFavorite = false; }
        });
        $scope.$on('$destroy', unfavoriteListener);

        var favoriteListener = $rootScope.$on('favorite', function (evt, data) {
            if (data.item.detail_id === cmp.model.detail_id) { cmp.model.isFavorite = true; }
        });
        $scope.$on('$destroy', favoriteListener);

        var cartListener = $rootScope.$on('cartListReady', function (event, data) {
            cmp.checkCart();
        });

        $scope.$on('$destroy', cartListener);

        var favoriteReadyistener = $rootScope.$on('favoritesReady', function (event, data) {
            cmp.checkFavorites(data);
        });

        $scope.$on('$destroy', favoriteReadyistener);

        //***********************************************************************************

        cmp.checkCart = function () {
            cmp.model.isInCart = false;
            cmp.model.bagIt = 'bagIt';
            $.each(cartService.cartData, function (key, value) {
                $.each(value, function (subkey, subvalue) {
                    if (subkey === 'CartDetailId') {
                        cmp.model.detail_id === subvalue ? cmp.model.isInCart = true : null;
                    }
                });
            });
            if (cmp.model.isInCart) { cmp.model.bagIt = 'checkout'; }
        };

        cmp.checkFavorites = function (data) {
            cmp.model.isFavorite = false;
            $.each(data, function (key, value) {
                $.each(value, function (subkey, subvalue) {
                    if (subkey === 'CartDetailId') {
                        cmp.model.detail_id === subvalue ? cmp.model.isFavorite = true : null;
                    }
                });
            });
        };

        cmp.$onInit = function () {
            cmp.setModel();
        };
        cmp.initComponent = function () {
            cmp.control = $element[0].querySelector('.thumbViewR2'); //wrapper
            cmp.vp = $element[0].querySelector("video[id^='preview']");

            $("#preview" + cmp.model.product_id).attr("poster", cmp.thumbImage);
            $("#imagePreview" + cmp.model.product_id).attr("src", cmp.thumbImage);
        }

        $scope.$watch('cmp.product', function (newVal, oldVal) {
            cmp.setModel();
        });
        angular.element(document)
            .ready(function () {
                cmp.initComponent();
            });

    }


    module.component('thumbViewR2', {
        templateUrl: '/scripts/app/components/thumbViewR2/thumbViewR2.component.html?v=' + Date.now(),
        controllerAs: "cmp",
        bindings: {
            'product': '<',
            'thumbImage': '@',
            'primaryClass': '@',
            'videoClass': '@',
            'overlayClass': '@',
            'isMac': '<'
        },
        controller: ['$rootScope', '$scope', '$location', '$element', 'favoritesService', 'cartService', 'userService', 'constants', 'downloadItemService', controller]
    });

}());;
