PageSourceSearch

https://www.saitama-toyopet.co.jp/assets/a/main.js?ver=20250912

js saitama-toyopet.co.jp collected 2026-10-04 18:34:10 UTC 1,050,978 bytes, 25,393 lines download raw bytes

vendor: 12,157 bytes, lines 1-3
1/* DMS */
2/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
3!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,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},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.6.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=y.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:v}),"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,y,s,c,v,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.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+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=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))&&v(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+" "]&&(!y||!y.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)&&ve(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(B,"$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 ye(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 ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(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=[],y=[],(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&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.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&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.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)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:
vendor: 12,219 bytes, line 3
3e,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},j=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&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(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))&&(!y||!y.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),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.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(j),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($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){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-=y)===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(B,"$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:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(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,y,v,e){return y&&!y[S]&&(y=Ce(y)),v&&!v[S]&&(v=Ce(v,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?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(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(B,"$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(B," ")}),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,y,v,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,(y=o,m=0<(v=i).length,x=0<y.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=y[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=v[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+v.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)&&ve(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)&&ve(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).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;
vendor: 5,189 bytes, line 3
3function 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 j(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(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"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,D=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="pe
vendor: 22,358 bytes, line 3
3nding",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 $(){E.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),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",$),C.addEventListener("load",$));var B=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)B(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)}):B(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),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.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 ye(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 ve(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,v.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=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(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)Ee(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=Te;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 Se(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&&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,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=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=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.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=be.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,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.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,y.handle)||S.removeEvent(e,d,y.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")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(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?we:Te,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:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,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:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(t,e){S.event.special[t]={setup:function(){return Se(this,t,Ce),!1},trigger:function(){return Se(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),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 Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(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=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(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 He(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&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(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(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),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(Ne,""),u,l))}return n}function Oe(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(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(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(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(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||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(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 Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(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 He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(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(ye(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 B(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&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ye(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 Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=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},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&
3(a=a.replace($e,"$1")
vendor: 37,735 bytes, line 3
3),""!==a||ie(e)||(a=S.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.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="",v.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(v,{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;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=E.createElement("div").style,Xe={};function Ve(e){var t=S.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,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=Me(e),i=(!v.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(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.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=Re.test(t),l=e.style;if(u||(t=Ve(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")),v.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 Re.test(t)||(t=Ve(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!Ge.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.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(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(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 B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(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[Ve(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),y=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||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[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=y&&y.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||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.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?y[r]:0,r,p),r in y||(y[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",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return B(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(!v.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 yt(e){return(e.match(P)||[]).join(" ")}function vt(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 B(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"}}),v.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;return m(t)?this.each(function(e){S(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){S(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){S(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=S(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(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:yt(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)}},v.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.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=y.call(e,"type")?e.type:e,h=y.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)}}),v.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,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(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)jt(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 Dt=/%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 $t(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 Bt(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?Bt(Bt(e,S.ajaxSettings),t):Bt(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,y=S.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?S(v):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=y.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&&(y.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),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=E.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=S.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=S.event&&y.global)&&0==S.active++&&S.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(Et.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.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]}(y,T,n)),!i&&-1<S.inArray("script",y.dataTypes)&&S.inArray("json",y.dataTypes)<0&&(y.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}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===y.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(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--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();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(v.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"}),v.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||(v.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=yt(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):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 B(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(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.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 B(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])[\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,"$1")},"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});
3/**
4 * BxSlider v4.1.2 - Fully loaded, responsive content slider
5 * http://bxslider.com
6 *
7 * Copyright 2014, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com
8 * Written while drinking Belgian ales and listening to jazz
9 *
10 * Released under the MIT license - http://opensource.org/licenses/MIT
11 */
12
13;(function($){
14
15	var plugin = {};
16
17	var defaults = {
18
19		// GENERAL
20		mode: 'horizontal',
21		slideSelector: '',
22		infiniteLoop: true,
23		hideControlOnEnd: false,
24		speed: 500,
25		easing: null,
26		slideMargin: 0,
27		startSlide: 0,
28		randomStart: false,
29		captions: false,
30		ticker: false,
31		tickerHover: false,
32		adaptiveHeight: false,
33		adaptiveHeightSpeed: 500,
34		video: false,
35		useCSS: true,
36		preloadImages: 'visible',
37		responsive: true,
38		slideZIndex: 50,
39		wrapperClass: 'bx-wrapper',
40
41		// TOUCH
42		touchEnabled: true,
43		swipeThreshold: 50,
44		oneToOneTouch: true,
45		preventDefaultSwipeX: true,
46		preventDefaultSwipeY: false,
47
48		// PAGER
49		pager: true,
50		pagerType: 'full',
51		pagerShortSeparator: ' / ',
52		pagerSelector: null,
53		buildPager: null,
54		pagerCustom: null,
55
56		// CONTROLS
57		controls: true,
58		nextText: 'Next',
59		prevText: 'Prev',
60		nextSelector: null,
61		prevSelector: null,
62		autoControls: false,
63		startText: 'Start',
64		stopText: 'Stop',
65		autoControlsCombine: false,
66		autoControlsSelector: null,
67
68		// AUTO
69		auto: false,
70		pause: 4000,
71		autoStart: true,
72		autoDirection: 'next',
73		autoHover: false,
74		autoDelay: 0,
75		autoSlideForOnePage: false,
76
77		// CAROUSEL
78		minSlides: 1,
79		maxSlides: 1,
80		moveSlides: 0,
81		slideWidth: 0,
82
83		// CALLBACKS
84		onSliderLoad: function() {},
85		onSlideBefore: function() {},
86		onSlideAfter: function() {},
87		onSlideNext: function() {},
88		onSlidePrev: function() {},
89		onSliderResize: function() {}
90	}
91
92	$.fn.bxSlider = function(options){
93
94		if(this.length == 0) return this;
95
96		// support mutltiple elements
97		if(this.length > 1){
98			this.each(function(){$(this).bxSlider(options)});
99			return this;
100		}
101
102		// create a namespace to be used throughout the plugin
103		var slider = {};
104		// set a reference to our slider element
105		var el = this;
106		plugin.el = this;
107
108		/**
109		 * Makes slideshow responsive
110		 */
111		// first get the original window dimens (thanks alot IE)
112		var windowWidth = $(window).width();
113		var windowHeight = $(window).height();
114
115
116
117		/**
118		 * ===================================================================================
119		 * = PRIVATE FUNCTIONS
120		 * ===================================================================================
121		 */
122
123		/**
124		 * Initializes namespace settings to be used throughout plugin
125		 */
126		var init = function(){
127			// merge user-supplied options with the defaults
128			slider.settings = $.extend({}, defaults, options);
129			// parse slideWidth setting
130			slider.settings.slideWidth = parseInt(slider.settings.slideWidth);
131			// store the original children
132			slider.children = el.children(slider.settings.slideSelector);
133			// check if actual number of slides is less than minSlides / maxSlides
134			if(slider.children.length < slider.settings.minSlides) slider.settings.minSlides = slider.children.length;
135			if(slider.children.length < slider.settings.maxSlides) slider.settings.maxSlides = slider.children.length;
136			// if random start, set the startSlide setting to random number
137			if(slider.settings.randomStart) slider.settings.startSlide = Math.floor(Math.random() * slider.children.length);
138			// store active slide information
139			slider.active = { index: slider.settings.startSlide }
140			// store if the slider is in carousel mode (displaying / moving multiple slides)
141			slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1;
142			// if carousel, force preloadImages = 'all'
143			if(slider.carousel) slider.settings.preloadImages = 'all';
144			// calculate the min / max width thresholds based on min / max number of slides
145			// used to setup and update carousel slides dimensions
146			slider.minThreshold = (slider.settings.minSlides * slider.settings.slideWidth) + ((slider.settings.minSlides - 1) * slider.settings.slideMargin);
147			slider.maxThreshold = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
148			// store the current state of the slider (if currently animating, working is true)
149			slider.working = false;
150			// initialize the controls object
151			slider.controls = {};
152			// initialize an auto interval
153			slider.interval = null;
154			// determine which property to use for transitions
155			slider.animProp = slider.settings.mode == 'vertical' ? 'top' : 'left';
156			// determine if hardware acceleration can be used
157			slider.usingCSS = slider.settings.useCSS && slider.settings.mode != 'fade' && (function(){
158				// create our test div element
159				var div = document.createElement('div');
160				// css transition properties
161				var props = ['WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
162				// test for each property
163				for(var i in props){
164					if(div.style[props[i]] !== undefined){
165						slider.cssPrefix = props[i].replace('Perspective', '').toLowerCase();
166						slider.animProp = '-' + slider.cssPrefix + '-transform';
167						return true;
168					}
169				}
170				return false;
171			}());
172			// if vertical mode always make maxSlides and minSlides equal
173			if(slider.settings.mode == 'vertical') slider.settings.maxSlides = slider.settings.minSlides;
174			// save original style data
175			el.data("origStyle", el.attr("style"));
176			el.children(slider.settings.slideSelector).each(function() {
177			  $(this).data("origStyle", $(this).attr("style"));
178			});
179			// perform all DOM / CSS modifications
180			setup();
181		}
182
183		/**
184		 * Performs all DOM and CSS modifications
185		 */
186		var setup = function(){
187			// wrap el in a wrapper
188			el.wrap('<div class="' + slider.settings.wrapperClass + '"><div class="bx-viewport"></div></div>');
189			// store a namspace reference to .bx-viewport
190			slider.viewport = el.parent();
191			// add a loading div to display while images are loading
192			slider.loader = $('<div class="bx-loading" />');
193			slider.viewport.prepend(slider.loader);
194			// set el to a massive width, to hold any needed slides
195			// also strip any margin and padding from el
196			el.css({
197				width: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 215) + '%' : 'auto',
198				position: 'relative'
199			});
200			// if using CSS, add the easing property
201			if(slider.usingCSS && slider.settings.easing){
202				el.css('-' + slider.cssPrefix + '-transition-timing-function', slider.settings.easing);
203			// if not using CSS and no easing value was supplied, use the default JS animation easing (swing)
204			}else if(!slider.settings.easing){
205				slider.settings.easing = 'swing';
206			}
207			var slidesShowing = getNumberSlidesShowing();
208			// make modifications to the viewport (.bx-viewport)
209			slider.viewport.css({
210				width: '100%',
211				overflow: 'hidden',
212				position: 'relative'
213			});
214			slider.viewport.parent().css({
215				maxWidth: getViewportMaxWidth()
216			});
217			// make modification to the wrapper (.bx-wrapper)
218			if(!slider.settings.pager) {
219				slider.viewport.parent().css({
220				margin: '0 auto 0px'
221				});
222			}
223			// apply css to all slider children
224			slider.children.css({
225				'float': slider.settings.mode == 'horizontal' ? 'left' : 'none',
226				listStyle: 'none',
227				position: 'relative'
228			});
229			// apply the calculated width after the float is applied to prevent scrollbar interference
230			slider.children.css('width', getSlideWidth());
231			// if slideMargin is supplied, add the css
232			if(slider.settings.mode == 'horizontal' && slider.settings.slideMargin > 0) slider.children.css('marginRight', slider.settings.slideMargin);
233			if(slider.settings.mode == 'vertical' && slider.settings.slideMargin > 0) slider.children.css('marginBottom', slider.settings.slideMargin);
234			// if "fade" mode, add positioning and z-index CSS
235			if(slider.settings.mode == 'fade'){
236				slider.children.css({
237					position: 'absolute',
238					zIndex: 0,
239					display: 'none'
240				});
241				// prepare the z-index on the showing element
242				slider.children.eq(slider.settings.startSlide).css({zIndex: slider.settings.slideZIndex, display: 'block'});
243			}
244			// create an element to contain all slider controls (pager, start / stop, etc)
245			slider.controls.el = $('<div class="bx-controls" />');
246			// if captions are requested, add them
247			if(slider.settings.captions) appendCaptions();
248			// check if startSlide is last slide
249			slider.active.last = slider.settings.startSlide == getPagerQty() - 1;
250			// if video is true, set up the fitVids plugin
251			if(slider.settings.video) el.fitVids();
252			// set the default preload selector (visible)
253			var preloadSelector = slider.children.eq(slider.settings.startSlide);
254			if (slider.settings.preloadImages == "all") preloadSelector = slider.children;
255			// only check for control addition if not in "ticker" mode
256			if(!slider.settings.ticker){
257				// if pager is requested, add it
258				if(slider.settings.pager) appendPager();
259				// if controls are requested, add them
260				if(slider.settings.controls) appendControls();
261				// if auto is true, and auto controls are requested, add them
262				if(slider.settings.auto && slider.settings.autoControls) appendControlsAuto();
263				// if any control option is requested, add the controls wrapper
264				if(slider.settings.controls || slider.settings.autoControls || slider.settings.pager) slider.viewport.after(slider.controls.el);
265			// if ticker mode, do not allow a pager
266			}else{
267				slider.settings.pager = false;
268			}
269			// preload all images, then perform final DOM / CSS modifications that depend on images being loaded
270			loadElements(preloadSelector, start);
271		}
272
273		var loadElements = function(selector, callback){
274			var total = selector.find('img, iframe').length;
275			if (total == 0){
276				callback();
277				return;
278			}
279			var count = 0;
280			selector.find('img, iframe').each(function(){
281				$(this).one('load', function() {
282				  if(++count == total) callback();
283				}).each(function () {
284					if(this.complete) $(this).trigger("load");
285				  // if(this.complete) $(this).load();
286				});
287			});
288		}
289
290		/**
291		 * Start the slider
292		 */
293		var start = function(){
294			// if infinite loop, prepare additional slides
295			if(slider.settings.infiniteLoop && slider.settings.mode != 'fade' && !slider.settings.ticker){
296				var slice = slider.settings.mode == 'vertical' ? slider.settings.minSlides : slider.settings.maxSlides;
297				var sliceAppend = slider.children.slice(0, slice).clone().addClass('bx-clone');
298				var slicePrepend = slider.children.slice(-slice).clone().addClass('bx-clone');
299				el.append(sliceAppend).prepend(slicePrepend);
300			}
301			// remove the loading DOM element
302			slider.loader.remove();
303			// set the left / top position of "el"
304			setSlidePosition();
305			// if "vertical" mode, always use adaptiveHeight to prevent odd behavior
306			if (slider.settings.mode == 'vertical') slider.settings.adaptiveHeight = true;
307			// set the viewport height
308			slider.viewport.height(getViewportHeight());
309			// make sure everything is positioned just right (same as a window resize)
310			el.redrawSlider();
311			// onSliderLoad callback
312			slider.settings.onSliderLoad(slider.active.index);
313			// slider has been fully initialized
314			slider.initialized = true;
315			// bind the resize call to the window
316			if (slider.settings.responsive) $(window).bind('resize', resizeWindow);
317			// if auto is true and has more than 1 page, start the show
318			if (slider.settings.auto && slider.settings.autoStart && (getPagerQty() > 1 || slider.settings.autoSlideForOnePage)) initAuto();
319			// if ticker is true, start the ticker
320			if (slider.settings.ticker) initTicker();
321			// if pager is requested, make the appropriate pager link active
322			if (slider.settings.pager) updatePagerActive(slider.settings.startSlide);
323			// check for any updates to the controls (like hideControlOnEnd updates)
324			if (slider.settings.controls) updateDirectionControls();
325			// if touchEnabled is true, setup the touch events
326			if (slider.settings.touchEnabled && !slider.settings.ticker) initTouch();
327		}
328
329		/**
330		 * Returns the calculated height of the viewport, used to determine either adaptiveHeight or the maxHeight value
331		 */
332		var getViewportHeight = function(){
333			var height = 0;
334			// first determine which children (slides) should be used in our height calculation
335			var children = $();
336			// if mode is not "vertical" and adaptiveHeight is false, include all children
337			if(slider.settings.mode != 'vertical' && !slider.settings.adaptiveHeight){
338				children = slider.children;
339			}else{
340				// if not carousel, return the single active child
341				if(!slider.carousel){
342					children = slider.children.eq(slider.active.index);
343				// if carousel, return a slice of children
344				}else{
345					// get the individual slide index
346					var currentIndex = slider.settings.moveSlides == 1 ? slider.active.index : slider.active.index * getMoveBy();
347					// add the current slide to the children
348					children = slider.children.eq(currentIndex);
349					// cycle through the remaining "showing" slides
350					for (i = 1; i <= slider.settings.maxSlides - 1; i++){
351						// if looped back to the start
352						if(currentIndex + i >= slider.children.length){
353							children = children.add(slider.children.eq(i - 1));
354						}else{
355							children = children.add(slider.children.eq(currentIndex + i));
356						}
357					}
358				}
359			}
360			// if "vertical" mode, calculate the sum of the heights of the children
361			if(slider.settings.mode == 'vertical'){
362				children.each(function(index) {
363				  height += $(this).outerHeight();
364				});
365				// add user-supplied margins
366				if(slider.settings.slideMargin > 0){
367					height += slider.settings.slideMargin * (slider.settings.minSlides - 1);
368				}
369			// if not "vertical" mode, calculate the max height of the children
370			}else{
371				height = Math.max.apply(Math, children.map(function(){
372					return $(this).outerHeight(false);
373				}).get());
374			}
375
376			if(slider.viewport.css('box-sizing') == 'border-box'){
377				height +=	parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom')) +
378							parseFloat(slider.viewport.css('border-top-width')) + parseFloat(slider.viewport.css('border-bottom-width'));
379			}else if(slider.viewport.css('box-sizing') == 'padding-box'){
380				height +=	parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom'));
381			}
382
383			return height;
384		}
385
386		/**
387		 * Returns the calculated width to be used for the outer wrapper / viewport
388		 */
389		var getViewportMaxWidth = function(){
390			var width = '100%';
391			if(slider.settings.slideWidth > 0){
392				if(slider.settings.mode == 'horizontal'){
393					width = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
394				}else{
395					width = slider.settings.slideWidth;
396				}
397			}
398			return width;
399		}
400
401		/**
402		 * Returns the calculated width to be applied to each slide
403		 */
404		var getSlideWidth = function(){
405			// start with any user-supplied slide width
406			var newElWidth = slider.settings.slideWidth;
407			// get the current viewport width
408			var wrapWidth = slider.viewport.width();
409			// if slide width was not supplied, or is larger than the viewport use the viewport width
410			if(slider.settings.slideWidth == 0 ||
411				(slider.settings.slideWidth > wrapWidth && !slider.carousel) ||
412				slider.settings.mode == 'vertical'){
413				newElWidth = wrapWidth;
414			// if carousel, use the thresholds to determine the width
415			}else if(slider.settings.maxSlides > 1 && slider.settings.mode == 'horizontal'){
416				if(wrapWidth > slider.maxThreshold){
417					// newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.maxSlides - 1))) / slider.settings.maxSlides;
418				}else if(wrapWidth < slider.minThreshold){
419					newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.minSlides - 1))) / slider.settings.minSlides;
420				}
421			}
422			return newElWidth;
423		}
424
425		/**
426		 * Returns the number of slides currently visible in the viewport (includes partially visible slides)
427		 */
428		var getNumberSlidesShowing = function(){
429			var slidesShowing = 1;
430			if(slider.settings.mode == 'horizontal' && slider.settings.slideWidth > 0){
431				// if viewport is smaller than minThreshold, return minSlides
432				if(slider.viewport.width() < slider.minThreshold){
433					slidesShowing = slider.settings.minSlides;
434				// if viewport is larger than minThreshold, return maxSlides
435				}else if(slider.viewport.width() > slider.maxThreshold){
436					slidesShowing = slider.settings.maxSlides;
437				// if viewport is between min / max thresholds, divide viewport width by first child width
438				}else{
439					var childWidth = slider.children.first().width() + slider.settings.slideMargin;
440					slidesShowing = Math.floor((slider.viewport.width() +
441						slider.settings.slideMargin) / childWidth);
442				}
443			// if "vertical" mode, slides showing will always be minSlides
444			}else if(slider.settings.mode == 'vertical'){
445				slidesShowing = slider.settings.minSlides;
446			}
447			return slidesShowing;
448		}
449
450		/**
451		 * Returns the number of pages (one full viewport of slides is one "page")
452		 */
453		var getPagerQty = function(){
454			var pagerQty = 0;
455			// if moveSlides is specified by the user
456			if(slider.settings.moveSlides > 0){
457				if(slider.settings.infiniteLoop){
458					pagerQty = Math.ceil(slider.children.length / getMoveBy());
459				}else{
460					// use a while loop to determine pages
461					var breakPoint = 0;
462					var counter = 0
463					// when breakpoint goes above children length, counter is the number of pages
464					while (breakPoint < slider.children.length){
465						++pagerQty;
466						breakPoint = counter + getNumberSlidesShowing();
467						counter += slider.settings.moveSlides <= getNumberSlidesShowing() ? slider.settings.moveSlides : getNumberSlidesShowing();
468					}
469				}
470			// if moveSlides is 0 (auto) divide children length by sides showing, then round up
471			}else{
472				pagerQty = Math.ceil(slider.children.length / getNumberSlidesShowing());
473			}
474			return pagerQty;
475		}
476
477		/**
478		 * Returns the number of indivual slides by which to shift the slider
479		 */
480		var getMoveBy = function(){
481			// if moveSlides was set by the user and moveSlides is less than number of slides showing
482			if(slider.settings.moveSlides > 0 && slider.settings.moveSlides <= getNumberSlidesShowing()){
483				return slider.settings.moveSlides;
484			}
485			// if moveSlides is 0 (auto)
486			return getNumberSlidesShowing();
487		}
488
489		/**
490		 * Sets the slider's (el) left or top position
491		 */
492		var setSlidePosition = function(){
493			// if last slide, not infinite loop, and number of children is larger than specified maxSlides
494			if(slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop){
495				if (slider.settings.mode == 'horizontal'){
496					// get the last child's position
497					var lastChild = slider.children.last();
498					var position = lastChild.position();
499					// set the left position
500					setPositionProperty(-(position.left - (slider.viewport.width() - lastChild.outerWidth())), 'reset', 0);
501				}else if(slider.settings.mode == 'vertical'){
502					// get the last showing index's position
503					var lastShowingIndex = slider.children.length - slider.settings.minSlides;
504					var position = slider.children.eq(lastShowingIndex).position();
505					// set the top position
506					setPositionProperty(-position.top, 'reset', 0);
507				}
508			// if not last slide
509			}else{
510				// get the position of the first showing slide
511				var position = slider.children.eq(slider.active.index * getMoveBy()).position();
512				// check for last slide
513				if (slider.active.index == getPagerQty() - 1) slider.active.last = true;
514				// set the repective position
515				if (position != undefined){
516					if (slider.settings.mode == 'horizontal') setPositionProperty(-position.left, 'reset', 0);
517					else if (slider.settings.mode == 'vertical') setPositionProperty(-position.top, 'reset', 0);
518				}
519			}
520		}
521
522		/**
523		 * Sets the el's animating property position (which in turn will sometimes animate el).
524		 * If using CSS, sets the transform property. If not using CSS, sets the top / left property.
525		 *
526		 * @param value (int)
527		 *  - the animating property's value
528		 *
529		 * @param type (string) 'slider', 'reset', 'ticker'
530		 *  - the type of instance for which the function is being
531		 *
532		 * @param duration (int)
533		 *  - the amount of time (in ms) the transition should occupy
534		 *
535		 * @param params (array) optional
536		 *  - an optional parameter containing any variables that need to be passed in
537		 */
538		var setPositionProperty = function(value, type, duration, params){
539			// use CSS transform
540			if(slider.usingCSS){
541				// determine the translate3d value
542				var propValue = slider.settings.mode == 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)';
543				// add the CSS transition-duration
544				el.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's');
545				if(type == 'slide'){
546					// set the property value
547					el.css(slider.animProp, propValue);
548					// bind a callback method - executes when CSS transition completes
549					el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
550						// unbind the callback
551						el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
552						updateAfterSlideTransition();
553					});
554				}else if(type == 'reset'){
555					el.css(slider.animProp, propValue);
556				}else if(type == 'ticker'){
557					// make the transition use 'linear'
558					el.css('-' + slider.cssPrefix + '-transition-timing-function', 'linear');
559					el.css(slider.animProp, propValue);
560					// bind a callback method - executes when CSS transition completes
561					el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
562						// unbind the callback
563						el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
564						// reset the position
565						setPositionProperty(params['resetValue'], 'reset', 0);
566						// start the loop again
567						tickerLoop();
568					});
569				}
570			// use JS animate
571			}else{
572				var animateObj = {};
573				animateObj[slider.animProp] = value;
574				if(type == 'slide'){
575					el.animate(animateObj, duration, slider.settings.easing, function(){
576						updateAfterSlideTransition();
577					});
578				}else if(type == 'reset'){
579					el.css(slider.animProp, value)
580				}else if(type == 'ticker'){
581					el.animate(animateObj, speed, 'linear', function(){
582						setPositionProperty(params['resetValue'], 'reset', 0);
583						// run the recursive loop after animation
584						tickerLoop();
585					});
586				}
587			}
588		}
589
590		/**
591		 * Populates the pager with proper amount of pages
592		 */
593		var populatePager = function(){
594			var pagerHtml = '';
595			var pagerQty = getPagerQty();
596			// loop through each pager item
597			for(var i=0; i < pagerQty; i++){
598				var linkContent = '';
599				// if a buildPager function is supplied, use it to get pager link value, else use index + 1
600				if(slider.settings.buildPager && $.isFunction(slider.settings.buildPager)){
601					linkContent = slider.settings.buildPager(i);
602					slider.pagerEl.addClass('bx-custom-pager');
603				}else{
604					linkContent = i + 1;
605					slider.pagerEl.addClass('bx-default-pager');
606				}
607				// var linkContent = slider.settings.buildPager && $.isFunction(slider.settings.buildPager) ? slider.settings.buildPager(i) : i + 1;
608				// add the markup to the string
609				pagerHtml += '<div class="bx-pager-item">
609<a href="" data-slide-index="' + i + '" class="bx-pager-link">' + linkContent + '</a></div>';
610			};
611			// populate the pager element with pager links
612			slider.pagerEl.html(pagerHtml);
613		}
614
615		/**
616		 * Appends the pager to the controls element
617		 */
618		var appendPager = function(){
619			if(!slider.settings.pagerCustom){
620				// create the pager DOM element
621				slider.pagerEl = $('<div class="bx-pager" />');
622				// if a pager selector was supplied, populate it with the pager
623				if(slider.settings.pagerSelector){
624					$(slider.settings.pagerSelector).html(slider.pagerEl);
625				// if no pager selector was supplied, add it after the wrapper
626				}else{
627					slider.controls.el.addClass('bx-has-pager').append(slider.pagerEl);
628				}
629				// populate the pager
630				populatePager();
631			}else{
632				slider.pagerEl = $(slider.settings.pagerCustom);
633			}
634			// assign the pager click binding
635			slider.pagerEl.on('click', 'a', clickPagerBind);
636		}
637
638		/**
639		 * Appends prev / next controls to the controls element
640		 */
641		var appendControls = function(){
642			slider.controls.next = $('<a class="bx-next" href="">' + slider.settings.nextText + '</a>');
643			slider.controls.prev = $('<a class="bx-prev" href="">' + slider.settings.prevText + '</a>');
644			// bind click actions to the controls
645			slider.controls.next.bind('click', clickNextBind);
646			slider.controls.prev.bind('click', clickPrevBind);
647			// if nextSlector was supplied, populate it
648			if(slider.settings.nextSelector){
649				$(slider.settings.nextSelector).append(slider.controls.next);
650			}
651			// if prevSlector was supplied, populate it
652			if(slider.settings.prevSelector){
653				$(slider.settings.prevSelector).append(slider.controls.prev);
654			}
655			// if no custom selectors were supplied
656			if(!slider.settings.nextSelector && !slider.settings.prevSelector){
657				// add the controls to the DOM
658				slider.controls.directionEl = $('<div class="bx-controls-direction" />');
659				// add the control elements to the directionEl
660				slider.controls.directionEl.append(slider.controls.prev).append(slider.controls.next);
661				// slider.viewport.append(slider.controls.directionEl);
662				slider.controls.el.addClass('bx-has-controls-direction').append(slider.controls.directionEl);
663			}
664		}
665
666		/**
667		 * Appends start / stop auto controls to the controls element
668		 */
669		var appendControlsAuto = function(){
670			slider.controls.start = $('<div class="bx-controls-auto-item"><a class="bx-start" href="">' + slider.settings.startText + '</a></div>');
671			slider.controls.stop = $('<div class="bx-controls-auto-item"><a class="bx-stop" href="">' + slider.settings.stopText + '</a></div>');
672			// add the controls to the DOM
673			slider.controls.autoEl = $('<div class="bx-controls-auto" />');
674			// bind click actions to the controls
675			slider.controls.autoEl.on('click', '.bx-start', clickStartBind);
676			slider.controls.autoEl.on('click', '.bx-stop', clickStopBind);
677			// if autoControlsCombine, insert only the "start" control
678			if(slider.settings.autoControlsCombine){
679				slider.controls.autoEl.append(slider.controls.start);
680			// if autoControlsCombine is false, insert both controls
681			}else{
682				slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop);
683			}
684			// if auto controls selector was supplied, populate it with the controls
685			if(slider.settings.autoControlsSelector){
686				$(slider.settings.autoControlsSelector).html(slider.controls.autoEl);
687			// if auto controls selector was not supplied, add it after the wrapper
688			}else{
689				slider.controls.el.addClass('bx-has-controls-auto').append(slider.controls.autoEl);
690			}
691			// update the auto controls
692			updateAutoControls(slider.settings.autoStart ? 'stop' : 'start');
693		}
694
695		/**
696		 * Appends image captions to the DOM
697		 */
698		var appendCaptions = function(){
699			// cycle through each child
700			slider.children.each(function(index){
701				// get the image title attribute
702				var title = $(this).find('img:first').attr('title');
703				// append the caption
704				if (title != undefined && ('' + title).length) {
705                    $(this).append('<div class="bx-caption"><span>' + title + '</span></div>');
706                }
707			});
708		}
709
710		/**
711		 * Click next binding
712		 *
713		 * @param e (event)
714		 *  - DOM event object
715		 */
716		var clickNextBind = function(e){
717			// if auto show is running, stop it
718			// if (slider.settings.auto) el.stopAuto();
719			el.goToNextSlide();
720			e.preventDefault();
721		}
722
723		/**
724		 * Click prev binding
725		 *
726		 * @param e (event)
727		 *  - DOM event object
728		 */
729		var clickPrevBind = function(e){
730			// if auto show is running, stop it
731			// if (slider.settings.auto) el.stopAuto();
732			el.goToPrevSlide();
733			e.preventDefault();
734		}
735
736		/**
737		 * Click start binding
738		 *
739		 * @param e (event)
740		 *  - DOM event object
741		 */
742		var clickStartBind = function(e){
743			el.startAuto();
744			e.preventDefault();
745		}
746
747		/**
748		 * Click stop binding
749		 *
750		 * @param e (event)
751		 *  - DOM event object
752		 */
753		var clickStopBind = function(e){
754			el.stopAuto();
755			e.preventDefault();
756		}
757
758		/**
759		 * Click pager binding
760		 *
761		 * @param e (event)
762		 *  - DOM event object
763		 */
764		var clickPagerBind = function(e){
765			// if auto show is running, stop it
766			// if (slider.settings.auto) el.stopAuto();
767			var pagerLink = $(e.currentTarget);
768			if(pagerLink.attr('data-slide-index') !== undefined){
769				var pagerIndex = parseInt(pagerLink.attr('data-slide-index'));
770				// if clicked pager link is not active, continue with the goToSlide call
771				if(pagerIndex != slider.active.index) el.goToSlide(pagerIndex);
772				e.preventDefault();
773			}
774		}
775
776		/**
777		 * Updates the pager links with an active class
778		 *
779		 * @param slideIndex (int)
780		 *  - index of slide to make active
781		 */
782		var updatePagerActive = function(slideIndex){
783			// if "short" pager type
784			var len = slider.children.length; // nb of children
785			if(slider.settings.pagerType == 'short'){
786				if(slider.settings.maxSlides > 1) {
787					len = Math.ceil(slider.children.length/slider.settings.maxSlides);
788				}
789				slider.pagerEl.html( (slideIndex + 1) + slider.settings.pagerShortSeparator + len);
790				return;
791			}
792			// remove all pager active classes
793			slider.pagerEl.find('a').removeClass('active');
794			// apply the active class for all pagers
795			slider.pagerEl.each(function(i, el) { $(el).find('a').eq(slideIndex).addClass('active'); });
796		}
797
798		/**
799		 * Performs needed actions after a slide transition
800		 */
801		var updateAfterSlideTransition = function(){
802			// if infinte loop is true
803			if(slider.settings.infiniteLoop){
804				var position = '';
805				// first slide
806				if(slider.active.index == 0){
807					// set the new position
808					position = slider.children.eq(0).position();
809				// carousel, last slide
810				}else if(slider.active.index == getPagerQty() - 1 && slider.carousel){
811					position = slider.children.eq((getPagerQty() - 1) * getMoveBy()).position();
812				// last slide
813				}else if(slider.active.index == slider.children.length - 1){
814					position = slider.children.eq(slider.children.length - 1).position();
815				}
816				if(position){
817					if (slider.settings.mode == 'horizontal') { setPositionProperty(-position.left, 'reset', 0); }
818					else if (slider.settings.mode == 'vertical') { setPositionProperty(-position.top, 'reset', 0); }
819				}
820			}
821			// declare that the transition is complete
822			slider.working = false;
823			// onSlideAfter callback
824			slider.settings.onSlideAfter(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
825		}
826
827		/**
828		 * Updates the auto controls state (either active, or combined switch)
829		 *
830		 * @param state (string) "start", "stop"
831		 *  - the new state of the auto show
832		 */
833		var updateAutoControls = function(state){
834			// if autoControlsCombine is true, replace the current control with the new state
835			if(slider.settings.autoControlsCombine){
836				slider.controls.autoEl.html(slider.controls[state]);
837			// if autoControlsCombine is false, apply the "active" class to the appropriate control
838			}else{
839				slider.controls.autoEl.find('a').removeClass('active');
840				slider.controls.autoEl.find('a:not(.bx-' + state + ')').addClass('active');
841			}
842		}
843
844		/**
845		 * Updates the direction controls (checks if either should be hidden)
846		 */
847		var updateDirectionControls = function(){
848			if(getPagerQty() == 1){
849				slider.controls.prev.addClass('disabled');
850				slider.controls.next.addClass('disabled');
851			}else if(!slider.settings.infiniteLoop && slider.settings.hideControlOnEnd){
852				// if first slide
853				if (slider.active.index == 0){
854					slider.controls.prev.addClass('disabled');
855					slider.controls.next.removeClass('disabled');
856				// if last slide
857				}else if(slider.active.index == getPagerQty() - 1){
858					slider.controls.next.addClass('disabled');
859					slider.controls.prev.removeClass('disabled');
860				// if any slide in the middle
861				}else{
862					slider.controls.prev.removeClass('disabled');
863					slider.controls.next.removeClass('disabled');
864				}
865			}
866		}
867
868		/**
869		 * Initialzes the auto process
870		 */
871		var initAuto = function(){
872			// if autoDelay was supplied, launch the auto show using a setTimeout() call
873			if(slider.settings.autoDelay > 0){
874				var timeout = setTimeout(el.startAuto, slider.settings.autoDelay);
875			// if autoDelay was not supplied, start the auto show normally
876			}else{
877				el.startAuto();
878			}
879			// if autoHover is requested
880			if(slider.settings.autoHover){
881				// on el hover
882				el.hover(function(){
883					// if the auto show is currently playing (has an active interval)
884					if(slider.interval){
885						// stop the auto show and pass true agument which will prevent control update
886						el.stopAuto(true);
887						// create a new autoPaused value which will be used by the relative "mouseout" event
888						slider.autoPaused = true;
889					}
890				}, function(){
891					// if the autoPaused value was created be the prior "mouseover" event
892					if(slider.autoPaused){
893						// start the auto show and pass true agument which will prevent control update
894						el.startAuto(true);
895						// reset the autoPaused value
896						slider.autoPaused = null;
897					}
898				});
899			}
900		}
901
902		/**
903		 * Initialzes the ticker process
904		 */
905		var initTicker = function(){
906			var startPosition = 0;
907			// if autoDirection is "next", append a clone of the entire slider
908			if(slider.settings.autoDirection == 'next'){
909				el.append(slider.children.clone().addClass('bx-clone'));
910			// if autoDirection is "prev", prepend a clone of the entire slider, and set the left position
911			}else{
912				el.prepend(slider.children.clone().addClass('bx-clone'));
913				var position = slider.children.first().position();
914				startPosition = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
915			}
916			setPositionProperty(startPosition, 'reset', 0);
917			// do not allow controls in ticker mode
918			slider.settings.pager = false;
919			slider.settings.controls = false;
920			slider.settings.autoControls = false;
921			// if autoHover is requested
922			if(slider.settings.tickerHover && !slider.usingCSS){
923				// on el hover
924				slider.viewport.hover(function(){
925					el.stop();
926				}, function(){
927					// calculate the total width of children (used to calculate the speed ratio)
928					var totalDimens = 0;
929					slider.children.each(function(index){
930					  totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);
931					});
932					// calculate the speed ratio (used to determine the new speed to finish the paused animation)
933					var ratio = slider.settings.speed / totalDimens;
934					// determine which property to use
935					var property = slider.settings.mode == 'horizontal' ? 'left' : 'top';
936					// calculate the new speed
937					var newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property)))));
938					tickerLoop(newSpeed);
939				});
940			}
941			// start the ticker loop
942			tickerLoop();
943		}
944
945		/**
946		 * Runs a continuous loop, news ticker-style
947		 */
948		var tickerLoop = function(resumeSpeed){
949			speed = resumeSpeed ? resumeSpeed : slider.settings.speed;
950			var position = {left: 0, top: 0};
951			var reset = {left: 0, top: 0};
952			// if "next" animate left position to last child, then reset left to 0
953			if(slider.settings.autoDirection == 'next'){
954				position = el.find('.bx-clone').first().position();
955			// if "prev" animate left position to 0, then reset left to first non-clone child
956			}else{
957				reset = slider.children.first().position();
958			}
959			var animateProperty = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
960			var resetValue = slider.settings.mode == 'horizontal' ? -reset.left : -reset.top;
961			var params = {resetValue: resetValue};
962			setPositionProperty(animateProperty, 'ticker', speed, params);
963		}
964
965		/**
966		 * Initializes touch events
967		 */
968		var initTouch = function(){
969			// initialize object to contain all touch values
970			slider.touch = {
971				start: {x: 0, y: 0},
972				end: {x: 0, y: 0}
973			}
974			slider.viewport.bind('touchstart', onTouchStart);
975		}
976
977		/**
978		 * Event handler for "touchstart"
979		 *
980		 * @param e (event)
981		 *  - DOM event object
982		 */
983		var onTouchStart = function(e){
984			if(slider.working){
985				e.preventDefault();
986			}else{
987				// record the original position when touch starts
988				slider.touch.originalPos = el.position();
989				var orig = e.originalEvent;
990				// record the starting touch x, y coordinates
991				slider.touch.start.x = orig.changedTouches[0].pageX;
992				slider.touch.start.y = orig.changedTouches[0].pageY;
993				// bind a "touchmove" event to the viewport
994				slider.viewport.bind('touchmove', onTouchMove);
995				// bind a "touchend" event to the viewport
996				slider.viewport.bind('touchend', onTouchEnd);
997			}
998		}
999
1000		/**
1001		 * Event handler for "touchmove"
1002		 *
1003		 * @param e (event)
1004		 *  - DOM event object
1005		 */
1006		var onTouchMove = function(e){
1007			var orig = e.originalEvent;
1008			// if scrolling on y axis, do not prevent default
1009			var xMovement = Math.abs(orig.changedTouches[0].pageX - slider.touch.start.x);
1010			var yMovement = Math.abs(orig.changedTouches[0].pageY - slider.touch.start.y);
1011			// x axis swipe
1012			if((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX){
1013				e.preventDefault();
1014			// y axis swipe
1015			}else if((yMovement * 3) > xMovement && slider.settings.preventDefaultSwipeY){
1016				e.preventDefault();
1017			}
1018			if(slider.settings.mode != 'fade' && slider.settings.oneToOneTouch){
1019				var value = 0;
1020				// if horizontal, drag along x axis
1021				if(slider.settings.mode == 'horizontal'){
1022					var change = orig.changedTouches[0].pageX - slider.touch.start.x;
1023					value = slider.touch.originalPos.left + change;
1024				// if vertical, drag along y axis
1025				}else{
1026					var change = orig.changedTouches[0].pageY - slider.touch.start.y;
1027					value = slider.touch.originalPos.top + change;
1028				}
1029				setPositionProperty(value, 'reset', 0);
1030			}
1031		}
1032
1033		/**
1034		 * Event handler for "touchend"
1035		 *
1036		 * @param e (event)
1037		 *  - DOM event object
1038		 */
1039		var onTouchEnd = function(e){
1040			slider.viewport.unbind('touchmove', onTouchMove);
1041			var orig = e.originalEvent;
1042			var value = 0;
1043			// record end x, y positions
1044			slider.touch.end.x = orig.changedTouches[0].pageX;
1045			slider.touch.end.y = orig.changedTouches[0].pageY;
1046			// if fade mode, check if absolute x distance clears the threshold
1047			if(slider.settings.mode == 'fade'){
1048				var distance = Math.abs(slider.touch.start.x - slider.touch.end.x);
1049				if(distance >= slider.settings.swipeThreshold){
1050					slider.touch.start.x > slider.touch.end.x ? el.goToNextSlide() : el.goToPrevSlide();
1051					el.stopAuto();
1052				}
1053			// not fade mode
1054			}else{
1055				var distance = 0;
1056				// calculate distance and el's animate property
1057				if(slider.settings.mode == 'horizontal'){
1058					distance = slider.touch.end.x - slider.touch.start.x;
1059					value = slider.touch.originalPos.left;
1060				}else{
1061					distance = slider.touch.end.y - slider.touch.start.y;
1062					value = slider.touch.originalPos.top;
1063				}
1064				// if not infinite loop and first / last slide, do not attempt a slide transition
1065				if(!slider.settings.infiniteLoop && ((slider.active.index == 0 && distance > 0) || (slider.active.last && distance < 0))){
1066					setPositionProperty(value, 'reset', 200);
1067				}else{
1068					// check if distance clears threshold
1069					if(Math.abs(distance) >= slider.settings.swipeThreshold){
1070						distance < 0 ? el.goToNextSlide() : el.goToPrevSlide();
1071						el.stopAuto();
1072					}else{
1073						// el.animate(property, 200);
1074						setPositionProperty(value, 'reset', 200);
1075					}
1076				}
1077			}
1078			slider.viewport.unbind('touchend', onTouchEnd);
1079		}
1080
1081		/**
1082		 * Window resize event callback
1083		 */
1084		var resizeWindow = function(e){
1085			// don't do anything if slider isn't initialized.
1086			if(!slider.initialized) return;
1087			// get the new window dimens (again, thank you IE)
1088			var windowWidthNew = $(window).width();
1089			var windowHeightNew = $(window).height();
1090			// make sure that it is a true window resize
1091			// *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements
1092			// are resized. Can you just die already?*
1093			if(windowWidth != windowWidthNew || windowHeight != windowHeightNew){
1094				// set the new window dimens
1095				windowWidth = windowWidthNew;
1096				windowHeight = windowHeightNew;
1097				// update all dynamic elements
1098				el.redrawSlider();
1099				// Call user resize handler
1100				slider.settings.onSliderResize.call(el, slider.active.index);
1101			}
1102		}
1103
1104		/**
1105		 * ===================================================================================
1106		 * = PUBLIC FUNCTIONS
1107		 * ===================================================================================
1108		 */
1109
1110		/**
1111		 * Performs slide transition to the specified slide
1112		 *
1113		 * @param slideIndex (int)
1114		 *  - the destination slide's index (zero-based)
1115		 *
1116		 * @param direction (string)
1117		 *  - INTERNAL USE ONLY - the direction of travel ("prev" / "next")
1118		 */
1119		el.goToSlide = function(slideIndex, direction){
1120			// if plugin is currently in motion, ignore request
1121			if(slider.working || slider.active.index == slideIndex) return;
1122			// declare that plugin is in motion
1123			slider.working = true;
1124			// store the old index
1125			slider.oldIndex = slider.active.index;
1126			// if slideIndex is less than zero, set active index to last child (this happens during infinite loop)
1127			if(slideIndex < 0){
1128				slider.active.index = getPagerQty() - 1;
1129			// if slideIndex is greater than children length, set active index to 0 (this happens during infinite loop)
1130			}else if(slideIndex >= getPagerQty()){
1131				slider.active.index = 0;
1132			// set active index to requested slide
1133			}else{
1134				slider.active.index = slideIndex;
1135			}
1136			// onSlideBefore, onSlideNext, onSlidePrev callbacks
1137			slider.settings.onSlideBefore(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1138			if(direction == 'next'){
1139				slider.settings.onSlideNext(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1140			}else if(direction == 'prev'){
1141				slider.settings.onSlidePrev(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1142			}
1143			// check if last slide
1144			slider.active.last = slider.active.index >= getPagerQty() - 1;
1145			// update the pager with active class
1146			if(slider.settings.pager) updatePagerActive(slider.active.index);
1147			// // check for direction control update
1148			if(slider.settings.controls) updateDirectionControls();
1149			// if slider is set to mode: "fade"
1150			if(slider.settings.mode == 'fade'){
1151				// if adaptiveHeight is true and next height is different from current height, animate to the new height
1152				if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHe
1152ight()){
1153					slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
1154				}
1155				// fade out the visible child and reset its z-index value
1156				slider.children.filter(':visible').fadeOut(slider.settings.speed).css({zIndex: 0});
1157				// fade in the newly requested slide
1158				slider.children.eq(slider.active.index).css('zIndex', slider.settings.slideZIndex+1).fadeIn(slider.settings.speed, function(){
1159					$(this).css('zIndex', slider.settings.slideZIndex);
1160					updateAfterSlideTransition();
1161				});
1162			// slider mode is not "fade"
1163			}else{
1164				// if adaptiveHeight is true and next height is different from current height, animate to the new height
1165				if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){
1166					slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
1167				}
1168				var moveBy = 0;
1169				var position = {left: 0, top: 0};
1170				// if carousel and not infinite loop
1171				if(!slider.settings.infiniteLoop && slider.carousel && slider.active.last){
1172					if(slider.settings.mode == 'horizontal'){
1173						// get the last child position
1174						var lastChild = slider.children.eq(slider.children.length - 1);
1175						position = lastChild.position();
1176						// calculate the position of the last slide
1177						moveBy = slider.viewport.width() - lastChild.outerWidth();
1178					}else{
1179						// get last showing index position
1180						var lastShowingIndex = slider.children.length - slider.settings.minSlides;
1181						position = slider.children.eq(lastShowingIndex).position();
1182					}
1183					// horizontal carousel, going previous while on first slide (infiniteLoop mode)
1184				}else if(slider.carousel && slider.active.last && direction == 'prev'){
1185					// get the last child position
1186					var eq = slider.settings.moveSlides == 1 ? slider.settings.maxSlides - getMoveBy() : ((getPagerQty() - 1) * getMoveBy()) - (slider.children.length - slider.settings.maxSlides);
1187					var lastChild = el.children('.bx-clone').eq(eq);
1188					position = lastChild.position();
1189				// if infinite loop and "Next" is clicked on the last slide
1190				}else if(direction == 'next' && slider.active.index == 0){
1191					// get the last clone position
1192					position = el.find('> .bx-clone').eq(slider.settings.maxSlides).position();
1193					slider.active.last = false;
1194				// normal non-zero requests
1195				}else if(slideIndex >= 0){
1196					var requestEl = slideIndex * getMoveBy();
1197					position = slider.children.eq(requestEl).position();
1198				}
1199
1200				/* If the position doesn't exist
1201				 * (e.g. if you destroy the slider on a next click),
1202				 * it doesn't throw an error.
1203				 */
1204				if ("undefined" !== typeof(position)) {
1205					var value = slider.settings.mode == 'horizontal' ? -(position.left - moveBy) : -position.top;
1206					// plugin values to be animated
1207					setPositionProperty(value, 'slide', slider.settings.speed);
1208				}
1209			}
1210		}
1211
1212		/**
1213		 * Transitions to the next slide in the show
1214		 */
1215		el.goToNextSlide = function(){
1216			// if infiniteLoop is false and last page is showing, disregard call
1217			if (!slider.settings.infiniteLoop && slider.active.last) return;
1218			var pagerIndex = parseInt(slider.active.index) + 1;
1219			el.goToSlide(pagerIndex, 'next');
1220		}
1221
1222		/**
1223		 * Transitions to the prev slide in the show
1224		 */
1225		el.goToPrevSlide = function(){
1226			// if infiniteLoop is false and last page is showing, disregard call
1227			if (!slider.settings.infiniteLoop && slider.active.index == 0) return;
1228			var pagerIndex = parseInt(slider.active.index) - 1;
1229			el.goToSlide(pagerIndex, 'prev');
1230		}
1231
1232		/**
1233		 * Starts the auto show
1234		 *
1235		 * @param preventControlUpdate (boolean)
1236		 *  - if true, auto controls state will not be updated
1237		 */
1238		el.startAuto = function(preventControlUpdate){
1239			// if an interval already exists, disregard call
1240			if(slider.interval) return;
1241			// create an interval
1242			slider.interval = setInterval(function(){
1243				slider.settings.autoDirection == 'next' ? el.goToNextSlide() : el.goToPrevSlide();
1244			}, slider.settings.pause);
1245			// if auto controls are displayed and preventControlUpdate is not true
1246			if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('stop');
1247		}
1248
1249		/**
1250		 * Stops the auto show
1251		 *
1252		 * @param preventControlUpdate (boolean)
1253		 *  - if true, auto controls state will not be updated
1254		 */
1255		el.stopAuto = function(preventControlUpdate){
1256			// if no interval exists, disregard call
1257			if(!slider.interval) return;
1258			// clear the interval
1259			clearInterval(slider.interval);
1260			slider.interval = null;
1261			// if auto controls are displayed and preventControlUpdate is not true
1262			if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('start');
1263		}
1264
1265		/**
1266		 * Returns current slide index (zero-based)
1267		 */
1268		el.getCurrentSlide = function(){
1269			return slider.active.index;
1270		}
1271
1272		/**
1273		 * Returns current slide element
1274		 */
1275		el.getCurrentSlideElement = function(){
1276			return slider.children.eq(slider.active.index);
1277		}
1278
1279		/**
1280		 * Returns number of slides in show
1281		 */
1282		el.getSlideCount = function(){
1283			return slider.children.length;
1284		}
1285
1286		/**
1287		 * Update all dynamic slider elements
1288		 */
1289		el.redrawSlider = function(){
1290			// resize all children in ratio to new screen size
1291			slider.children.add(el.find('.bx-clone')).width(getSlideWidth());
1292			// adjust the height
1293			slider.viewport.css('height', getViewportHeight());
1294			// update the slide position
1295			if(!slider.settings.ticker) setSlidePosition();
1296			// if active.last was true before the screen resize, we want
1297			// to keep it last no matter what screen size we end on
1298			if (slider.active.last) slider.active.index = getPagerQty() - 1;
1299			// if the active index (page) no longer exists due to the resize, simply set the index as last
1300			if (slider.active.index >= getPagerQty()) slider.active.last = true;
1301			// if a pager is being displayed and a custom pager is not being used, update it
1302			if(slider.settings.pager && !slider.settings.pagerCustom){
1303				populatePager();
1304				updatePagerActive(slider.active.index);
1305			}
1306		}
1307
1308		/**
1309		 * Destroy the current instance of the slider (revert everything back to original state)
1310		 */
1311		el.destroySlider = function(){
1312			// don't do anything if slider has already been destroyed
1313			if(!slider.initialized) return;
1314			slider.initialized = false;
1315			$('.bx-clone', this).remove();
1316			slider.children.each(function() {
1317				$(this).data("origStyle") != undefined ? $(this).attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
1318			});
1319			$(this).data("origStyle") != undefined ? this.attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
1320			$(this).unwrap().unwrap();
1321			if(slider.controls.el) slider.controls.el.remove();
1322			if(slider.controls.next) slider.controls.next.remove();
1323			if(slider.controls.prev) slider.controls.prev.remove();
1324			if(slider.pagerEl && slider.settings.controls) slider.pagerEl.remove();
1325			$('.bx-caption', this).remove();
1326			if(slider.controls.autoEl) slider.controls.autoEl.remove();
1327			clearInterval(slider.interval);
1328			if(slider.settings.responsive) $(window).unbind('resize', resizeWindow);
1329		}
1330
1331		/**
1332		 * Reload the slider (revert all DOM changes, and re-initialize)
1333		 */
1334		el.reloadSlider = function(settings){
1335			if (settings != undefined) options = settings;
1336			el.destroySlider();
1337			init();
1338		}
1339
1340		init();
1341
1342		// returns the current jQuery object
1343		return this;
1344	}
1345
1346})(jQuery);
1347/*! jQuery Validation Plugin - v1.16.0 - 12/2/2016
1348 * http://jqueryvalidation.org/
1349 * Copyright (c) 2016 Jörn Zaefferer; Licensed MIT */
1350!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return!c.settings.submitHandler||(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element
vendor: 12,786 bytes, line 1350
1350(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(null!=j&&null!=j.form){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){!this.form&&this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0]);var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)a[b]&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0]),!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);if("function"==typeof f.normalizer){if(i=f.normalizer.call(b,i),"string"!=typeof i)throw new TypeError("The normalizer should return a string value.");delete f.normalizer}for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j instanceof TypeError&&(j.message+=".  Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]},defaultMessage:function(b,c){"string"==typeof c&&(c={method:c});var d=this.findDefined(this.customMessage(b.name,c.method),this.customDataMessage(b,c.method),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c.method],"<strong>Warning: No message defined for "+b.name+"</strong>"),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.n
1350ame],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);
vendor: 5,900 bytes, line 1350
1350return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[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])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("val
1350idate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a});/**
1351 * UAParser.js v0.7.14
1352 * Lightweight JavaScript-based User-Agent string parser
1353 * https://github.com/faisalman/ua-parser-js
1354 *
1355 * Copyright © 2012-2016 Faisal Salman <[email protected]>
1356 * Dual licensed under GPLv2 & MIT
1357 */
1358(function(window,undefined){"use strict";var LIBVERSION="0.7.14",EMPTY="",UNKNOWN="?",FUNC_TYPE="function",UNDEF_TYPE="undefined",OBJ_TYPE="object",STR_TYPE="string",MAJOR="major",MODEL="model",NAME="name",TYPE="type",VENDOR="vendor",VERSION="version",ARCHITECTURE="architecture",CONSOLE="console",MOBILE="mobile",TABLET="tablet",SMARTTV="smarttv",WEARABLE="wearable",EMBEDDED="embedded";var util={extend:function(regexes,extensions){var margedRegexes={};for(var i in regexes){if(extensions[i]&&extensions[i].length%2===0){margedRegexes[i]=extensions[i].concat(regexes[i])}else{margedRegexes[i]=regexes[i]}}return margedRegexes},has:function(str1,str2){if(typeof str1==="string"){return str2.toLowerCase().indexOf(str1.toLowerCase())!==-1}else{return false}},lowerize:function(str){return str.toLowerCase()},major:function(version){return typeof version===STR_TYPE?version.replace(/[^\d\.]/g,"").split(".")[0]:undefined},trim:function(str){return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}};var mapper={rgx:function(ua,arrays){var i=0,j,k,p,q,matches,match;while(i<arrays.length&&!matches){var regex=arrays[i],props=arrays[i+1];j=k=0;while(j<regex.length&&!matches){matches=regex[j++].exec(ua);if(!!matches){for(p=0;p<props.length;p++){match=matches[++k];q=props[p];if(typeof q===OBJ_TYPE&&q.length>0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j<map[i].length;j++){if(util.has(map[i][j],str)){return i===UNKNOWN?undefined:i}}}else if(util.has(map[i],str)){return i===UNKNOWN?undefined:i}}return str}};var maps={browser:{oldsafari:{version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{amazon:{model:{"Fire Phone":["SD","KF"]}},sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2000:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"}}}};var regexes={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[NAME,VERSION],[/(opios)[\/\s]+([\w\.]+)/i],[[NAME,"Opera Mini"],VERSION],[/\s(opr)\/([\w\.]+)/i],[[NAME,"Opera"],VERSION],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\/([\w\.-]+)/i],[NAME,VERSION],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[NAME,"IE"],VERSION],[/(edge)\/((\d+)?[\w\.]+)/i],[NAME,VERSION],[/(yabrowser)\/([\w\.]+)/i],[[NAME,"Yandex"],VERSION],[/(puffin)\/([\w\.]+)/i],[[NAME,"Puffin"],VERSION],[/((?:[\s\/]
1358)uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i],[[NAME,"UCBrowser"],VERSION],[/(comodo_dragon)\/([\w\.]+)/i],[[NAME,/_/g," "],VERSION],[/(micromessenger)\/([\w\.]+)/i],[[NAME,"WeChat"],VERSION],[/(QQ)\/([\d\.]+)/i],[NAME,VERSION],[/m?(qqbrowser)[\/\s]?([\w\.]+)/i],[NAME,VERSION],[/xiaomi\/miuibrowser\/([\w\.]+)/i],[VERSION,[NAME,"MIUI Browser"]],[/;fbav\/([\w\.]+);/i],[VERSION,[NAME,"Facebook"]],[/(headlesschrome) ([\w\.]+)/i],[VERSION,[NAME,"Chrome Headless"]],[/\swv\).+(chrome)\/([\w\.]+)/i],[[NAME,/(.+)/,"$1 WebView"],VERSION],[/((?:oculus|samsung)browser)\/([\w\.]+)/i],[[NAME,/(.+(?:g|us))(.+)/,"$1 $2"],VERSION],[/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i],[VERSION,[NAME,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i],[NAME,VERSION],[/(dolfin)\/([\w\.]+)/i],[[NAME,"Dolphin"],VERSION],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[NAME,"Chrome"],VERSION],[/(coast)\/([\w\.]+)/i],[[NAME,"Opera Coast"],VERSION],[/fxios\/([\w\.-]+)/i],[VERSION,[NAME,"Firefox"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[VERSION,[NAME,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[VERSION,NAME],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[NAME,[VERSION,mapper.str,maps.browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[NAME,VERSION],[/(navigator|netscape)\/([\w\.-]+)/i],[[NAME,"Netscape"],VERSION],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.
vendor: 4,348 bytes, line 1358
1358+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[NAME,VERSION]],cpu:[[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],[[ARCHITECTURE,"amd64"]],[/(ia32(?=;))/i],[[ARCHITECTURE,util.lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[ARCHITECTURE,"ia32"]],[/windows\s(ce|mobile);\sppc;/i],[[ARCHITECTURE,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],[[ARCHITECTURE,/ower/,"",util.lowerize]],[/(sun4\w)[;\)]/i],[[ARCHITECTURE,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i],[[ARCHITECTURE,util.lowerize]]],device:[[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],[MODEL,VENDOR,[TYPE,TABLET]],[/applecoremedia\/[\w\.]+ \((ipad)/],[MODEL,[VENDOR,"Apple"],[TYPE,TABLET]],[/(apple\s{0,1}tv)/i],[[MODEL,"Apple TV"],[VENDOR,"Apple"]],[/(archos)\s(gamepad2?)/i,/(hp).+(touchpad)/i,/(hp).+(tablet)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i],[MODEL,[VENDOR,"Amazon"],[TYPE,TABLET]],[/(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i],[[MODEL,mapper.str,maps.device.amazon.model],[VENDOR,"Amazon"],[TYPE,MOBILE]],[/\((ip[honed|\s\w*]+);.+(apple)/i],[MODEL,VENDOR,[TYPE,MOBILE]],[/\((ip[honed|\s\w*]+);/i],[MODEL,[VENDOR,"Apple"],[TYPE,MOBILE]],[/(blackberry)[\s-]?(\w+)/i,/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/\(bb10;\s(\w+)/i],[MODEL,[VENDOR,"BlackBerry"],[TYPE,MOBILE]],[/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i],[MODEL,[VENDOR,"Asus"],[TYPE,TABLET]],[/(sony)\s(tablet\s[ps])\sbuild\//i,/(sony)?(?:sgp.+)\sbuild\//i],[[VENDOR,"Sony"],[MODEL,"Xperia Tablet"],[TYPE,TABLET]],[/android.+\s([c-g]\d{4}|so[-l]\w+)\sbuild\//i],[MODEL,[VENDOR,"Sony"],[TYPE,MOBILE]],[/\s(ouya)\s/i,/(nintendo)\s([wids3u]+)/i],[VENDOR,MODEL,[TYPE,CONSOLE]],[/android.+;\s(shield)\sbuild/i],[MODEL,[VENDOR,"Nvidia"],[TYPE,CONSOLE]],[/(playstation\s[34portablevi]+)/i],[MODEL,[VENDOR,"Sony"],[TYPE,CONSOLE]],[/(sprint\s(\w+))/i],[[VENDOR,mapper.str,maps.device.sprint.vendor],[MODEL,mapper.str,maps.device.sprint.model],[TYPE,MOBILE]],[/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i,/(zte)-(\w+)*/i,/(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i],[VENDOR,[MODEL,/_/g," "],[TYPE,MOBILE]],[/(nexus\s9)/i],[MODEL,[VENDOR,"HTC"],[TYPE,TABLET]],[/d\/huawei([\w\s-]+)[;\)]/i,/(nexus\s6p)/i],[MODEL,[VENDOR,"Huawei"],[TYPE,MOBILE]],[/(microsoft);\s(lumia[\s\w]+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/[\s\(;](xbox(?:\sone)?)[\s\);]/i],[MODEL,[VENDOR,"Microsoft"],[TYPE,CONSOLE]],[/(kin\.[onetw]{3})/i],[[MODEL,/\./g," "],[VENDOR,"Microsoft"],[TYPE,MOBILE]],[/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,/mot[\s-]?(\w+)*/i,/(XT\d{3,4}) build\//i,/(nexus\s6)/i],[MODEL,[VENDOR,"Motorola"],[TYPE,MOBILE]],[/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],[MODEL,[VENDOR,"Motorola"],[TYPE,TABLET]],[/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i],[[VENDOR,util.trim],[MODEL,util.trim],[TYPE,SMARTTV]],[/hbbtv.+maple;(\d+)/i],[[MODEL,/^/,"SmartTV"],[VENDOR,"Samsung"],[TYPE,SMARTTV]],[/\(dtv[\);].+(aquos)/i],[MODEL,[VENDOR,"Sharp"],[TYPE,SMARTTV]],[/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,/((SM-T\w+))/i],[[VENDOR,"Samsung"],MODEL,[TYPE,TABLET]],[/smart-tv.+(samsung)/i],[VENDOR,[TYPE,SMARTTV],MODEL],[/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,/sec-((sgh\w+))/i],[[VENDOR,"Samsung"],MODEL,[TYPE,MOBILE]],[/sie-(\w+)*/i],[MODEL,[VENDOR,"Siemens"],[TYPE,MOBILE]],[/(maemo|nokia).*(n900|lumia\s\d+)/i,/(nokia)[\s_-]?([\w-]+)*/i],[[VENDOR,"Nokia"],MODEL,[TYPE,MOBILE]],[/android\s3\.[\s\w;-]{10}(a\d{3})/i],[MODEL,[VENDOR,"Acer"],[TYPE,TABLET]],[/android.+([vl]k\-?\d{3})\s+build/i],[MODEL,[VENDOR,"LG"],[TYPE,TABLET]],[/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i],[[VENDOR,"LG"],MODEL,[TYPE,TABLET]],[/(lg) netcast\.tv/i],[VENDOR,MODEL,[TYPE,SMARTTV]],[/(nexus\s[45]
vendor: 3,692 bytes, line 1358
1358)/i,/lg[e;\s\/-]+(\w+)*/i,/android.+lg(\-?[\d\w]+)\s+build/i],[MODEL,[VENDOR,"LG"],[TYPE,MOBILE]],[/android.+(ideatab[a-z0-9\-\s]+)/i],[MODEL,[VENDOR,"Lenovo"],[TYPE,TABLET]],[/linux;.+((jolla));/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/((pebble))app\/[\d\.]+\s/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/crkey/i],[[MODEL,"Chromecast"],[VENDOR,"Google"]],[/android.+;\s(glass)\s\d/i],[MODEL,[VENDOR,"Google"],[TYPE,WEARABLE]],[/android.+;\s(pixel c)\s/i],[MODEL,[VENDOR,"Google"],[TYPE,TABLET]],[/android.+;\s(pixel xl|pixel)\s/i],[MODEL,[VENDOR,"Google"],[TYPE,MOBILE]],[/android.+(\w+)\s+build\/hm\1/i,/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i,/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i],[[MODEL,/_/g," "],[VENDOR,"Xiaomi"],[TYPE,MOBILE]],[/android.+;\s(m[1-5]\snote)\sbuild/i],[MODEL,[VENDOR,"Meizu"],[TYPE,TABLET]],[/android.+a000(1)\s+build/i],[MODEL,[VENDOR,"OnePlus"],[TYPE,MOBILE]],[/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i],[MODEL,[VENDOR,"RCA"],[TYPE,TABLET]],[/android.+[;\/]\s*(Venue[\d\s]*)\s+build/i],[MODEL,[VENDOR,"Dell"],[TYPE,TABLET]],[/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i],[MODEL,[VENDOR,"Verizon"],[TYPE,TABLET]],[/android.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(V?.*)\s+build/i],[[VENDOR,"Barnes & Noble"],MODEL,[TYPE,TABLET]],[/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i],[MODEL,[VENDOR,"NuVision"],[TYPE,TABLET]],[/android.+[;\/]\s*(zte)?.+(k\d{2})\s+build/i],[[VENDOR,"ZTE"],MODEL,[TYPE,TABLET]],[/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i],[MODEL,[VENDOR,"Swiss"],[TYPE,MOBILE]],[/android.+[;\/]\s*(zur\d{3})\s+build/i],[MODEL,[VENDOR,"Swiss"],[TYPE,TABLET]],[/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i],[MODEL,[VENDOR,"Zeki"],[TYPE,TABLET]],[/(android).+[;\/]\s+([YR]\d{2}x?.*)\s+build/i,/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(.+)\s+build/i],[[VENDOR,"Dragon Touch"],MODEL,[TYPE,TABLET]],[/android.+[;\/]\s*(NS-?.+)\s+build/i],[MODEL,[VENDOR,"Insignia"],[TYPE,TABLET]],[/android.+[;\/]\s*((NX|Next)-?.+)\s+build/i],[MODEL,[VENDOR,"NextBook"],[TYPE,TABLET]],[/android.+[;\/]\s*(Xtreme\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i],[[VENDOR,"Voice"],MODEL,[TYPE,MOBILE]],[/android.+[;\/]\s*(LVTEL\-?)?(V1[12])\s+build/i],[[VENDOR,"LvTel"],MODEL,[TYPE,MOBILE]],[/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i],[MODEL,[VENDOR,"Envizen"],[TYPE,TABLET]],[/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(.*\b)\s+build/i],[VENDOR,MODEL,[TYPE,TABLET]],[/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i],[MODEL,[VENDOR,"MachSpeed"],[TYPE,TABLET]],[/android.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i],[VENDOR,MODEL,[TYPE,TABLET]],[/android.+[;\/]\s*TU_(1491)\s+build/i],[MODEL,[VENDOR,"Rotor"],[TYPE,TABLET]],[/android.+(KS(.+))\s+build/i],[MODEL,[VENDOR,"Amazon"],[TYPE,TABLET]],[/android.+(Gigaset)[\s\-]+(Q.+)\s+build/i],[VENDOR,MODEL,[TYPE,TABLET]],[/\s(tablet|tab)[;\/]/i,/\s(mobile)(?:[;\/]|\ssafari)/i],[[TYPE,util.lowerize],VENDOR,MODEL],[/(android.+)[;\/].+build/i],[MODEL,[VENDOR,"Generic"]]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[VERSION,[NAME,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[NAME,VERSION],[/rv\:([\w\.]+).*(gecko)/i],[VERSION,NAME]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[NAME,VERSION],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]+\w)*/i,/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[NAME,[VERSION,mapper.str,maps.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[NAME,"Windows"],[VERSION,mapper.str,maps.os.windows.version]],[/\((bb)(10);
1358/i],[[NAME,"BlackBerry"],VERSION],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[NAME,VERSION],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[NAME,"Symbian"],VERSION],[/\((series40);/i],[NAME],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[NAME,"Firefox OS"],VERSION],[/(nintendo|playstation)\s([wids34portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[NAME,VERSION],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[NAME,"Chromium OS"],VERSION],[/(sunos)\s?([\w\.]+\d)*/i],[[NAME,"Solaris"],VERSION],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[NAME,VERSION],[/(haiku)\s(\w+)/i],[NAME,VERSION],[/cfnetwork\/.+darwin/i,/ip[honead]+(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i],[[VERSION,/_/g,"."],[NAME,"iOS"]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[NAME,"Mac OS"],[VERSION,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[NAME,VERSION]]};var Browser=function(name,version){this[NAME]=name;this[VERSION]=version};var CPU=function(arch){this[ARCHITECTURE]=arch};var Device=function(vendor,model,type){this[VENDOR]=vendor;this[MODEL]=model;this[TYPE]=type};var Engine=Browser;var OS=Browser;var UAParser=function(uastring,extensions){if(typeof uastring==="object"){extensions=uastring;uastring=undefined}if(!(this instanceof UAParser)){return new UAParser(uastring,extensions).getResult()}var ua=uastring||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:EMPTY);var rgxmap=extensions?util.extend(regexes,extensions):regexes;var browser=new Browser;var cpu=new CPU;var device=new Device;var engine=new Engine;var os=new OS;this.getBrowser=function(){mapper.rgx.call(browser,ua,rgxmap.browser);browser.major=util.major(browser.version);return browser};this.getCPU=function(){mapper.rgx.call(cpu,ua,rgxmap.cpu);return cpu};this.getDevice=function(){mapper.rgx.call(device,ua,rgxmap.device);return device};this.getEngine=function(){mapper.rgx.call(engine,ua,rgxmap.engine);return engine};this.getOS=function(){mapper.rgx.call(os,ua,rgxmap.os);return os};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return ua};this.setUA=function(uastring){ua=uastring;browser=new Browser;cpu=new CPU;device=new Device;engine=new Engine;os=new OS;return this};return this};UAParser.VERSION=LIBVERSION;UAParser.BROWSER={NAME:NAME,MAJOR:MAJOR,VERSION:VERSION};UAParser.CPU={ARCHITECTURE:ARCHITECTURE};UAParser.DEVICE={MODEL:MODEL,VENDOR:VENDOR,TYPE:TYPE,CONSOLE:CONSOLE,MOBILE:MOBILE,SMARTTV:SMARTTV,TABLET:TABLET,WEARABLE:WEARABLE,EMBEDDED:EMBEDDED};UAParser.ENGINE={NAME:NAME,VERSION:VERSION};UAParser.OS={NAME:NAME,VERSION:VERSION};if(typeof exports!==UNDEF_TYPE){if(typeof module!==UNDEF_TYPE&&module.exports){exports=module.exports=UAParser}exports.UAParser=UAParser}else{if(typeof define===FUNC_TYPE&&define.amd){define(function(){return UAParser})}else if(window){window.UAParser=UAParser}}var $=window&&(window.jQuery||window.Zepto);if(typeof $!==UNDEF_TYPE){var parser=new UAParser;$.ua=parser.getResult();$.ua.get=function(){return parser.getUA()};$.ua.set=function(uastring){parser.setUA(uastring);var result=parser.getResult();for(var prop in result){$.ua[prop]=result[prop]}}}})(typeof window==="object"?window:this);/*! jQuery Super Text Converter 2014-03-03
1359 *  Vertion : 1.0.3
1360 *  Dependencies : jQuery *
1361 *  Author : MegazalRock (Otto Kamiya)
1362 *  Copyright (c) 2014 MegazalRock (Otto Kamiya);
1363 *  License : */
1364(function(a,n){var t=function(a){var t=this;a=a||{},t.options=n.extend(!0,{widthMode:"toHankaku",kanaMode:!1,hankakuKatakanaMustDie:!0,convert:{punctuation:!0,tilda:!0,exclamation:!0,question:!0,space:!0,hyphen:!0},zenkakuHyphen:"ー",zenkakuChilda:"〜"},a),t.regexp={hankaku:/[A-Za-z0-9#$%&\\()*+,.\/<>\[\]{}=@;:_\^`]/g,zenkaku:/[A-Za-z0-9#$%&\()*+,./<>[]{}=@;:_^`]/g,katakana:/[ァ-ン]/g,hiragana:/[ぁ-ん]/g},t.fnc={toHankaku:function(a){return String.fromCharCode(a.charCo
1364deAt(0)-65248)},toZenkaku:function(a){return String.fromCharCode(a.charCodeAt(0)+65248)},toKatakana:function(a){return String.fromCharCode(a.charCodeAt(0)+96)},toHiragana:function(a){return String.fromCharCode(a.charCodeAt(0)-96)}},t.list={toHankaku:[{zenkaku:/”/g,hankaku:'"'},{zenkaku:/’/g,hankaku:"'"},{zenkaku:/ /g,hankaku:" ",type:"space"},{zenkaku:/¥/g,hankaku:"¥"},{zenkaku:/[ー―‐−]/g,hankaku:"-",type:"hyphen"},{zenkaku:/|/g,hankaku:"|"},{zenkaku:/[~〜]/g,hankaku:"~",type:"tilda"},{zenkaku:/[、]/g,hankaku:",",type:"punctuation"},{zenkaku:/[。]/g,hankaku:".",type:"punctuation"},{zenkaku:/!/g,hankaku:"!",type:"exclamation"},{zenkaku:/?/g,hankaku:"?",type:"question"}],toZenkaku:[{hankaku:/"/g,zenkaku:"”"},{hankaku:/'/g,zenkaku:"’"},{hankaku:/ /g,zenkaku:" ",type:"space"},{hankaku:/[¥\\]/g,zenkaku:"¥"},{hankaku:/[\-ー]/g,zenkaku:t.options.zenkakuHyphen,type:"hyphen"},{hankaku:/\|/g,zenkaku:"|"},{hankaku:/~/g,zenkaku:t.options.zenkakuChilda,type:"tilda"},{hankaku:/!/g,zenkaku:"!",type:"exclamation"},{hankaku:/\?/g,zenkaku:"?",type:"question"}]},this.hankakuKanaList=[/ガ/g,/ギ/g,/グ/g,/ゲ/g,/ゴ/g,/ザ/g,/ジ/g,/ズ/g,/ゼ/g,/ゾ/g,/ダ/g,/ヂ/g,/ヅ/g,/デ/g,/ド/g,/バ/g,/ビ/g,/ブ/g,/ベ/g,/ボ/g,/パ/g,/ピ/g,/プ/g,/ペ/g,/ポ/g,/ア/g,/イ/g,/ウ/g,/エ/g,/オ/g,/カ/g,/キ/g,/ク/g,/ケ/g,/コ/g,/サ/g,/シ/g,/ス/g,/セ/g,/ソ/g,/タ/g,/チ/g,/ツ/g,/テ/g,/ト/g,/ナ/g,/ニ/g,/ヌ/g,/ネ/g,/ノ/g,/ハ/g,/ヒ/g,/フ/g,/ヘ/g,/ホ/g,/マ/g,/ミ/g,/ム/g,/メ/g,/モ/g,/ヤ/g,/ユ/g,/ヨ/g,/ラ/g,/リ/g,/ル/g,/レ/g,/ロ/g,/ワ/g,/ヲ/g,/ン/g,/ァ/g,/ィ/g,/ゥ/g,/ェ/g,/ォ/g,/ャ/g,/ュ/g,/ョ/g,/゙/g,/゚/g,/。/g,/、/g],this.zenkakuKanaList=["ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ","ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ヲ","ン","ァ","ィ","ゥ","ェ","ォ","ャ","ュ","ョ","゛","゜","。","、"]};t.prototype.toHankaku=function(a,t){var k,e,g=this,u=0;for(t=n.extend(!0,g.options,t||{}),a=a.replace(g.regexp.zenkaku,g.fnc.toHankaku),k=g.list.toHankaku,e=k.length;e>u;u+=1)"string"==typeof k[u].type?t.convert[k[u].type]&&(a=a.replace(k[u].zenkaku,k[u].hankaku)):a=a.replace(k[u].zenkaku,k[u].hankaku);return a},t.prototype.toZenkaku=function(a,t){var k,e,g=this,u=0;for(t=n.extend(!0,g.options,t||{}),a=a.replace(g.regexp.hankaku,g.fnc.toZenkaku),k=g.list.toZenkaku,e=k.length;e>u;u+=1)"string"==typeof k[u].type?t.convert[k[u].type]&&(a=a.replace(k[u].hankaku,k[u].zenkaku)):a=a.replace(k[u].hankaku,k[u].zenkaku);return a},t.prototype.killHankakuKatakana=function(a){var n=this,t=0,k=n.hankakuKanaList.length;if(/[ヲ-゚]/.test(a))for(;k>t;t+=1)a=a.replace(n.hankakuKanaList[t],n.zenkakuKanaList[t]);return a},t.prototype.toHiragana=function(a){var n=this;return a.replace(n.regexp.katakana,n.fnc.toHiragana)},t.prototype.toKatakana=function(a){var n=this;return a.replace(n.regexp.hiragana,n.fnc.toKatakana)},t.prototype.autoConvert=function(a,t){var k,e=this;return t=n.extend(!0,e.options,t),t.widthMode&&"toHankaku"===t.widthMode?k=e.toHankaku(a,t.convert):"toZenkaku"===t.widthMode&&(k=e.toZenkaku(a,t.convert)),t.widthMode&&t.hankakuKatakanaMustDie&&(k=e.killHankakuKatakana(k)),t.kanaMode&&"toHiragana"===t.kanaMode?k=e.toHiragana(k):t.kanaMode&&"toKatakana"===t.kanaMode&&(k=e.toKatakana(k)),k},n.SuperTextConverter=function(a){return new t(a)},n.fn.superTextConverter=function(a,k){return n(this).each(function(){n(this).on("blur",function(){var e=new t,g="TEXTAREA"===this.tagName?n(this).text():n(this).val(),u=e.autoConvert(g,a,k);g!==u&&(n(this).val(u),n(this).trigger("superTextConverted",e.options))})}),this}})(this,jQuery);// Escape Codec Library: ecl.js arranged for DMS with ECL_array
1365// 文字コード変換ライブラリ ecl.js の改造版 ecl_array.js に、DMS用のメソッドを加えたライブラリ
1366// (ver. 2018.01.16)
1367//
1368// (参考)
1369// https://www.junoe.jp/downloads/itoh/enc_js.shtml
1370// https://qiita.com/weal/items/3b3ddfb8157047119554
1371//
1372"use strict";
1373
1374var ECL = {};
1375(function () {
1376	//
1377	// Escape Codec Library: ecl.js (Ver.041208)
1378	//
1379	// Copyright (C) http://nurucom-archives.hp.infoseek.co.jp/digital/
1380	//
1381
1382	var EscapeSJIS = function EscapeSJIS(str) {
1383		return str.replace(/[^*+.-9A-Z_a-z-]/g, function (s) {
1384			var c = s.charCodeAt(0),
1385			    m;
1386			return c < 128 ? (c < 16 ? "%0" : "%") + c.toString(16).toUpperCase() : 65376 < c && c < 65440 ? "%" + (c - 65216).toString(16).toUpperCase() : (c = JCT11280.indexOf(s)) < 0 ? "%81E" : "%" + ((m = ((c < 8272 ? c : c = JCT11280.lastIndexOf(s)) - (c %= 188)) / 188) < 31 ? m + 129 : m + 193).toString(16).toUpperCase() + (64 < (c += c < 63 ? 64 : 65) && c < 91 || 95 == c || 96 < c && c < 123 ? String.fromCharCode(c) : "%" + c.toString(16).toUpperCase());
1387		});
1388	};
1389
1390	var UnescapeSJIS = function UnescapeSJIS(str) {
1391		return str.replace(/%(8[1-9A-F]|[9E][0-9A-F]|F[0-9A-C])(%[4-689A-F][0-9A-F]|%7[0-9A-E]|[@-~])|%([0-7][0-9A-F]|A[1-9A-F]|[B-D][0-9A-F])/ig, function (s) {
1392			var c = parseInt(s.substring(1, 3), 16),
1393			    l = s.length;
1394			return 3 == l ? String.fromCharCode(c < 160 ? c : c + 65216) : JCT11280.charAt((c < 160 ? c - 129 : c - 193) * 188 + (4 == l ? s.charCodeAt(3) - 64 : (c = parseInt(s.substring(4), 16)) < 127 ? c - 64 : c - 65));
1395		});
1396	};
1397
1398	var EscapeEUCJP = function EscapeEUCJP(str) {
1399		return str.replace(/[^*+.-9A-Z_a-z-]/g, function (s) {
1400			var c = s.charCodeAt(0);
1401			return (c < 128 ? (c < 16 ? "%0" : "%") + c.toString(16) : 65376 < c && c < 65440 ? "%8E%" + (c - 65216).toString(16) : (c = JCT8836.indexOf(s)) < 0 ? "%A1%A6" : "%" + ((c - (c %= 94)) / 94 + 161).toString(16) + "%" + (c + 161).toString(16)).toUpperCase();
1402		});
1403	};
1404
1405	var UnescapeEUCJP = function UnescapeEUCJP(str) {
1406		return str.replace(/(%A[1-9A-F]|%[B-E][0-9A-F]|%F[0-9A-E]){2}|%8E%(A[1-9A-F]|[B-D][0-9A-F])|%[0-7][0-9A-F]/ig, function (s) {
1407			var c = parseInt(s.substring(1), 16);
1408			return c < 161 ? String.fromCharCode(c < 128 ? c : parseInt(s.substring(4), 16) + 65216) : JCT8836.charAt((c - 161) * 94 + parseInt(s.substring(4), 16) - 161);
1409		});
1410	};
1411
1412	var EscapeJIS7 = function EscapeJIS7(str) {
1413		var u = String.fromCharCode,
1414		    ri = u(92, 120, 48, 48, 45, 92, 120, 55, 70),
1415		    rj = u(65377, 45, 65439, 93, 43),
1416		    H = function H(c) {
1417			return 41 < c && c < 58 && 44 != c || 64 < c && c < 91 || 95 == c || 96 < c && c < 123 ? u(c) : "%" + c.toString(16).toUpperCase();
1418		},
1419		    I = function I(s) {
1420			var c = s.charCodeAt(0);
1421			return (c < 16 ? "%0" : "%") + c.toString(16).toUpperCase();
1422		},
1423		    rI = new RegExp();rI.compile("[^*+.-9A-Z_a-z-]", "g");
1424		return ("g" + str + "g").replace(RegExp("[" + ri + "]+", "g"), function (s) {
1425			return "%1B%28B" + s.replace(rI, I);
1426		}).replace(RegExp("[" + rj, "g"), function (s) {
1427			var c,
1428			    i = 0,
1429			    t = "%1B%28I";while (c = s.charCodeAt(i++)) {
1430				t += H(c - 65344);
1431			}return t;
1432		}).replace(RegExp("[^" + ri + rj, "g"), function (s) {
1433			var a,
1434			    c,
1435			    i = 0,
1436			    t = "%1B%24B";while (a = s.charAt(i++)) {
1437				t += (c = JCT8836.indexOf(a)) < 0 ? "%21%26" : H((c - (c %= 94)) / 94 + 33) + H(c + 33);
1438			}return t;
1439		}).slice(8, -1);
1440	};
1441
1442	var UnescapeJIS7 = function UnescapeJIS7(str) {
1443		var i = 0,
1444		    p,
1445		    q,
1446		    s = "",
1447		    u = String.fromCharCode,
1448		    P = ("%28B" + str.replace(/%49/g, "I").replace(/%1B%24%4[02]|%1B%24@/ig, "%1B%24B")).split(/%1B/i),
1449		    I = function I(s) {
1450			return u(parseInt(s.substring(1), 16));
1451		},
1452		    J = function J(s) {
1453			return u((3 == s.length ? parseInt(s.substring(1), 16) : s.charCodeAt(0)) + 65344);
1454		},
1455		    K = function K(s) {
1456			var l = s.length;
1457			return JCT8836.charAt(4 < l ? (parseInt(s.substring(1), 16) - 33) * 94 + parseInt(s.substring(4), 16) - 33 : 2 < l ? (37 == (l = s.charCodeAt(0)) ? (parseInt(s.substring(1, 3), 16) - 33) * 94 + s.charCodeAt(3) : (l - 33) * 94 + parseInt(s.substring(2), 16)) - 33 : (s.charCodeAt(0) - 33) * 94 + s.charCodeAt(1) - 33);
1458		},
1459		    rI = new RegExp(),
1460		    rJ = new RegExp(),
1461		    rK = new RegExp();
1462		rI.compile("%[0-7][0-9A-F]", "ig");rJ.compile("(%2[1-9A-F]|%[3-5][0-9A-F])|[!-_]", "ig");
1463		rK.compile("(%2[1-9A-F]|%[3-6][0-9A-F]|%7[0-9A-E]){2}|(%2[1-9A-F]|%[3-6][0-9A-F]|%7[0-9A-E])[!-~]|[!-~](%2[1-9A-F]|%[3-6][0-9A-F]|%7[0-9A-E])|[!-~]{2}", "ig");
1464		while (p = P[i++]) {
1465			s += "%24B" == (q = p.substring(0, 4)) ? p.substring(4).replace(rK, K) : "%28I" == q ? p.substring(4).replace(rJ, J) : p.replace(rI, I).substring(2);
1466		}return s;
1467	};
1468
1469	var EscapeJIS8 = function EscapeJIS8(str) {
1470		var u = String.fromCharCode,
1471		    r = u(92, 120, 48, 48, 45, 92, 120, 55, 70, 65377, 45, 65439, 93, 43),
1472		    H = function H(c) {
1473			return 41 < c && c < 58 && 44 != c || 64 < c && c < 91 || 95 == c || 96 < c && c < 123 ? u(c) : "%" + c.toString(16).toUpperCase();
1474		},
1475		    I = function I(s) {
1476			var c = s.charCodeAt(0);
1477			return (c < 16 ? "%0" : "%") + (c < 128 ? c : c - 65216).toString(16).toUpperCase();
1478		},
1479		    rI = new RegExp();rI.compile("[^*+.-9A-Z_a-z-]", "g");
1480		return ("g" + str + "g").replace(RegExp("[" + r, "g"), function (s) {
1481			return "%1B%28B" + s.replace(rI, I);
1482		}).replace(RegExp("[^" + r, "g"), function (s) {
1483			var a,
1484			    c,
1485			    i = 0,
1486			    t = "%1B%24B";while (a = s.charAt(i++)) {
1487				t += (c = JCT8836.indexOf(a)) < 0 ? "%21%26" : H((c - (c %= 94)) / 94 + 33) + H(c + 33);
1488			}return t;
1489		}).slice(8, -1);
1490	};
1491
1492	var UnescapeJIS8 = function UnescapeJIS8(str) {
1493		var i = 0,
1494		    p,
1495		    s = "",
1496		    P = ("%28B" + str.replace(/%1B%24%4[02]|%1B%24@/ig, "%1B%24B")).split(/%1B/i),
1497		    I = function I(s) {
1498			var c = parseInt(s.substring(1), 16);
1499			return String.fromCharCode(c < 128 ? c : c + 65216);
1500		},
1501		    K = function K(s) {
1502			var l = s.length;
1503			return JCT8836.charAt(4 < l ? (parseInt(s.substring(1), 16) - 33) * 94 + parseInt(s.substring(4), 16) - 33 : 2 < l ? (37 == (l = s.charCodeAt(0)) ? (parseInt(s.substring(1, 3), 16) - 33) * 94 + s.charCodeAt(3) : (l - 33) * 94 + parseInt(s.substring(2), 16)) - 33 : (s.charCodeAt(0) - 33) * 94 + s.charCodeAt(1) - 33);
1504		},
1505		    rI = new RegExp(),
1506		    rK = new RegExp();
1507		rI.compile("%([0-7][0-9A-F]|A[1-9A-F]|[B-D][0-9A-F])", "ig");
1508		rK.compile("(%2[1-9A-F]|%[3-6][0-9A-F]|%7[0-9A-E]){2}|(%2[1-9A-F]|%[3-6][0-9A-F]|%7[0-9A-E])[!-~]|[!-~](%2[1-9A-F]|%[3-6][0-9A-F]|%7[0-9A-E])|[!-~]{2}", "ig");
1509		while (p = P[i++]) {
1510			s += "%24B" == p.substring(0, 4) ? p.substring(4).replace(rK, K) : p.replace(rI, I).substring(2);
1511		}return s;
1512	};
1513
1514	var EscapeUnicode = function EscapeUnicode(str) {
1515		return str.replace(/[^*+.-9A-Z_a-z-]/g, function (s) {
1516			var c = s.charCodeAt(0);
1517			return (c < 16 ? "%0" : c < 256 ? "%" : c < 4096 ? "%u0" : "%u") + c.toString(16).toUpperCase();
1518		});
1519	};
1520
1521	var UnescapeUnicode = function UnescapeUnicode(str) {
1522		return str.replace(/%u[0-9A-F]{4}|%[0-9A-F]{2}/ig, function (s) {
1523			return String.fromCharCode("0x" + s.substring(s.length / 3));
1524		});
1525	};
1526
1527	var EscapeUTF7 = function EscapeUTF7(str) {
1528		var B = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),
1529		    E = function E(s) {
1530			var c = s.charCodeAt(0);
1531			return B[c >> 10] + B[c >> 4 & 63] + B[(c & 15) << 2 | (c = s.charCodeAt(1)) >> 14] + (0 <= c ? B[c >> 8 & 63] + B[c >> 2 & 63] + B[(c & 3) << 4 | (c = s.charCodeAt(2)) >> 12] + (0 <= c ? B[c >> 6 & 63] + B[c & 63] : "") : "");
1532		},
1533		    re = new RegExp();re.compile("[^+]{1,3}", "g");
1534		return (str + "g").replace(/[^*+.-9A-Z_a-z-]+[*+.-9A-Z_a-z-]|[+]/g, function (s) {
1535			if ("+" == s) return "+-";
1536			var l = s.length - 1,
1537			    w = s.charAt(l);
1538			return "+" + s.substring(0, l).replace(re, E) + ("+" == w ? "-+-" : "*" == w || "." == w || "_" == w ? w : "-" + w);
1539		}).slice(0, -1);
1540	};
1541
1542	var UnescapeUTF7 = function UnescapeUTF7(str) {
1543		var i = 0,
1544		    B = {};
1545		while (i < 64) {
1546			B["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(i)] = i++;
1547		}return str.replace(RegExp("[+][+/-9A-Za-z]*-?", "g"), function (s) {
1548			if ("+-" == s) return "+";
1549			var b = B[s.charAt(1)],
1550			    c,
1551			    i = 1,
1552			    t = "";
1553			while (0 <= b) {
1554				if ((c = i & 7) < 6) c = c < 3 ? b << 10 | B[s.charAt(++i)] << 4 | (b = B[s.charAt(++i)]) >> 2 : (b & 3) << 14 | B[s.charAt(++i)] << 8 | B[s.charAt(++i)] << 2 | (b = B[s.charAt(++i)]) >> 4;else {
1555					c = (b & 15) << 12 | B[s.charAt(++i)] << 6 | B[s.charAt(++i)];b = B[s.charAt(++i)];
1556				}
1557				if (c) t += String.fromCharCode(c);
1558			}
1559			return t;
1560		});
1561	};
1562
1563	var EscapeUTF8 = function EscapeUTF8(str) {
1564		return str.replace(/[^*+.-9A-Z_a-z-]/g, function (s) {
1565			var c = s.charCodeAt(0);
1566			return (c < 16 ? "%0" + c.toString(16) : c < 128 ? "%" + c.toString(16) : c < 2048 ? "%" + (c >> 6 | 192).toString(16) + "%" + (c & 63 | 128).toString(16) : "%" + (c >> 12 | 224).toString(16) + "%" + (c >> 6 & 63 | 128).toString(16) + "%" + (c & 63 | 128).toString(16)).toUpperCase();
1567		});
1568	};
1569
1570	var UnescapeUTF8 = function UnescapeUTF8(str) {
1571		return str.replace(/%(E(0%[AB]|[1-CEF]%[89AB]|D%[89])[0-9A-F]|C[2-9A-F]|D[0-9A-F])%[89AB][0-9A-F]|%[0-7][0-9A-F]/ig, function (s) {
1572			var c = parseInt(s.substring(1), 16);
1573			return String.fromCharCode(c < 128 ? c : c < 224 ? (c & 31) << 6 | parseInt(s.substring(4), 16) & 63 : ((c & 15) << 6 | parseInt(s.substring(4), 16) & 63) << 6 | parseInt(s.substring(7), 16) & 63);
1574		});
1575	};
1576
1577	var EscapeUTF16LE = function EscapeUTF16LE(str) {
1578		var H = function H(c) {
1579			return 41 < c && c < 58 && 44 != c || 64 < c && c < 91 || 95 == c || 96 < c && c < 123 ? String.fromCharCode(c) : (c < 16 ? "%0" : "%") + c.toString(16).toUpperCase();
1580		};
1581		return str.replace(/[^ ]| /g, function (s) {
1582			var c = s.charCodeAt(0);return H(c & 255) + H(c >> 8);
1583		});
1584	};
1585
1586	var UnescapeUTF16LE = function UnescapeUTF16LE(str) {
1587		var u = String.fromCharCode,
1588		    b = u(92, 120, 48, 48, 45, 92, 120, 70, 70);
1589		return str.replace(/^%FF%FE/i, "").replace(RegExp("%[0-9A-F]{2}%[0-9A-F]{2}|%[0-9A-F]{2}[" + b + "]|[" + b + "]%[0-9A-F]{2}|[" + b + "]{2}", "ig"), function (s) {
1590			var l = s.length;
1591			return u(4 < l ? "0x" + s.substring(4, 6) + s.substring(1, 3) : 2 < l ? 37 == (l = s.charCodeAt(0)) ? parseInt(s.substring(1, 3), 16) | s.charCodeAt(3) << 8 : l | parseInt(s.substring(2), 16) << 8 : s.charCodeAt(0) | s.charCodeAt(1) << 8);
1592		});
1593	};
1594
1595	var GetEscapeCodeType = function GetEscapeCodeType(str) {
1596		if (/%u[0-9A-F]{4}/i.test(str)) return "Unicode";
1597		if (/%([0-9A-DF][0-9A-F]%[8A]0%|E0%80|[0-7][0-9A-F]|C[01])%[8A]0|%00|%[7F]F/i.test(str)) return "UTF16LE";
1598		if (/%E[0-9A-F]%[8A]0%[8A]0|%[CD][0-9A-F]%[8A]0/i.test(str)) return "UTF8";
1599		if (/%F[DE]/i.test(str)) return (/%8[0-9A-D]|%9[0-9A-F]|%A0/i.test(str) ? "UTF16LE" : "EUCJP"
1600		);
1601		if (/%1B/i.test(str)) return (/%[A-D][0-9A-F]/i.test(str) ? "JIS8" : "JIS7"
1602		);
1603		var S = str.substring(0, 6143).replace(/%[0-9A-F]{2}|[^ ]| /ig, function (s) {
1604			return s.length < 3 ? "40" : s.substring(1);
1605		}),
1606		    c,
1607		    C,
1608		    i = 0,
1609		    T;
1610		while (0 <= (c = parseInt(S.substring(i, i += 2), 16)) && i < 4092) {
1611			if (128 <= c) {
1612				if ((C = parseInt(S.substring(i, i + 2), 16)) < 128) i += 2;else if (194 <= c && c < 240 && C < 192) {
1613					if (c < 224) {
1614						T = "UTF8";i += 2;continue;
1615					}
1616					if (2 == parseInt(S.charAt(i + 2), 16) >> 2) {
1617						T = "UTF8";i += 4;continue;
1618					}
1619				}
1620				if (142 == c && 161 <= C && C < 224) {
1621					if (!T) T = "EUCJP";if ("EUCJP" == T) continue;
1622				}
1623				if (c < 161) return "SJIS";
1624				if (c < 224 && !T) {
1625					if ((164 == c && C < 244 || 165 == c && C < 247) && 161 <= C) i += 2;else T = 224 <= C ? "EUCJP" : "SJIS";
1626				} else T = "EUCJP";
1627			}
1628		}return T ? T : "EUCJP";
1629	};
1630
1631	var JISX0208 = Function('var a="zKV33~jZ4zN=~ji36XazM93y!{~k2y!o~k0ZlW6zN?3Wz3W?{EKzK[33[`y|;-~j^YOTz$!~kNy|L1$353~jV3zKk3~k-4P4zK_2+~jY4y!xYHR~jlz$_~jk4z$e3X5He<0y!wy|X3[:~l|VU[F3VZ056Hy!nz/m1XD61+1XY1E1=1y|bzKiz!H034zKj~mEz#c5ZA3-3X$1~mBz$$3~lyz#,4YN5~mEz#{ZKZ3V%7Y}!J3X-YEX_J(3~mAz =V;kE0/y|F3y!}~m>z/U~mI~j_2+~mA~jp2;~m@~k32;~m>V}2u~mEX#2x~mBy+x2242(~mBy,;2242(~may->2&XkG2;~mIy-_2&NXd2;~mGz,{4<6:.:B*B:XC4>6:.>B*BBXSA+A:X]E&E<~r#z+625z s2+zN=`HXI@YMXIAXZYUM8X4K/:Q!Z&33 3YWX[~mB`{zKt4z (zV/z 3zRw2%Wd39]S11z$PAXH5Xb;ZQWU1ZgWP%3~o@{Dgl#gd}T){Uo{y5_d{e@}C(} WU9|cB{w}bzvV|)[} H|zT}d||0~{]Q|(l{|x{iv{dw}(5}[Z|kuZ }cq{{y|ij}.I{idbof%cu^d}Rj^y|-M{ESYGYfYsZslS`?ZdYO__gLYRZ&fvb4oKfhSf^d<Yeasc1f&a=hnYG{QY{D`Bsa|u,}Dl|_Q{C%xK|Aq}C>|c#ryW=}eY{L+`)][YF_Ub^h4}[X|?r|u_ex}TL@YR]j{SrXgo*|Gv|rK}B#mu{R1}hs|dP{C7|^Qt3|@P{YVV |8&}#D}ef{e/{Rl|>Hni}R1{Z#{D[}CQlQ||E}[s{SG_+i8eplY[=[|ec[$YXn#`hcm}YR|{Ci(_[ql|?8p3]-}^t{wy}4la&pc|3e{Rp{LqiJ],] `kc(]@chYnrM`O^,ZLYhZB]ywyfGY~aex!_Qww{a!|)*lHrM{N+n&YYj~Z b c#e_[hZSon|rOt`}hBXa^i{lh|<0||r{KJ{kni)|x,|0auY{D!^Sce{w;|@S|cA}Xn{C1h${E]Z-XgZ*XPbp]^_qbH^e[`YM|a||+=]!Lc}]vdBc=j-YSZD]YmyYLYKZ9Z>Xcczc2{Yh}9Fc#Z.l{}(D{G{{mRhC|L3b#|xK[Bepj#ut`H[,{E9Yr}1b{[e]{ZFk7[ZYbZ0XL]}Ye[(`d}c!|*y`Dg=b;gR]Hm=hJho}R-[n}9;{N![7k_{UbmN]rf#pTe[x8}!Qcs_rs[m`|>N}^V})7{^r|/E}),}HH{OYe2{Skx)e<_.cj.cjoMhc^d}0uYZd!^J_@g,[[[?{i@][|3S}Yl3|!1|eZ|5IYw|1D}e7|Cv{OHbnx-`wvb[6[4} =g+k:{C:}ed{S]|2M]-}WZ|/q{LF|dYu^}Gs^c{Z=}h>|/i|{W]:|ip{N:|zt|S<{DH[p_tvD{N<[8Axo{X4a.^o^X>Yfa59`#ZBYgY~_t^9`jZHZn`>G[oajZ;X,i)Z.^~YJe ZiZF^{][[#Zt^|]Fjx]&_5dddW]P0C[-]}]d|y {C_jUql] |OpaA[Z{lp|rz}:Mu#]_Yf6{Ep?f5`$[6^D][^u[$[6^.Z8]]ePc2U/=]K^_+^M{q*|9tYuZ,s(dS{i=|bNbB{uG}0jZOa:[-]dYtu3]:]<{DJ_SZIqr_`l=Yt`gkTnXb3d@kiq0a`Z{|!B|}e}Ww{Sp,^Z|0>_Z}36|]A|-t}lt{R6pi|v8hPu#{C>YOZHYmg/Z4nicK[}hF_Bg|YRZ7c|crkzYZY}_iXcZ.|)U|L5{R~qi^Uga@Y[xb}&qdbd6h5|Btw[}c<{Ds53[Y7]?Z<|e0{L[ZK]mXKZ#Z2^tavf0`PE[OSOaP`4gi`qjdYMgys/?[nc,}EEb,eL]g[n{E_b/vcvgb.{kcwi`~v%|0:|iK{Jh_vf5lb}KL|(oi=LrzhhY_^@`zgf[~g)[J_0fk_V{T)}I_{D&_/d9W/|MU[)f$xW}?$xr4<{Lb{y4}&u{XJ|cm{Iu{jQ}CMkD{CX|7A}G~{kt)nB|d5|<-}WJ}@||d@|Iy}Ts|iL|/^|no|0;}L6{Pm]7}$zf:|r2}?C_k{R(}-w|`G{Gy[g]bVje=_0|PT{^Y^yjtT[[[l!Ye_`ZN]@[n_)j3nEgMa]YtYpZy].d-Y_cjb~Y~[nc~sCi3|zg}B0}do{O^{|$`_|D{}U&|0+{J3|8*]iayx{a{xJ_9|,c{Ee]QXlYb]$[%YMc*]w[aafe]aVYi[fZEii[xq2YQZHg]Y~h#|Y:thre^@^|_F^CbTbG_1^qf7{L-`VFx Zr|@EZ;gkZ@slgko`[e}T:{Cu^pddZ_`yav^Ea+[#ZBbSbO`elQfLui}.F|txYcbQ`XehcGe~fc^RlV{D_0ZAej[l&jShxG[ipB_=u:eU}3e8[=j|{D(}dO{Do[BYUZ0/]AYE]ALYhZcYlYP/^-^{Yt_1_-;YT`P4BZG=IOZ&]H[e]YYd[9^F[1YdZxZ?Z{Z<]Ba2[5Yb[0Z4l?]d_;_)a?YGEYiYv`_XmZs4ZjY^Zb]6gqGaX^9Y}dXZr[g|]Y}K aFZp^k^F]M`^{O1Ys]ZCgCv4|E>}8eb7}l`{L5[Z_faQ|c2}Fj}hw^#|Ng|B||w2|Sh{v+[G}aB|MY}A{|8o}
1631X~{E8paZ:]i^Njq]new)`-Z>haounWhN}c#{DfZ|fK]KqGZ=:u|fqoqcv}2ssm}.r{]{nIfV{JW)[K|,Z{Uxc|]l_KdCb%]cfobya3`p}G^|LZiSC]U|(X|kBlVg[kNo({O:g:|-N|qT}9?{MBiL}Sq{`P|3a|u.{Uaq:{_o|^S}jX{Fob0`;|#y_@[V[K|cw[<_ }KU|0F}d3|et{Q7{LuZttsmf^kYZ`Af`}$x}U`|Ww}d]| >}K,r&|XI|*e{C/a-bmr1fId4[;b>tQ_:]hk{b-pMge]gfpo.|(w[jgV{EC1Z,YhaY^q,_G[c_g[J0YX]`[h^hYK^_Yib,` {i6vf@YM^hdOKZZn(jgZ>bzSDc^Z%[[o9[2=/YHZ(_/Gu_`*|8z{DUZxYt^vuvZjhi^lc&gUd4|<UiA`z]$b/Z?l}YI^jaHxe|;F}l${sQ}5g}hA|e4}?o{ih}Uz{C)jPe4]H^J[Eg[|AMZMlc}:,{iz}#*|gc{Iq|/:|zK{l&}#u|myd{{M&v~nV};L|(g|I]ogddb0xsd7^V})$uQ{HzazsgxtsO^l}F>ZB]r|{7{j@cU^{{CbiYoHlng]f+nQ[bkTn/}<-d9q {KXadZYo+n|l[|lc}V2{[a{S4Zam~Za^`{HH{xx_SvF|ak=c^[v^7_rYT`ld@]:_ub%[$[m](Shu}G2{E.ZU_L_R{tz`vj(f?^}hswz}GdZ}{S:h`aD|?W|`dgG|if{a8|J1{N,}-Ao3{H#{mfsP|[ bzn+}_Q{MT{u4kHcj_q`eZj[8o0jy{p7}C|[}l){MuYY{|Ff!Ykn3{rT|m,^R|,R}$~Ykgx{P!]>iXh6[l[/}Jgcg{JYZ.^qYfYIZl[gZ#Xj[Pc7YyZD^+Yt;4;`e8YyZVbQ7YzZxXja.7SYl[s]2^/Ha$[6ZGYrb%XiYdf2]H]kZkZ*ZQ[ZYS^HZXcCc%Z|[(bVZ]]:OJQ_DZCg<[,]%Zaa [g{C00HY[c%[ChyZ,Z_`PbXa+eh`^&jPi0a[ggvhlekL]w{Yp^v}[e{~;k%a&k^|nR_z_Qng}[E}*Wq:{k^{FJZpXRhmh3^p>de^=_7`|ZbaAZtdhZ?n4ZL]u`9ZNc3g%[6b=e.ZVfC[ZZ^^^hD{E(9c(kyZ=bb|Sq{k`|vmr>izlH[u|e`}49}Y%}FT{[z{Rk}Bz{TCc/lMiAqkf(m$hDc;qooi[}^o:c^|Qm}a_{mrZ(pA`,}<2sY| adf_%|}`}Y5U;}/4|D>|$X{jw{C<|F.hK|*A{MRZ8Zsm?imZm_?brYWZrYx`yVZc3a@f?aK^ojEd {bN}/3ZH]/$YZhm^&j 9|(S|b]mF}UI{q&aM]LcrZ5^.|[j`T_V_Gak}9J[ ZCZD|^h{N9{~&[6Zd{}B}2O|cv]K}3s}Uy|l,fihW{EG`j_QOp~Z$F^zexS`dcISfhZBXP|.vn|_HYQ|)9|cr]<`&Z6]m_(ZhPcSg>`Z]5`~1`0Xcb4k1{O!bz|CN_T{LR|a/gFcD|j<{Z._[f)mPc:1`WtIaT1cgYkZOaVZOYFrEe[}T$}Ch}mk{K-^@]fH{Hdi`c*Z&|Kt{if[C{Q;{xYB`dYIX:ZB[}]*[{{p9|4GYRh2ao{DS|V+[zd$`F[ZXKadb*A] Ys]Maif~a/Z2bmclb8{Jro_rz|x9cHojbZ{GzZx_)]:{wAayeDlx}<=`g{H1{l#}9i|)=|lP{Qq}.({La|!Y{i2EZfp=c*}Cc{EDvVB|;g}2t{W4av^Bn=]ri,|y?|3+}T*ckZ*{Ffr5e%|sB{lx^0]eZb]9[SgAjS_D|uHZx]dive[c.YPkcq/}db{EQh&hQ|eg}G!ljil|BO]X{Qr_GkGl~YiYWu=c3eb}29v3|D|}4i||.{Mv})V{SP1{FX}CZW6{cm|vO{pS|e#}A~|1i}81|Mw}es|5[}3w{C`h9aL]o{}p[G`>i%a1Z@`Ln2bD[$_h`}ZOjhdTrH{[j_:k~kv[Sdu]CtL}41{I |[[{]Zp$]XjxjHt_eThoa#h>sSt8|gK|TVi[Y{t=}Bs|b7Zpr%{gt|Yo{CS[/{iteva|cf^hgn}($_c^wmb^Wm+|55jrbF|{9^ q6{C&c+ZKdJkq_xOYqZYSYXYl`8]-cxZAq/b%b*_Vsa[/Ybjac/OaGZ4fza|a)gY{P?| I|Y |,pi1n7}9bm9ad|=d{aV|2@[(}B`d&|Uz}B}{`q|/H|!JkM{FU|CB|.{}Az}#P|lk}K{|2rk7{^8^?`/|k>|Ka{Sq}Gz}io{DxZh[yK_#}9<{TRdgc]`~Z>JYmYJ]|`!ZKZ]gUcx|^E[rZCd`f9oQ[NcD_$ZlZ;Zr}mX|=!|$6ZPZYtIo%fj}CpcN|B,{VDw~gb}@hZg`Q{LcmA[(bo`<|@$|o1|Ss}9Z_}tC|G`{F/|9nd}i=}V-{L8aaeST]daRbujh^xlpq8|}zs4bj[S`J|]?G{P#{rD{]I`OlH{Hm]VYuSYUbRc*6[j`8]pZ[bt_/^Jc*[<Z?YE|Xb|?_Z^Vcas]h{t9|Uwd)_(=0^6Zb{Nc} E[qZAeX[a]P^|_J>e8`W^j_Y}R{{Jp__]Ee#e:iWb9q_wKbujrbR}CY`,{mJ}gz{Q^{t~N|? gSga`V_||:#mi}3t|/I`X{N*|ct|2g{km}gi|{={jC}F;|E}{ZZjYf*frmu}8Tdroi{T[|+~}HG{cJ}DM{Lp{Ctd&}$hi3|FZ| m}Kr|38}^c|m_|Tr{Qv|36}?Up>|;S{DV{k_as}BK{P}}9p|t`jR{sAm4{D=b4pWa[}Xi{EjwEkI}3S|E?u=X0{jf} S|NM|JC{qo^3cm]-|JUx/{Cj{s>{Crt[UXuv|D~|j|d{YXZR}Aq}0r}(_{pJfi_z}0b|-vi)Z mFe,{f4|q`b{}^Z{HM{rbeHZ|^x_o|XM|L%|uFXm}@C_{{Hhp%a7|0p[Xp+^K}9U{bP}: tT}B|}+$|b2|[^|~h{FAby[`{}xgygrt~h1[li`c4vz|,7p~b(|mviN}^pg[{N/|g3|^0c,gE|f%|7N{q[|tc|TKA{LU}I@|AZp(}G-sz{F |qZ{}F|f-}RGn6{Z]_5})B}UJ{FFb2]4ZI@v=k,]t_Dg5Bj]Z-]L]vrpdvdGlk|gF}G]|IW}Y0[G| /bo|Te^,_B}#n^^{QHYI[?hxg{[`]D^IYRYTb&kJ[cri[g_9]Ud~^_]<p@_e_XdNm-^/|5)|h_{J;{kacVopf!q;asqd}n)|.m|bf{QW|U)}b+{tL|w``N|to{t ZO|T]jF}CB|0Q{e5Zw|k |We}5:{HO{tPwf_uajjBfX}-V_C_{{r~gg|Ude;s+}KNXH}! `K}eW{Upwbk%ogaW}9EYN}YY|&v|SL{C3[5s.]Y]I]u{M6{pYZ`^,`ZbCYR[1mNg>rsk0Ym[jrE]RYiZTr*YJ{Ge|%-lf|y(`=[t}E6{k!|3)}Zk} ][G{E~cF{u3U.rJ|a9p#o#ZE|?|{sYc#vv{E=|LC}cu{N8`/`3`9rt[4|He{cq|iSYxY`}V |(Q|t4{C?]k_Vlvk)BZ^r<{CL}#h}R+[<|i=}X|{KAo]|W<`K{NW|Zx}#;|fe{IMr<|K~tJ_x}AyLZ?{GvbLnRgN}X&{H7|x~}Jm{]-| GpNu0}.ok>|c4{PYisrDZ|fwh9|hfo@{H~XSbO]Odv]%`N]b1Y]]|eIZ}_-ZA]aj,>eFn+j[aQ_+]h[J_m_g]%_wf.`%k1e#Z?{CvYu_B^|gk`Xfh^M3`afGZ-Z|[m{L}|k3cp[it ^>YUi~d>{T*}YJ{Q5{Jxa$hg|%4`}|LAgvb }G}{P=|<;Ux{_skR{cV|-*|s-{Mp|XP|$G|_J}c6cM{_=_D|*9^$ec{V;|4S{qO|w_|.7}d0|/D}e}|0G{Dq]Kdp{}dfDi>}B%{Gd|nl}lf{C-{y}|ANZr}#={T~|-(}c&{pI|ft{lsVP}){|@u}!W|bcmB{d?|iW|:dxj{PSkO|Hl]Li:}VYk@|2={fnWt{M3`cZ6|)}|Xj}BYa?vo{e4|L7|B7{L7|1W|lvYO}W8nJ|$Vih|{T{d*_1|:-n2dblk``fT{Ky|-%}m!|Xy|-a{Pz}[l{kFjz|iH}9N{WE{x,|jz}R {P|{D)c=nX|Kq|si}Ge{sh|[X{RF{t`|jsr*fYf,rK|/9}$}}Nf{y!1|<Std}4Wez{W${Fd_/^O[ooqaw_z[L`Nbv[;l7V[ii3_PeM}.h^viqYjZ*j1}+3{bt{DR[;UG}3Og,rS{JO{qw{d<_zbAh<R[1_r`iZTbv^^a}c{iEgQZ<exZFg.^Rb+`Uj{a+{z<[~r!]`[[|rZYR|?F|qppp]L|-d|}K}YZUM|=Y|ktm*}F]{D;g{uI|7kg^}%?Z%ca{N[_<q4xC]i|PqZC]n}.bDrnh0Wq{tr|OMn6tM|!6|T`{O`|>!]ji+]_bTeU}Tq|ds}n|{Gm{z,f)}&s{DPYJ`%{CGd5v4tvb*hUh~bf]z`jajiFqAii]bfy^U{Or|m+{I)cS|.9k:e3`^|xN}@Dnlis`B|Qo{`W|>||kA}Y}{ERYuYx`%[exd`]|OyiHtb}HofUYbFo![5|+]gD{NIZR|Go}.T{rh^4]S|C9_}xO^i`vfQ}C)bK{TL}cQ|79iu}9a];sj{P.o!f[Y]pM``Jda^Wc9ZarteBZClxtM{LW}l9|a.mU}KX}4@{I+f1}37|8u}9c|v${xGlz}jP{Dd1}e:}31}%3X$|22i<v+r@~mf{sN{C67G97855F4YL5}8f{DT|xy{sO{DXB334@55J1)4.G9A#JDYtXTYM4, YQD9;XbXm9SX]IB^4UN=Xn<5(;
1631(F3YW@XkH-X_VM[DYM:5XP!T&Y`6|,^{IS-*D.H>:LXjYQ0I3XhAF:9:(==.F*3F1189K/7163D,:@|e2{LS36D4hq{Lw/[email protected]:0307::6D7}&l{Mx657;89;,K5678H&93D(H<&<>0B90X^I;}Ag1{P%3A+>><975}[S{PZE453?4|T2{Q+5187;>447:81{C=hL6{Me^:=7ii{R=.=F<81;48?|h8}Uh{SE|,VxL{ST,7?9Y_5Xk3A#:$%YSYdXeKXOD8+TXh7(@>(YdXYHXl9J6X_5IXaL0N?3YK7Xh!1?XgYz9YEXhXaYPXhC3X`-YLY_XfVf[EGXZ5L8BXL9YHX]SYTXjLXdJ: YcXbQXg1PX]Yx4|Jr{Ys4.8YU+XIY`0N,<H%-H;:0@,74/:8546I=9177154870UC]d<C3HXl7ALYzXFXWP<<?E!88E5@03YYXJ?YJ@6YxX-YdXhYG|9o{`iXjY_>YVXe>AYFX[/(I@0841?):-B=14337:8=|14{c&93788|di{cW-0>0<097/A;N{FqYpugAFT%X/Yo3Yn,#=XlCYHYNX[Xk3YN:YRT4?)-YH%A5XlYF3C1=NWyY}>:74-C673<69545v {iT85YED=64=.F4..9878/D4378?48B3:7:7/1VX[f4{D,{l<5E75{dAbRB-8-@+;DBF/$ZfW8S<4YhXA.(5@*11YV8./S95C/0R-A4AXQYI7?68167B95HA1*<M3?1/@;/=54XbYP36}lc{qzSS38:19?,/39193574/66878Yw1X-87E6=;964X`T734:>86>1/=0;(I-1::7ALYGXhF+Xk[@W%TYbX7)KXdYEXi,H-XhYMRXfYK?XgXj.9HX_SX]YL1XmYJ>Y}WwIXiI-3-GXcYyXUYJ$X`Vs[7;XnYEZ;XF! 3;%8;PXX(N3Y[)Xi1YE&/ :;74YQ6X`33C;-(>Xm0(TYF/!YGXg8 9L5P01YPXO-5%C|qd{{/K/E6,=0144:361:955;6443@?B7*7:F89&F35YaX-CYf,XiFYRXE_e{}sF 0*7XRYPYfXa5YXXY8Xf8Y~XmA[9VjYj*#YMXIYOXk,HHX40YxYMXU8OXe;YFXLYuPXP?EB[QV0CXfY{:9XV[FWE0D6X^YVP*$4%OXiYQ(|xp|%c3{}V`1>Y`XH00:8/M6XhQ1:;3414|TE|&o@1*=81G8<3}6<|(f6>>>5-5:8;093B^3U*+*^*UT30XgYU&7*O1953)5@E78--F7YF*B&0:%P68W9Zn5974J9::3}Vk|-,C)=)1AJ4+<3YGXfY[XQXmT1M-XcYTYZXCYZXEYXXMYN,17>XIG*SaS|/eYJXbI?XdNZ+WRYP<F:R PXf;0Xg`$|1GX9YdXjLYxWX!ZIXGYaXNYm6X9YMX?9EXmZ&XZ#XQ>YeXRXfAY[4 ;0X!Zz0XdN$XhYL XIY^XGNXUYS/1YFXhYk.TXn4DXjB{jg|4DEX]:XcZMW=A.+QYL<LKXc[vV$+&PX*Z3XMYIXUQ:ZvW< YSXFZ,XBYeXMM)?Xa XiZ4/EXcP3%}&-|6~:1(-+YT$@XIYRBC<}&,|7aJ6}bp|8)K1|Xg|8C}[T|8Q.89;-964I38361<=/;883651467<7:>?1:.}le|:Z=39;1Y^)?:J=?XfLXbXi=Q0YVYOXaXiLXmJXO5?.SFXiCYW}-;|=u&D-X`N0X^,YzYRXO(QX_YW9`I|>hZ:N&X)DQXP@YH#XmNXi$YWX^=!G6YbYdX>XjY|XlX^XdYkX>YnXUXPYF)FXT[EVTMYmYJXmYSXmNXi#GXmT3X8HOX[ZiXN]IU2>8YdX1YbX<YfWuZ8XSXcZU%0;1XnXkZ_WTG,XZYX5YSX Yp 05G?XcYW(IXg6K/XlYP4XnI @XnO1W4Zp-9C@%QDYX+OYeX9>--YSXkD.YR%Q/Yo YUX].Xi<HYEZ2WdCE6YMXa7F)=,D>-@9/8@5=?7164;35387?N<618=6>7D+C50<6B03J0{Hj|N9$D,9I-,.KB3}m |NzE0::/81YqXjMXl7YG; [.W=Z0X4XQY]:MXiR,XgM?9$9>:?E;YE77VS[Y564760391?14941:0=:8B:;/1DXjFA-564=0B3XlH1+D85:0Q!B#:-6&N/:9<-R3/7Xn<*3J4.H:+334B.=>30H.;3833/76464665755:/83H6633:=;.>5645}&E|Y)?1/YG-,93&N3AE@5 <L1-G/8A0D858/30>8<549=@B8] V0[uVQYlXeD(P#ID&7T&7;Xi0;7T-$YE)E=1:E1GR):--0YI7=E<}n9|aT6783A>D7&4YG7=391W;Zx<5+>F#J39}o/|cc;6=A050EQXg8A1-}D-|d^5548083563695D?-.YOXd37I$@LYLWeYlX<Yd+YR A$;3-4YQ-9XmA0!9/XLY_YT(=5XdDI>YJ5XP1ZAW{9>X_6R(XhYO65&J%DA)C-!B:97#A9;@?F;&;(9=11/=657/H,<8}bz|j^5446>.L+&Y^8Xb6?(CYOXb*YF(8X`FYR(XPYVXmPQ%&DD(XmZXW??YOXZXfCYJ79,O)XnYF7K0!QXmXi4IYFRXS,6<%-:YO(+:-3Q!1E1:W,Zo}Am|n~;3580534*?3Zc4=9334361693:30C<6/717:<1/;>59&:4}6!|rS36=1?75<8}[B|s809983579I.A.>84758=108564741H*9E{L{|u%YQ<%6XfH.YUXe4YL@,>N}Tv|ve*G0X)Z;/)3@A74(4P&A1X:YVH97;,754*A66:1 D739E3553545558E4?-?K17/770843XAYf838A7K%N!YW4.$T19Z`WJ*0XdYJXTYOXNZ 1XaN1A+I&Xi.Xk3Z3GB&5%WhZ1+5#Y[X<4YMXhQYoQXVXbYQ8XSYUX4YXBXWDMG0WxZA[8V+Z8X;D],Va$%YeX?FXfX[XeYf<X:Z[WsYz8X_Y]%XmQ(!7BXIZFX]&YE3F$(1XgYgYE& +[+W!<YMYFXc;+PXCYI9YrWxGXY9DY[!GXiI7::)OC;*$.>N*HA@{C|}&k=:<TB83X`3YL+G4XiK]i}(fYK<=5$.FYE%4*5*H*6XkCYL=*6Xi6!Yi1KXR4YHXbC8Xj,B9ZbWx/XbYON#5B}Ue}+QKXnF1&YV5XmYQ0!*3IXBYb71?1B75XmF;0B976;H/RXU:YZX;BG-NXj;XjI>A#D3B636N;,*%<D:0;YRXY973H5)-4FXOYf0:0;/7759774;7;:/855:543L43<?6=E,.A4:C=L)%4YV!1(YE/4YF+ F3%;S;&JC:%/?YEXJ4GXf/YS-EXEYW,9;E}X$}547EXiK=51-?71C%?57;5>463553Zg90;6447?<>4:9.7538XgN{|!}9K/E&3-:D+YE1)YE/3;37/:05}n<}:[email protected]=.(A Q3%6K>3(P3#AYE$-6H/456*C=.XHY[#S.<780191;057C)=6HXj?955B:K1 E>-B/9,;5.!L?:0>/.@//:;7833YZ56<4:YE=/:7Z_WGC%3I6>XkC*&NA16X=Yz2$X:Y^&J48<99k8}CyB-61<18K946YO4{|N}E)YIB9K0L>4=46<1K0+R;6-=1883:478;4,S+3YJX`GJXh.Yp+Xm6MXcYpX(>7Yo,/:X=Z;Xi0YTYHXjYmXiXj;*;I-8S6N#XgY}.3XfYGO3C/$XjL$*NYX,1 6;YH&<XkK9C#I74.>}Hd`A748X[T450[n75<4439:18A107>|ET}Rf<1;14876/Yb983E<5.YNXd4149>,S=/4E/<306443G/06}0&}UkYSXFYF=44=-5095=88;63844,9E6644{PL}WA8:>)7+>763>>0/B3A545CCnT}Xm|dv}Xq1L/YNXk/H8;;.R63351YY747@15YE4J8;46;.38.>4A369.=-83,;Ye3?:[email protected]+N353;/;@(X[YYD>@/05-I*@.:551741Yf5>6A443<3535;.58/86=D4753442$635D1>0359NQ @73:3:>><Xn?;43C14 ?Y|X611YG1&<+,4<*,YLXl<1/AIXjF*N89A4Z576K1XbJ5YF.ZOWN.YGXO/YQ01:4G38Xl1;KI0YFXB=R<7;D/,/4>;$I,YGXm94@O35Yz66695385.>:6A#5}W7n^4336:4157597434433<3|XA}m`>=D>:4A.337370?-6Q96{`E|4A}C`|Qs{Mk|J+~r>|o,wHv>Vw}!c{H!|Gb|*Ca5}J||,U{t+{CN[!M65YXOY_*B,Y[Z9XaX[QYJYLXPYuZ%XcZ8LY[SYPYKZM<LMYG9OYqSQYM~[e{UJXmQYyZM_)>YjN1~[f3{aXFY|Yk:48YdH^NZ0|T){jVFYTZNFY^YTYN~[h{nPYMYn3I]`EYUYsYIZEYJ7Yw)YnXPQYH+Z.ZAZY]^Z1Y`YSZFZyGYHXLYG 8Yd#4~[i|+)YH9D?Y^F~Y7|-eYxZ^WHYdYfZQ~[j|3>~[k|3oYmYqY^XYYO=Z*4[]Z/OYLXhZ1YLZIXgYIHYEYK,<Y`YEXIGZI[3YOYcB4SZ!YHZ*&Y{Xi3~[l|JSY`Zz?Z,~[m|O=Yi>??XnYWXmYS617YVYIHZ(Z4[~L4/=~[n|Yu{P)|];YOHHZ}~[o33|a>~[r|aE]DH~[s|e$Zz~[t|kZFY~XhYXZB[`Y}
1631~[u|{SZ&OYkYQYuZ2Zf8D~[v}% ~[w3},Q[X]+YGYeYPIS~[y}4aZ!YN^!6PZ*~[z}?E~[{3}CnZ=~[}}EdDZz/9A3(3S<,YR8.D=*XgYPYcXN3Z5 4)~[~}JW=$Yu.XX~] }KDX`PXdZ4XfYpTJLY[F5]X~[2Yp}U+DZJ::<446[m@~]#3}]1~]%}^LZwZQ5Z`/OT<Yh^ -~]&}jx[ ~m<z!%2+~ly4VY-~o>}p62yz!%2+Xf2+~ly4VY-zQ`z (=] 2z~o2",C={" ":0,"!":1},c=34,i=2,p,s="",u=String.fromCharCode,t=u(12539),m=[];while(++c<127)C[u(c)]=c^39&&c^92?i++:0;i=0;while(0<=(c=C[a.charAt(i++)]))if(16==c)if((c=C[a.charAt(i++)])<87){if(86==c)c=1879;while(c--){/*s+=u(*/++p/*)*/;m.push(p)}}else{/*s+=s.substr(8272,360);*/m=m.concat(m.slice(8272,8632))}else if(c<86){/*s+=u(*/p+=c<51?c-16:(c-55)*92+C[a.charAt(i++)]/*)*/;m.push(p)}else if((c=((c-86)*92+C[a.charAt(i++)])*92+C[a.charAt(i++)])<49152){/*s+=u(*/p=c<40960?c:c|57344/*)*/;m.push(p)}else{c&=511;while(c--){/*s+=t*/;m.push(12539)}p=12539}return {"array":m}')();
1632
1633	var JCT11280 = Function('var a="zKV33~jZ4zN=~ji36XazM93y!{~k2y!o~k0ZlW6zN?3Wz3W?{EKzK[33[`y|;-~j^YOTz$!~kNy|L1$353~jV3zKk3~k-4P4zK_2+~jY4y!xYHR~jlz$_~jk4z$e3X5He<0y!wy|X3[:~l|VU[F3VZ056Hy!nz/m1XD61+1XY1E1=1y|bzKiz!H034zKj~mEz#c5ZA3-3X$1~mBz$$3~lyz#,4YN5~mEz#{ZKZ3V%7Y}!J3X-YEX_J(3~mAz =V;kE0/y|F3y!}~m>z/U~mI~j_2+~mA~jp2;~m@~k32;~m>V}2u~mEX#2x~mBy+x2242(~mBy,;2242(~may->2&XkG2;~mIy-_2&NXd2;~mGz,{4<6:.:B*B:XC4>6:.>B*BBXSA+A:X]E&E<~r#z+625z s2+zN=`HXI@YMXIAXZYUM8X4K/:Q!Z&33 3YWX[~mB`{zKt4z (zV/z 3zRw2%Wd39]S11z$PAXH5Xb;ZQWU1ZgWP%3~o@{Dgl#gd}T){Uo{y5_d{e@}C(} WU9|cB{w}bzvV|)[} H|zT}d||0~{]Q|(l{|x{iv{dw}(5}[Z|kuZ }cq{{y|ij}.I{idbof%cu^d}Rj^y|-M{ESYGYfYsZslS`?ZdYO__gLYRZ&fvb4oKfhSf^d<Yeasc1f&a=hnYG{QY{D`Bsa|u,}Dl|_Q{C%xK|Aq}C>|c#ryW=}eY{L+`)][YF_Ub^h4}[X|?r|u_ex}TL@YR]j{SrXgo*|Gv|rK}B#mu{R1}hs|dP{C7|^Qt3|@P{YVV |8&}#D}ef{e/{Rl|>Hni}R1{Z#{D[}CQlQ||E}[s{SG_+i8eplY[=[|ec[$YXn#`hcm}YR|{Ci(_[ql|?8p3]-}^t{wy}4la&pc|3e{Rp{LqiJ],] `kc(]@chYnrM`O^,ZLYhZB]ywyfGY~aex!_Qww{a!|)*lHrM{N+n&YYj~Z b c#e_[hZSon|rOt`}hBXa^i{lh|<0||r{KJ{kni)|x,|0auY{D!^Sce{w;|@S|cA}Xn{C1h${E]Z-XgZ*XPbp]^_qbH^e[`YM|a||+=]!Lc}]vdBc=j-YSZD]YmyYLYKZ9Z>Xcczc2{Yh}9Fc#Z.l{}(D{G{{mRhC|L3b#|xK[Bepj#ut`H[,{E9Yr}1b{[e]{ZFk7[ZYbZ0XL]}Ye[(`d}c!|*y`Dg=b;gR]Hm=hJho}R-[n}9;{N![7k_{UbmN]rf#pTe[x8}!Qcs_rs[m`|>N}^V})7{^r|/E}),}HH{OYe2{Skx)e<_.cj.cjoMhc^d}0uYZd!^J_@g,[[[?{i@][|3S}Yl3|!1|eZ|5IYw|1D}e7|Cv{OHbnx-`wvb[6[4} =g+k:{C:}ed{S]|2M]-}WZ|/q{LF|dYu^}Gs^c{Z=}h>|/i|{W]:|ip{N:|zt|S<{DH[p_tvD{N<[8Axo{X4a.^o^X>Yfa59`#ZBYgY~_t^9`jZHZn`>G[oajZ;X,i)Z.^~YJe ZiZF^{][[#Zt^|]Fjx]&_5dddW]P0C[-]}]d|y {C_jUql] |OpaA[Z{lp|rz}:Mu#]_Yf6{Ep?f5`$[6^D][^u[$[6^.Z8]]ePc2U/=]K^_+^M{q*|9tYuZ,s(dS{i=|bNbB{uG}0jZOa:[-]dYtu3]:]<{DJ_SZIqr_`l=Yt`gkTnXb3d@kiq0a`Z{|!B|}e}Ww{Sp,^Z|0>_Z}36|]A|-t}lt{R6pi|v8hPu#{C>YOZHYmg/Z4nicK[}hF_Bg|YRZ7c|crkzYZY}_iXcZ.|)U|L5{R~qi^Uga@Y[xb}&qdbd6h5|Btw[}c<{Ds53[Y7]?Z<|e0{L[ZK]mXKZ#Z2^tavf0`PE[OSOaP`4gi`qjdYMgys/?[nc,}EEb,eL]g[n{E_b/vcvgb.{kcwi`~v%|0:|iK{Jh_vf5lb}KL|(oi=LrzhhY_^@`zgf[~g)[J_0fk_V{T)}I_{D&_/d9W/|MU[)f$xW}?$xr4<{Lb{y4}&u{XJ|cm{Iu{jQ}CMkD{CX|7A}G~{kt)nB|d5|<-}WJ}@||d@|Iy}Ts|iL|/^|no|0;}L6{Pm]7}$zf:|r2}?C_k{R(}-w|`G{Gy[g]bVje=_0|PT{^Y^yjtT[[[l!Ye_`ZN]@[n_)j3nEgMa]YtYpZy].d-Y_cjb~Y~[nc~sCi3|zg}B0}do{O^{|$`_|D{}U&|0+{J3|8*]iayx{a{xJ_9|,c{Ee]QXlYb]$[%YMc*]w[aafe]aVYi[fZEii[xq2YQZHg]Y~h#|Y:thre^@^|_F^CbTbG_1^qf7{L-`VFx Zr|@EZ;gkZ@slgko`[e}T:{Cu^pddZ_`yav^Ea+[#ZBbSbO`elQfLui}.F|txYcbQ`XehcGe~fc^RlV{D_0ZAej[l&jShxG[ipB_=u:eU}3e8[=j|{D(}dO{Do[BYUZ0/]AYE]ALYhZcYlYP/^-^{Yt_1_-;YT`P4BZG=IOZ&]H[e]YYd[9^F[1YdZxZ?Z{Z<]Ba2[5Yb[0Z4l?]d_;_)a?YGEYiYv`_XmZs4ZjY^Zb]6gqGaX^9Y}dXZr[g|]Y}K aFZp^k^F]M`^{O1Ys]ZCgCv4|E>}8eb7}l`{L5[Z_faQ|c2}Fj}hw^#|Ng|B||w2|Sh{v+[G}aB|MY}A{|8o}X~{E8paZ:]i^Njq]new)`-Z>haounWhN}c#{DfZ|fK]KqGZ=:u|fqoqcv}2ssm}.r{]{nIfV{JW)[K|,Z{Uxc|]l_KdCb%]cfobya3`p}G^|LZiSC]U|(X|kBlVg[kNo({O:g:|-N|qT}9?{MBiL}Sq{`P|3a|u.{Uaq:{_o|^S}jX{Fob0`;|#y_@[V[K|cw[<_ }KU|0F}d3|et{Q7{LuZttsmf^kYZ`Af`}$x}U`|Ww}d]| >}K,r&|XI|*e{C/a-bmr1fId4[;b>tQ_:]hk{b-pMge]gfpo.|(w[jgV{EC1Z,YhaY^q,_G[c_g[J0YX]`[h^hYK^_Yib,` {i6vf@YM^hdOKZZn(jgZ>bzSDc^Z%[[o9[2=/YHZ(_/Gu_`*|8z{DUZxYt^vuvZjhi^lc&gUd4|<UiA`z]$b/Z?l}YI^jaHxe|;F}l${sQ}5g}hA|e4}?o{ih}Uz{C)jPe4]H^J[Eg[|AMZMlc}:,{iz}#*|gc{Iq|/:|zK{l&}#u|myd{{M&v~nV};L|(g|I]ogddb0xsd7^V})$uQ{HzazsgxtsO^l}F>ZB]r|{7{j@cU^{{CbiYoHlng]f+nQ[bkTn/}<-d9q {KXadZYo+n|l[|lc}V2{[a{S4Zam~Za^`{HH{xx_SvF|ak=c^[v^7_rYT`ld@]:_ub%[$[m](Shu}G2{E.ZU_L_R{tz`vj(f?^}hswz}GdZ}{S:h`aD|?W|`dgG|if{a8|J1{N,}-Ao3{H#{mfsP|[ bzn+}_Q{MT{u4kHcj_q`eZj[8o0jy{p7}C|[}l){MuYY{|Ff!Ykn3{rT|m,^R|,R}$~Ykgx{P!]>iXh6[l[/}Jgcg{JYZ.^qYfYIZl[gZ#Xj[Pc7YyZD^+Yt;4;`e8YyZVbQ7YzZxXja.7SYl[s]2^/Ha$[6ZGYrb%XiYdf2]H]kZkZ*ZQ[ZYS^HZXcCc%Z|[(bVZ]]:OJQ_DZCg<[,]%Zaa [g{C00HY[c%[ChyZ,Z_`PbXa+eh`^&jPi0a[ggvhlekL]w{Yp^v}[e{~;k%a&k^|nR_z_Qng}[E}*Wq:{k^{FJZpXRhmh3^p>de^=_7`|ZbaAZtdhZ?n4ZL]u`9ZNc3g%[6b=e.ZVfC[ZZ^^^hD{E(9c(kyZ=bb|Sq{k`|vmr>izlH[u|e`}49}Y%}FT{[z{Rk}Bz{TCc/lMiAqkf(m$hDc;qooi[}^o:c^|Qm}a_{mrZ(pA`,}<2sY| adf_%|}`}Y5U;}/4|D>|$X{jw{C<|F.hK|*A{MRZ8Zsm?imZm_?brYWZrYx`yVZc3a@f?aK^ojEd {bN}/3ZH]/$YZhm^&j 9|(S|b]mF}UI{q&aM]LcrZ5^.|[j`T_V_Gak}9J[ ZCZD|^h{N9{~&[6Zd{}B}2O|cv]K}3s}Uy|l,fihW{EG`j_QOp~Z$F^zexS`dcISfhZBXP|.vn|_HYQ|)9|cr]<`&Z6]m_(ZhPcSg>`Z]5`~1`0Xcb4k1{O!bz|CN_T{LR|a/gFcD|j<{Z._[f)mPc:1`WtIaT1cgYkZOaVZOYFrEe[}T$}Ch}mk{K-^@]fH{Hdi`c*Z&|Kt{if[C{Q;{xYB`dYIX:ZB[}]*[{{p9|4GYRh2ao{DS|V+[zd$`F[ZXKadb*A] Ys]Maif~a/Z2bmclb8{Jro_rz|x9cHojbZ{GzZx_)]:{wAayeDlx}<=`g{H1{l#}9i|)=|lP{Qq}.({La|!Y{i2EZfp=c*}Cc{EDvVB|;g}2t{W4av^Bn=]ri,|y?|3+}T*ckZ*{Ffr5e%|sB{lx^0]eZb]9[SgAjS_D|uHZx]dive[c.YPkcq/}db{EQh&hQ|eg}G!ljil|BO]X{Qr_GkGl~YiYWu=c3eb}29v3|D|}4i||.{Mv})V{SP1{FX}CZW6{cm|vO{pS|e#}A~|1i}81|Mw}es|5[}3w{C`h9aL]o{}p[G`>i%a1Z@`Ln2bD[$_h`}ZOjhdTrH{[j_:k~kv[Sdu]CtL}41{I |[[{]Zp$]XjxjHt_eThoa#h>sSt8|gK|TVi[Y{t=}Bs|b7Zpr%{gt|Yo{CS[/{iteva|cf^hgn}($_c^wmb^Wm+|55jrbF|{9^ q6{C&c+ZKdJkq_xOYqZYSYXYl`8]-cxZAq/b%b*_Vsa[/Ybjac/OaGZ4fza|a)gY{P?| I|Y |,pi1n7}9bm9ad|=d{aV|2@[(}B`d&|Uz}B}{`q|/H|!JkM{FU|CB|.{}Az}#P|lk}K{|2rk7{^8^?`/|k>|Ka{Sq}Gz}io{DxZh[yK_#}9<{TRdgc]`~Z>JYmYJ]|`!ZKZ]gUcx|^E[rZCd`f9oQ[NcD_$ZlZ;Zr}mX|=!|$6ZPZYtIo%fj}
1633CpcN|B,{VDw~gb}@hZg`Q{LcmA[(bo`<|@$|o1|Ss}9Z_}tC|G`{F/|9nd}i=}V-{L8aaeST]daRbujh^xlpq8|}zs4bj[S`J|]?G{P#{rD{]I`OlH{Hm]VYuSYUbRc*6[j`8]pZ[bt_/^Jc*[<Z?YE|Xb|?_Z^Vcas]h{t9|Uwd)_(=0^6Zb{Nc} E[qZAeX[a]P^|_J>e8`W^j_Y}R{{Jp__]Ee#e:iWb9q_wKbujrbR}CY`,{mJ}gz{Q^{t~N|? gSga`V_||:#mi}3t|/I`X{N*|ct|2g{km}gi|{={jC}F;|E}{ZZjYf*frmu}8Tdroi{T[|+~}HG{cJ}DM{Lp{Ctd&}$hi3|FZ| m}Kr|38}^c|m_|Tr{Qv|36}?Up>|;S{DV{k_as}BK{P}}9p|t`jR{sAm4{D=b4pWa[}Xi{EjwEkI}3S|E?u=X0{jf} S|NM|JC{qo^3cm]-|JUx/{Cj{s>{Crt[UXuv|D~|j|d{YXZR}Aq}0r}(_{pJfi_z}0b|-vi)Z mFe,{f4|q`b{}^Z{HM{rbeHZ|^x_o|XM|L%|uFXm}@C_{{Hhp%a7|0p[Xp+^K}9U{bP}: tT}B|}+$|b2|[^|~h{FAby[`{}xgygrt~h1[li`c4vz|,7p~b(|mviN}^pg[{N/|g3|^0c,gE|f%|7N{q[|tc|TKA{LU}I@|AZp(}G-sz{F |qZ{}F|f-}RGn6{Z]_5})B}UJ{FFb2]4ZI@v=k,]t_Dg5Bj]Z-]L]vrpdvdGlk|gF}G]|IW}Y0[G| /bo|Te^,_B}#n^^{QHYI[?hxg{[`]D^IYRYTb&kJ[cri[g_9]Ud~^_]<p@_e_XdNm-^/|5)|h_{J;{kacVopf!q;asqd}n)|.m|bf{QW|U)}b+{tL|w``N|to{t ZO|T]jF}CB|0Q{e5Zw|k |We}5:{HO{tPwf_uajjBfX}-V_C_{{r~gg|Ude;s+}KNXH}! `K}eW{Upwbk%ogaW}9EYN}YY|&v|SL{C3[5s.]Y]I]u{M6{pYZ`^,`ZbCYR[1mNg>rsk0Ym[jrE]RYiZTr*YJ{Ge|%-lf|y(`=[t}E6{k!|3)}Zk} ][G{E~cF{u3U.rJ|a9p#o#ZE|?|{sYc#vv{E=|LC}cu{N8`/`3`9rt[4|He{cq|iSYxY`}V |(Q|t4{C?]k_Vlvk)BZ^r<{CL}#h}R+[<|i=}X|{KAo]|W<`K{NW|Zx}#;|fe{IMr<|K~tJ_x}AyLZ?{GvbLnRgN}X&{H7|x~}Jm{]-| GpNu0}.ok>|c4{PYisrDZ|fwh9|hfo@{H~XSbO]Odv]%`N]b1Y]]|eIZ}_-ZA]aj,>eFn+j[aQ_+]h[J_m_g]%_wf.`%k1e#Z?{CvYu_B^|gk`Xfh^M3`afGZ-Z|[m{L}|k3cp[it ^>YUi~d>{T*}YJ{Q5{Jxa$hg|%4`}|LAgvb }G}{P=|<;Ux{_skR{cV|-*|s-{Mp|XP|$G|_J}c6cM{_=_D|*9^$ec{V;|4S{qO|w_|.7}d0|/D}e}|0G{Dq]Kdp{}dfDi>}B%{Gd|nl}lf{C-{y}|ANZr}#={T~|-(}c&{pI|ft{lsVP}){|@u}!W|bcmB{d?|iW|:dxj{PSkO|Hl]Li:}VYk@|2={fnWt{M3`cZ6|)}|Xj}BYa?vo{e4|L7|B7{L7|1W|lvYO}W8nJ|$Vih|{T{d*_1|:-n2dblk``fT{Ky|-%}m!|Xy|-a{Pz}[l{kFjz|iH}9N{WE{x,|jz}R {P|{D)c=nX|Kq|si}Ge{sh|[X{RF{t`|jsr*fYf,rK|/9}$}}Nf{y!1|<Std}4Wez{W${Fd_/^O[ooqaw_z[L`Nbv[;l7V[ii3_PeM}.h^viqYjZ*j1}+3{bt{DR[;UG}3Og,rS{JO{qw{d<_zbAh<R[1_r`iZTbv^^a}c{iEgQZ<exZFg.^Rb+`Uj{a+{z<[~r!]`[[|rZYR|?F|qppp]L|-d|}K}YZUM|=Y|ktm*}F]{D;g{uI|7kg^}%?Z%ca{N[_<q4xC]i|PqZC]n}.bDrnh0Wq{tr|OMn6tM|!6|T`{O`|>!]ji+]_bTeU}Tq|ds}n|{Gm{z,f)}&s{DPYJ`%{CGd5v4tvb*hUh~bf]z`jajiFqAii]bfy^U{Or|m+{I)cS|.9k:e3`^|xN}@Dnlis`B|Qo{`W|>||kA}Y}{ERYuYx`%[exd`]|OyiHtb}HofUYbFo![5|+]gD{NIZR|Go}.T{rh^4]S|C9_}xO^i`vfQ}C)bK{TL}cQ|79iu}9a];sj{P.o!f[Y]pM``Jda^Wc9ZarteBZClxtM{LW}l9|a.mU}KX}4@{I+f1}37|8u}9c|v${xGlz}jP{Dd1}e:}31}%3X$|22i<v+r@~mf{sN{C67G97855F4YL5}8f{DT|xy{sO{DXB334@55J1)4.G9A#JDYtXTYM4, YQD9;XbXm9SX]IB^4UN=Xn<5(;(F3YW@XkH-X_VM[DYM:5XP!T&Y`6|,^{IS-*D.H>:LXjYQ0I3XhAF:9:(==.F*3F1189K/7163D,:@|e2{LS36D4hq{Lw/[email protected]:0307::6D7}&l{Mx657;89;,K5678H&93D(H<&<>0B90X^I;}Ag1{P%3A+>><975}[S{PZE453?4|T2{Q+5187;>447:81{C=hL6{Me^:=7ii{R=.=F<81;48?|h8}Uh{SE|,VxL{ST,7?9Y_5Xk3A#:$%YSYdXeKXOD8+TXh7(@>(YdXYHXl9J6X_5IXaL0N?3YK7Xh!1?XgYz9YEXhXaYPXhC3X`-YLY_XfVf[EGXZ5L8BXL9YHX]SYTXjLXdJ: YcXbQXg1PX]Yx4|Jr{Ys4.8YU+XIY`0N,<H%-H;:0@,74/:8546I=9177154870UC]d<C3HXl7ALYzXFXWP<<?E!88E5@03YYXJ?YJ@6YxX-YdXhYG|9o{`iXjY_>YVXe>AYFX[/(I@0841?):-B=14337:8=|14{c&93788|di{cW-0>0<097/A;N{FqYpugAFT%X/Yo3Yn,#=XlCYHYNX[Xk3YN:YRT4?)-YH%A5XlYF3C1=NWyY}>:74-C673<69545v {iT85YED=64=.F4..9878/D4378?48B3:7:7/1VX[f4{D,{l<5E75{dAbRB-8-@+;DBF/$ZfW8S<4YhXA.(5@*11YV8./S95C/0R-A4AXQYI7?68167B95HA1*<M3?1/@;/=54XbYP36}lc{qzSS38:19?,/39193574/66878Yw1X-87E6=;964X`T734:>86>1/=0;(I-1::7ALYGXhF+Xk[@W%TYbX7)KXdYEXi,H-XhYMRXfYK?XgXj.9HX_SX]YL1XmYJ>Y}WwIXiI-3-GXcYyXUYJ$X`Vs[7;XnYEZ;XF! 3;%8;PXX(N3Y[)Xi1YE&/ :;74YQ6X`33C;-(>Xm0(TYF/!YGXg8 9L5P01YPXO-5%C|qd{{/K/E6,=0144:361:955;6443@?B7*7:F89&F35YaX-CYf,XiFYRXE_e{}sF 0*7XRYPYfXa5YXXY8Xf8Y~XmA[9VjYj*#YMXIYOXk,HHX40YxYMXU8OXe;YFXLYuPXP?EB[QV0CXfY{:9XV[FWE0D6X^YVP*$4%OXiYQ(|xp|%c3{}V`1>Y`XH00:8/M6XhQ1:;3414|TE|&o@1*=81G8<3}6<|(f6>>>5-5:8;093B^3U*+*^*UT30XgYU&7*O1953)5@E78--F7YF*B&0:%P68W9Zn5974J9::3}Vk|-,C)=)1AJ4+<3YGXfY[XQXmT1M-XcYTYZXCYZXEYXXMYN,17>XIG*SaS|/eYJXbI?XdNZ+WRYP<F:R PXf;0Xg`$|1GX9YdXjLYxWX!ZIXGYaXNYm6X9YMX?9EXmZ&XZ#XQ>YeXRXfAY[4 ;0X!Zz0XdN$XhYL XIY^XGNXUYS/1YFXhYk.TXn4DXjB{jg|4DEX]:XcZMW=A.+QYL<LKXc[vV$+&PX*Z3XMYIXUQ:ZvW< YSXFZ,XBYeXMM)?Xa XiZ4/EXcP3%}&-|6~:1(-+YT$@XIYRBC<}&,|7aJ6}bp|8)K1|Xg|8C}[T|8Q.89;-964I38361<=/;883651467<7:>?1:.}le|:Z=39;1Y^)?:J=?XfLXbXi=Q0YVYOXaXiLXmJXO5?.SFXiCYW}-;|=u&D-X`N0X^,YzYRXO(QX_YW9`I|>hZ:N&X)DQXP@YH#XmNXi$YWX^=!G6YbYdX>XjY|XlX^XdYkX>YnXUXPYF)FXT[EVTMYmYJXmYSXmNXi#GXmT3X8HOX[ZiXN]IU2>8YdX1YbX<YfWuZ8XSXcZU%0;1XnXkZ_WTG,XZYX5YSX Yp 05G?XcYW(IXg6K/XlYP4XnI @XnO1W4Zp-9C@%QDYX+OYeX9>--YSXkD.YR%Q/Yo YUX].Xi<HYEZ2WdCE6YMXa7F)=,D>-@9/8@5=?7164;35387?N<618=6>7D+C50<6B03J0{Hj|N9$D,9I-,.KB3}m |NzE0::/81YqXjMXl7YG; [.W=Z0X4XQY]:MXiR,XgM?9$9>:?E;YE77VS[Y564760391?14941:0=:8B:;/1DXjFA-564=0B3XlH1+D85:0Q!B#:-6&N/:9<-R3/7Xn<*3J4.H:+334B.=>30H.;3833/76464665755:/83H6633:=;.>5645}&E|Y)?1/YG-,93&N3AE@5 <L1-G/8A0D858/30>8<549=@B8] V0[uVQYlXeD(P#ID&7T&7;Xi0;7T-$YE)E=1:E1GR):--0YI7=E<}n9|aT6783A>D7&4YG7=391W;Zx<5+>F#J39}o/|cc;6=A050EQXg8A1-}D-|d^5548083563695D?-.YOXd37I$@LYLWeYlX<Yd+YR A$;3-4YQ-9XmA0!9/XLY_YT(=5XdDI>YJ5XP1ZAW{9>X_6R(XhYO65&J%DA)C-!B:97#A9;@?F;&;(9=11/=657/H,<8}bz|j^5446>.L+&Y^8Xb6?(CYOXb*YF(8X`FYR(XPYVXmPQ%&DD(XmZXW??YOXZXfCYJ79,O)XnYF7K0!QXmXi4IYFRXS,6<%-:YO(+:-3Q!1E1:W,Zo}Am|n~;3580534*?3Zc4=9334361693:30C<6/717:<1/;>59&:4}6!|rS36=1?75<8}[B|s809983579I.A.>84758=108564741H*9E{L{|u%YQ<%6XfH.YUXe4YL@,>N}Tv|ve*G0X)Z;/)3@A74(4P&A1X:YVH97;,754*A66:1 D739E3553545558E4?-?K17/770843XAYf838A7K%N!YW4.$T19Z`WJ*0XdYJXTYOXNZ 1XaN1A+I&Xi.Xk3Z3GB&5%WhZ1+5#Y[X<4YMXhQYoQXVXbYQ8XSYUX4YXBXWDMG0WxZA[8V+Z8X;D],Va$%YeX?FXfX[XeYf<X:Z[WsYz8X_Y]%XmQ(!7BXIZFX]&YE3F$(1XgYgYE& +[+W!<YMYFXc;+PXCYI9YrWxGXY9DY[!GXiI7::)OC;*$.>N*HA@{C|}&k=:<TB83X`3YL+G4XiK]i}
1633(fYK<=5$.FYE%4*5*H*6XkCYL=*6Xi6!Yi1KXR4YHXbC8Xj,B9ZbWx/XbYON#5B}Ue}+QKXnF1&YV5XmYQ0!*3IXBYb71?1B75XmF;0B976;H/RXU:YZX;BG-NXj;XjI>A#D3B636N;,*%<D:0;YRXY973H5)-4FXOYf0:0;/7759774;7;:/855:543L43<?6=E,.A4:C=L)%4YV!1(YE/4YF+ F3%;S;&JC:%/?YEXJ4GXf/YS-EXEYW,9;E}X$}547EXiK=51-?71C%?57;5>463553Zg90;6447?<>4:9.7538XgN{|!}9K/E&3-:D+YE1)YE/3;37/:05}n<}:[email protected]=.(A Q3%6K>3(P3#AYE$-6H/456*C=.XHY[#S.<780191;057C)=6HXj?955B:K1 E>-B/9,;5.!L?:0>/.@//:;7833YZ56<4:YE=/:7Z_WGC%3I6>XkC*&NA16X=Yz2$X:Y^&J48<99k8}CyB-61<18K946YO4{|N}E)YIB9K0L>4=46<1K0+R;6-=1883:478;4,S+3YJX`GJXh.Yp+Xm6MXcYpX(>7Yo,/:X=Z;Xi0YTYHXjYmXiXj;*;I-8S6N#XgY}.3XfYGO3C/$XjL$*NYX,1 6;YH&<XkK9C#I74.>}Hd`A748X[T450[n75<4439:18A107>|ET}Rf<1;14876/Yb983E<5.YNXd4149>,S=/4E/<306443G/06}0&}UkYSXFYF=44=-5095=88;63844,9E6644{PL}WA8:>)7+>763>>0/B3A545CCnT}Xm|dv}Xq1L/YNXk/H8;;.R63351YY747@15YE4J8;46;.38.>4A369.=-83,;Ye3?:[email protected]+N353;/;@(X[YYD>@/05-I*@.:551741Yf5>6A443<3535;.58/86=D4753442$635D1>0359NQ @73:3:>><Xn?;43C14 ?Y|X611YG1&<+,4<*,YLXl<1/AIXjF*N89A4Z576K1XbJ5YF.ZOWN.YGXO/YQ01:4G38Xl1;KI0YFXB=R<7;D/,/4>;$I,YGXm94@O35Yz66695385.>:6A#5}W7n^4336:4157597434433<3|XA}m`>=D>:4A.337370?-6Q96{`E|4A}C`|Qs{Mk|J+~r>|o,wHv>Vw}!c{H!|Gb|*Ca5}J||,U{t+{CN[!M65YXOY_*B,Y[Z9XaX[QYJYLXPYuZ%XcZ8LY[SYPYKZM<LMYG9OYqSQYM~[e{UJXmQYyZM_)>YjN1~[f3{aXFY|Yk:48YdH^NZ0|T){jVFYTZNFY^YTYN~[h{nPYMYn3I]`EYUYsYIZEYJ7Yw)YnXPQYH+Z.ZAZY]^Z1Y`YSZFZyGYHXLYG 8Yd#4~[i|+)YH9D?Y^F~Y7|-eYxZ^WHYdYfZQ~[j|3>~[k|3oYmYqY^XYYO=Z*4[]Z/OYLXhZ1YLZIXgYIHYEYK,<Y`YEXIGZI[3YOYcB4SZ!YHZ*&Y{Xi3~[l|JSY`Zz?Z,~[m|O=Yi>??XnYWXmYS617YVYIHZ(Z4[~L4/=~[n|Yu{P)|];YOHHZ}~[o33|a>~[r|aE]DH~[s|e$Zz~[t|kZFY~XhYXZB[`Y}~[u|{SZ&OYkYQYuZ2Zf8D~[v}% ~[w3},Q[X]+YGYeYPIS~[y}4aZ!YN^!6PZ*~[z}?E~[{3}CnZ=~[}}EdDZz/9A3(3S<,YR8.D=*XgYPYcXN3Z5 4)~[~}JW=$Yu.XX~] }KDX`PXdZ4XfYpTJLY[F5]X~[2Yp}U+DZJ::<446[m@~]#3}]1~]%}^LZwZQ5Z`/OT<Yh^ -~]&}jx[ ~m<z!%2+~ly4VY-~o>}p62yz!%2+Xf2+~ly4VY-zQ`z (=] 2z~o2",C={" ":0,"!":1},c=34,i=2,p,s="",u=String.fromCharCode,t=u(12539);while(++c<127)C[u(c)]=c^39&&c^92?i++:0;i=0;while(0<=(c=C[a.charAt(i++)]))if(16==c)if((c=C[a.charAt(i++)])<87){if(86==c)c=1879;while(c--)s+=u(++p)}else s+=s.substr(8272,360);else if(c<86)s+=u(p+=c<51?c-16:(c-55)*92+C[a.charAt(i++)]);else if((c=((c-86)*92+C[a.charAt(i++)])*92+C[a.charAt(i++)])<49152)s+=u(p=c<40960?c:c|57344);else{c&=511;while(c--)s+=t;p=12539}return s')();
1634
1635	var JCT8836 = JCT11280.substring(0, 8836);
1636	// var JCT8836=(JCT11280=JISX0208.s).substring(0,8836);
1637
1638	/**
1639  * U2CP,CP2U Unicode番号とJIS番号の対応テーブル
1640  *   Unicode番号はスカラ値、JIS番号は区点位置(1面、1~119区、1~94点)を1+7+7bitの15bit整数にしたものを用いる。
1641  *
1642  *   JCT11280はWindows-31Jのテーブルで、重複登録された漢字がある。
1643  *   重複登録された漢字の区点位置を求める場合はWindows APIの仕様に従い
1644  *    (1)JIS X 0208-1990の登録文字である場合は、これに統一
1645  *    (2)「NEC特殊文字」「IBM拡張文字」が重複する場合は、「NEC特殊文字」に統一
1646  *    (3)「NEC選定IBM拡張文字」「IBM拡張文字」が重複する場合は、「IBM拡張文字」に統一 
1647  *   のルールでコードポイントに変換する。
1648  *   言い換えると,1~88区までは先に現れたコードポイントを優先し、89~92区のNEC選定IBM拡張文字は利用せず
1649  *   代わりに115~119区に現れるIBM拡張文字のコードポイントを利用する
1650  *   
1651  * @see http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932#Windows-31J_.E3.81.AB.E9.87.8D.E8.A4.87.E7.99.BB.E9.8C.B2.E3.81.95.E3.82.8C.E3.81.9F.E3.82.B3.E3.83.BC.E3.83.89
1652 */
1653	var U2CP = {},
1654	    CP2U = {},
1655	    P1 = 1 << 14;
1656	(function (array) {
1657		var sc,
1658		    cp,
1659		    i,
1660		    il = array.length;
1661		for (i = 0; i < il; i++) {
1662			sc = array[i];
1663			if (sc === 12539 && i > 5) {
1664				continue;
1665			}
1666			cp = P1 | (i / 94 | 0) << 7 | i % 94;
1667			CP2U[cp] = sc;
1668			if ((i < 8272 || 10715 < i) && U2CP[sc] === undefined) {
1669				U2CP[sc] = cp;
1670			}
1671		}
1672	})(JISX0208.array);
1673
1674	var charset = { Unicode: {}, SJIS: {}, EUCJP: {}, JIS7: {}, JIS8: {}, UTF7: {}, UTF8: {}, UTF16LE: {}, UTF16BE: {}, MUTF7: {} },
1675	    enc = { Text: {}, Unicode: {}, URI: {}, Base64: {} };
1676
1677	/**
1678  * 文字列を16bit整数の配列に変換する
1679 */
1680	enc.Text.parse = function (str) {
1681		var a = [],
1682		    i,
1683		    il = str.length;
1684		for (i = 0; i < il; i++) {
1685			a.push(str.charCodeAt(i));
1686		}
1687		return a;
1688	};
1689	/**
1690  * 16bit整数の配列を文字列に変換する
1691 */
1692	enc.Text.stringify = function (array) {
1693		var s = "",
1694		    i,
1695		    il = array.length,
1696		    c;
1697		for (i = 0; i < il; i++) {
1698			s += String.fromCharCode(array[i]);
1699		}
1700		return s;
1701	};
1702	/**
1703  * 文字列を24bit(0..0x10FFFF)整数の配列に変換する
1704 */
1705	charset.Unicode.parse = function (str) {
1706		var a = [],
1707		    i,
1708		    il = str.length,
1709		    c;
1710		for (i = 0; i < il; i++) {
1711			//scalar                   	UTF-16
1712			//000uuuuuxxxxxxyyyyyyyyyy 	110110wwwwxxxxxx 110111yyyyyyyyyy 	wwww = uuuuu - 1
1713			55295 < (c = str.charCodeAt(i)) && c < 56320 && (c = ((c & 1023) + 64 << 10) + (str.charCodeAt(++i) & 1023));
1714			a.push(c);
1715		}
1716		return a;
1717	};
1718	/**
1719  * 24bit整数の配列を文字列に変換する
1720 */
1721	charset.Unicode.stringify = function (array) {
1722		var s = "",
1723		    i,
1724		    il = array.length,
1725		    c;
1726		for (i = 0; i < il; i++) {
1727			s += (c = array[i]) > 65535 ? String.fromCharCode((c >>> 10) - 64 | 55296, c & 1023 | 56320) : String.fromCharCode(c);
1728		}
1729		return s;
1730	};
1731	charset.Unicode.fromU = charset.Unicode.toU = function (a) {
1732		return a;
1733	};
1734	//http://charset.7jp.net/sjis.html
1735	//http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932
1736	/**
1737  * UTF-16の配列からSJISの8bit配列に変換する
1738  * @param  {Array}  array  Unicodeの24it配列
1739  * @return {Array}  SJISの8bit配列
1740 */
1741	charset.SJIS.fromU = function (array) {
1742		var a = [],
1743		    i,
1744		    il = array.length,
1745		    c,
1746		    s,
1747		    m;
1748		for (i = 0; i < il; i++) {
1749			c = array[i];
1750			c < 128 ? a.push(c) : 65376 < c && c < 65440 ? a.push(c - 65216) :
1751			/*
1752   				(c=JCT11280.indexOf((s=String.fromCharCode(c))))<0 ? a.push(129,69) : a.push(
1753   					(m=((c<8272?c:(c=JCT11280.lastIndexOf(s)))-(c%=188))/188)<31 ? m+129 : m+193, //mは(区-1)/2
1754   					c+=c<63?64:65
1755   				)
1756   */
1757			(c = U2CP[c] || -1) < 0 || c > 31499 ? a.push(129, 69) : a.push((m = c >>> 7 & 127, c = (c & 127) + (m & 1) * 94, m = m >>> 1) < 31 ? m + 129 : m + 193, c += c < 63 ? 64 : 65);
1758		}
1759		return a;
1760	};
1761	/**
1762  * SJISの8bit配列をUnicodeの配列に変換する
1763  * @param  {Array}  array SJISの8bit配列
1764  * @return {Array}  Unicodeの24bit配列
1765 */
1766	charset.SJIS.toU = function (array) {
1767		var a = [],
1768		    i,
1769		    il = array.length,
1770		    c;
1771		for (i = 0; i < il; i++) {
1772			c = array[i];
1773			c < 128 || 160 < c && c < 224 ? a.push(160 < c ? c + 65216 : c) //ASCII+カナ
1774			//			: a.push( JCT11280.charAt((c<160?c-129:c-193)*188+(c=array[++i],c<127?c-64:c-65)).charCodeAt(0) )
1775			: a.push(CP2U[P1 | (c < 160 ? c - 129 : c - 193) << 8 | (c = array[++i], c < 127 ? c - 64 : c < 159 ? c - 65 : c - 31)]);
1776		}
1777		return a;
1778	};
1779	//http://www.unixuser.org/~euske/doc/kanjicode/
1780	// JIS区点位置からSJISに変換
1781	charset.SJIS.fromJ = function (array) {
1782		var a = [],
1783		    i,
1784		    il = array.length,
1785		    c,
1786		    m;
1787		for (i = 0; i < il; i++) {
1788			c = array[i];
1789			c < 224 ? a.push(c) : c > 31499 ? a.push(129, 69) : a.push((m = c >>> 7 & 127, c = (c & 127) + (m & 1) * 94, m = m >>> 1) < 31 ? m + 129 : m + 193, c += c < 63 ? 64 : 65);
1790		}
1791		return a;
1792	};
1793	charset.SJIS.toJ = function (array) {
1794		var a = [],
1795		    i,
1796		    il = array.length,
1797		    c,
1798		    k;
1799		for (i = 0; i < il; i++) {
1800			c = array[i];
1801			c < 128 || 160 < c && c < 224 ? a.push(c) //ASCII+カナ
1802			: a.push(P1 | (c < 160 ? c - 129 : c - 193) << 8 | (c = array[++i], c < 127 ? c - 64 : c < 159 ? c - 65 : c - 31));
1803		}
1804		return a;
1805	};
1806	//http://ja.wikipedia.org/wiki/EUC-JP, http://charset.7jp.net/euc.html
1807	charset.EUCJP.fromU = function (array) {
1808		var a = [],
1809		    i,
1810		    il = array.length,
1811		    c;
1812		for (i = 0; i < il; i++) {
1813			(c = array[i]) < 128 ? a.push(c) : 65376 < c && c < 65440 ? a.push(142, c - 65216) :
1814			/*
1815   				(c=JCT8836.indexOf(String.fromCharCode(c)))<0 ? a.push(161,166) : (
1816   					a.push((c-(c%=94))/94+161, c+161)
1817   */
1818			(c = U2CP[c] || -1) < 0 || c > 31499 ? a.push(161, 166) : a.push((c >>> 7 & 127) + 161, (c & 127) + 161);
1819		}
1820		return a;
1821	};
1822	charset.EUCJP.toU = function (array) {
1823		var a = [],
1824		    i,
1825		    il = array.length,
1826		    c;
1827		for (i = 0; i < il; i++) {
1828			c = array[i];
1829			c < 161 ? a.push(c < 128 ? c : array[++i] + 65216) //ASCII+カナ
1830			//			: a.push(JCT8836.charAt((c-161)*94 + array[++i]-161).charCodeAt(0))
1831			: a.push(CP2U[P1 | c - 161 << 7 | array[++i] - 161]);
1832		}
1833		return a;
1834	};
1835	charset.EUCJP.fromJ = function (array) {
1836		var a = [],
1837		    i,
1838		    il = array.length,
1839		    c;
1840		for (i = 0; i < il; i++) {
1841			(c = array[i]) < 224 ? a.push(c < 128 ? c : c + 65216) : c > 31499 ? a.push(161, 166) : a.push((c >>> 7 & 127) + 161, (c & 127) + 161);
1842		}
1843		return a;
1844	};
1845	charset.EUCJP.toJ = function (array) {
1846		var a = [],
1847		    i,
1848		    il = array.length,
1849		    c;
1850		for (i = 0; i < il; i++) {
1851			c = array[i];
1852			c < 161 ? a.push(c < 128 ? c : array[++i]) //ASCII+カナ
1853			: a.push(P1 | c - 161 << 7 | array[++i] - 161);
1854		}
1855		return a;
1856	};
1857	//http://charset.7jp.net/jis.html, http://yasu.asuka.net/translations/RFC1468.html
1858	charset.JIS7.fromU = function (array) {
1859		var a = [],
1860		    i,
1861		    il = array.length,
1862		    c,
1863		    es = [0, 1, 2],
1864		    e = es[0]; //"\e(B":ASCIIの開始,"\e(I":半角カタカナの開始,"\e$B":漢字の開始
1865		for (i = 0; i < il; i++) {
1866			(c = array[i]) < 128 ? (e != es[0] && (e = es[0], a.push(27, 40, 66)), a.push(c)) : 65376 < c && c < 65440 ? (e != es[1] && (e = es[1], a.push(27, 40, 73)), a.push(c - 65344)) : (e != es[2] && (e = es[2], a.push(27, 36, 66)),
1867			//					(c=JCT8836.indexOf(String.fromCharCode(c)))<0 ? a.push(33,38) : a.push((c-(c%=94))/94+33,c+33))
1868			(c = U2CP[c] || -1) < 0 || c > 31499 ? a.push(33, 38) : a.push((c >>> 7 & 127) + 33, (c & 127) + 33));
1869		}
1870		e !== es[0] && a.push(27, 40, 66); //ASCIIで終わっている必要がある
1871		return a;
1872	};
1873	charset.JIS7.toU = function (array) {
1874		// "\e(B":ASCIIの開始,"\e(I":半角カタカナの開始,"\e$B":漢字の開始, "\e(J":ローマ字セット(≒ASCII)開始, "\e$@":漢字の開始(旧)
1875		// 0x1b2842(27,40,66), 0x1b2849(27,40,73),      0x1b2442(27,36,66), 0x1b284a(27,40,74),  0x1b2440(27,36,64)
1876		// [27,40,66]or[27,40,74]ならASCII、[27,40,73]なら半角カナ、[27,36,66]or[27,36,64]なら漢字としてデコードする
1877		var a = [],
1878		    i,
1879		    il = array.length,
1880		    c,
1881		    es = [0, 1, 2],
1882		    e = es[0];
1883		for (i = 0; i < il; i++) {
1884			array[i] === 27 && (array[++i] === 36 ? (e = es[2], i += 2) : (e = array[++i] === 73 ? es[1] : es[0], i++));
1885			i < il && (c = array[i]) && (
1886			//			e===es[2] ? a.push(JCT8836.charAt((c-33)*94+array[++i]-33).charCodeAt(0))
1887			e === es[2] ? a.push(CP2U[P1 | c - 33 << 7 | array[++i] - 33]) : e === es[1] ? a.push(c + 65344) : a.push(c < 128 ? c : c + 65216));
1888		}
1889		return a;
1890	};
1891	charset.JIS7.fromJ = function (array) {
1892		var a = [],
1893		    i,
1894		    il = array.length,
1895		    c,
1896		    es = [0, 1, 2],
1897		    e = es[0];
1898		for (i = 0; i < il; i++) {
1899			(c = array[i]) < 128 ? (e != es[0] && (e = es[0], a.push(27, 40, 66)), a.push(c)) : 160 < c && c < 224 ? (e != es[1] && (e = es[1], a.push(27, 40, 73)), a.push(c)) : (e != es[2] && (e = es[2], a.push(27, 36, 66)), c < P1 || c > 31499 ? a.push(33, 38) : a.push((c >>> 7 & 127) + 33, (array[++i] & 127) + 33));
1900		}
1901		e !== es[0] && a.push(27, 40, 66); //ASCIIで終わっている必要がある
1902		return a;
1903	};
1904	charset.JIS7.toJ = function (array) {
1905		var a = [],
1906		    i,
1907		    il = array.length,
1908		    c,
1909		    es = [0, 1, 2],
1910		    e = es[0];
1911		for (i = 0; i < il; i++) {
1912			array[i] === 27 && (array[++i] === 36 ? (e = es[2], i += 2) : (e = array[++i] === 73 ? es[1] : es[0], i++));
1913			i < il && (c = array[i]) && (e === es[2] ? a.push(P1 | c - 33 << 7 | array[++i] - 33) : e === es[1] ? a.push(c + 128) : a.push(c));
1914		}
1915		return a;
1916	};
1917	charset.JIS = charset.JIS7;
1918	// JIS7と違い半角カナは ASCIIシーケンス[\e(B]のA1-DFに入る
1919	charset.JIS8.fromU = function (array) {
1920		var a = [],
1921		    i,
1922		    il = array.length,
1923		    c,
1924		    es = [0, 1, 2],
1925		    e = es[0];
1926		for (i = 0; i < il; i++) {
1927			(c = array[i]) < 128 || 65376 < c && c < 65440 ? (e != es[0] && (e = es[0], a.push(27, 40, 66)), a.push(c < 128 ? c : c - 65216)) : (e !== es[2] && (e = es[2], a.push(27, 36, 66)),
1928			//				(c=JCT8836.indexOf(String.fromCharCode(c)))<0 ? a.push(33,38) : a.push((c-(c%=94))/94+33,c+33))
1929			(c = U2CP[c] || -1) < 0 || c > 31499 ? a.push(33, 38) : a.push((c >>> 7 & 127) + 33, (c & 127) + 33));
1930		}
1931		e !== es[0] && a.push(27, 40, 66);
1932		return a;
1933	};
1934	// 半角カナシーケンスも念のため考慮する
1935	charset.JIS8.toU = function (array) {
1936		var a = [],
1937		    i,
1938		    il = array.length,
1939		    c,
1940		    es = [0, 1, 2],
1941		    e = es[0];
1942		for (i = 0; i < il; i++) {
1943			array[i] === 27 && (array[++i] === 36 ? (e = es[2], i += 2) : (e = array[++i] === 73 ? es[1] : es[0], i++));
1944			i < il && (c = array[i]) && (
1945			//			e===es[2] ? a.push(JCT8836.charAt((c-33)*94+array[++i]-33).charCodeAt(0))
1946			e === es[2] ? a.push(CP2U[P1 | c - 33 << 7 | array[++i] - 33]) : e === es[1] ? a.push(c + 65344) : a.push(c < 128 ? c : c + 65216));
1947		}
1948		return a;
1949	};
1950	charset.JIS8.fromJ = function (array) {
1951		var a = [],
1952		    i,
1953		    il = array.length,
1954		    c,
1955		    es = [0, 1, 2],
1956		    e = es[0];
1957		for (i = 0; i < il; i++) {
1958			(c = array[i]) < 128 || 160 < c && c < 224 ? (e != es[0] && (e = es[0], a.push(27, 40, 66)), a.push(c)) : (e !== es[2] && (e = es[2], a.push(27, 36, 66)), c < P1 || c > 31499 ? a.push(33, 38) : a.push((c >>> 7 & 127) + 33, (array[++i] & 127) + 33));
1959		}
1960		e !== es[0] && a.push(27, 40, 66);
1961		return a;
1962	};
1963	charset.JIS8.toJ = charset.JIS7.toJ;
1964	//http://ja.wikipedia.org/wiki/UTF-7 http://suika.fam.cx/~wakaba/wiki/sw/n/UTF-7
1965	//62のアルファベットと9の記号 ['(),-./:?] はそのまま表記する。
1966	// [\t\n\r !"#$%&*;<=>@[]^_`{|}]は表記してもいいし符号化してもいい(fromUでは符号化する)
1967	charset.UTF7.fromU = function (array) {
1968		var a = [],
1969		    i,
1970		    il = array.length,
1971		    c,
1972		    tmp = [];
1973		for (i = 0; i < il; i++) {
1974			c = array[i];
1975			38 < c && c < 59 && c != 42 || c === 63 || 64 < c && c < 91 || 96 < c && c < 123 ? (a.push(c), c === 43 && a.push(45)) : (a.push(43), tmp.push(c));
1976			if (tmp.length > 0) {
1977				while ((c = array[i + 1]) && !(38 < c && c < 59 && c != 42 || c === 63 || 64 < c && c < 91 || 96 < c && c < 123)) {
1978					tmp.push(c);i++;
1979				}
1980				a = a.concat(enc.Base64.fromU(tmp, charset.UTF16BE));
1981				a.push(45);
1982				tmp = [];
1983			}
1984		}
1985		return a;
1986	};
1987	charset.UTF7.toU = function (array) {
1988		var a = [],
1989		    i,
1990		    il = array.length,
1991		    c,
1992		    tmp = [];
1993		for (i = 0; i < il; i++) {
1994			c = array[i];
1995			8 < c && c < 11 || c === 13 || 31 < c && c < 126 && c !== 43 && c !== 92 ? a.push(c) // (?![^+\\~])[ !-}]
1996			: c === 43 // "+"
1997			? (c = array[++i]) === 45 // "-"
1998			? a.push(c) // "+-" => "+"
1999			: tmp.push(c) // Base64
2000			: a.push(63); //不正な文字は?に
2001			if (tmp.length > 0) {
2002				while ((c = array[i + 1]) && (c === 43 || 46 < c && c < 58 || 64 < c && c < 91 || 96 < c && c < 123)) {
2003					tmp.push(c);i++;
2004				}
2005				array[i + 1] === 45 && i++; // 直後がBase64以外の文字なら-を省略可能(直後が-だったら-はスキップしそれ以外だったら次に読む)
2006				a = a.concat(enc.Base64.toU(tmp, charset.UTF16BE));
2007				tmp = [];
2008			}
2009		}
2010		return a;
2011	};
2012	// Modified UTF-7 の実装 http://tools.ietf.org/rfc/rfc3501.txt
2013	/*
2014 5.1.3.  Mailbox International Naming Convention
2015 
2016    By convention, international mailbox names in IMAP4rev1 are specified
2017    using a modified version of the UTF-7 encoding described in [UTF-7].
2018    Modified UTF-7 may also be usable in servers that implement an
2019    earlier version of this protocol.
2020 
2021    In modified UTF-7, printable US-ASCII characters, except for "&",
2022    represent themselves; that is, characters with octet values 0x20-0x25
2023    and 0x27-0x7e.  The character "&" (0x26) is represented by the
2024    two-octet sequence "&-".
2025 
2026    All other characters (octet values 0x00-0x1f and 0x7f-0xff) are
2027    represented in modified BASE64, with a further modification from
2028    [UTF-7] that "," is used instead of "/".  Modified BASE64 MUST NOT be
2029    used to represent any printing US-ASCII character which can represent
2030    itself.
2031 
2032    "&" is used to shift to modified BASE64 and "-" to shift back to
2033    US-ASCII.  There is no implicit shift from BASE64 to US-ASCII, and
2034    null shifts ("-&" while in BASE64; note that "&-" while in US-ASCII
2035    means "&") are not permitted.  However, all names start in US-ASCII,
2036    and MUST end in US-ASCII; that is, a name that ends with a non-ASCII
2037    ISO-10646 character MUST end with a "-").
2038 */
2039	charset.MUTF7.fromU = function (array) {
2040		var a = [],
2041		    i,
2042		    il = array.length,
2043		    c,
2044		    tmp = [];
2045		for (i = 0; i < il; i++) {
2046			c = array[i];
2047			31 < c && c < 127 ? (a.push(c), c === 38 && a.push(45)) : (a.push(38), tmp.push(c));
2048			if (tmp.length > 0) {
2049				while ((c = array[i + 1]) && (c < 32 || 126 < c)) {
2050					tmp.push(c);i++;
2051				}
2052				tmp = enc.Base64.fromU(tmp, charset.UTF16BE);
2053				for (j = 0; j < tmp.length; j++) {
2054					tmp[j] === 47 && (tmp[j] = 44);
2055				}; // "/" => ","
2056				a = a.concat(tmp);
2057				a.push(45);
2058				tmp = [];
2059			}
2060		}
2061		return a;
2062	};
2063	charset.MUTF7.toU = function (array) {
2064		var a = [],
2065		    i,
2066		    il = array.length,
2067		    c,
2068		    tmp = [];
2069		for (i = 0; i < il; i++) {
2070			c = array[i];
2071			31 < c && c < 127 && c !== 38 ? a.push(c) // &以外
2072			: c === 38 // "&"
2073			? (c = array[++i]) === 45 // "-"
2074			? a.push(38) // "&-" => "&"
2075			: tmp.push(c) // Base64
2076			: a.push(65533); //不正な文字は\ufffdに
2077			if (tmp.length > 0) {
2078				while ((c = array[i + 1]) && (42 < c && c < 45 || 47 < c && c < 58 || 64 < c && c < 91 || 96 < c && c < 123)) {
2079					tmp.push(c === 44 ? 47 : c);i++;
2080				}
2081				array[i + 1] === 45 && i++;
2082				a = a.concat(enc.Base64.toU(tmp, charset.UTF16BE));
2083				tmp = [];
2084			}
2085		}
2086		return a;
2087	};
2088	charset.UTF8.fromU = function (array) {
2089		var a = [],
2090		    i,
2091		    il = array.length,
2092		    c;
2093		for (i = 0; i < il; i++) {
2094			(c = array[i]) < 128 ? a.push(c) : c < 2048 ? a.push(c >>>
2094 6 | 192, c & 63 | 128) : c < 65536 ? a.push(c >>> 12 | 224, c >>> 6 & 63 | 128, c & 63 | 128) : a.push(c >>> 18 | 240, c >>> 12 & 63 | 128, c >>> 6 & 63 | 128, c & 63 | 128);
2095		}
2096		return a;
2097	};
2098	charset.UTF8.toU = function (array) {
2099		var a = [],
2100		    i = 0,
2101		    il = array.length,
2102		    c;
2103		array[0] === 239 && array[1] === 187 && array[2] === 191 && (i = 3); //BOM
2104		for (; i < il; i++) {
2105			a.push((c = array[i]) < 128 ? c : c < 224 ? (c & 31) << 6 | array[++i] & 63 : c < 240 ? ((c & 15) << 6 | array[++i] & 63) << 6 | array[++i] & 63 : (((c & 7) << 6 | array[++i] & 63) << 6 | array[++i] & 63) << 6 | array[++i] & 63);
2106		}return a;
2107	};
2108	charset.UTF16LE.fromU = function (array) {
2109		var a = [],
2110		    i,
2111		    il = array.length,
2112		    c,
2113		    m;
2114		for (i = 0; i < il; i++) {
2115			//scalar                   	UTF-16
2116			//000uuuuuxxxxxxyyyyyyyyyy 	110110wwwwxxxxxx 110111yyyyyyyyyy 	wwww = uuuuu - 1
2117			(c = array[i]) > 65535 && (m = (c >>> 10) - 64 | 55296, a.push(m & 255, m >>> 8), c = c & 1023 | 56320);
2118			a.push(c & 255, c >>> 8);
2119		}
2120		return a;
2121	};
2122	charset.UTF16LE.toU = function (array) {
2123		var a = [],
2124		    i = 0,
2125		    il = array.length,
2126		    c;
2127		array[0] === 255 && array[1] === 254 && (i = 2);
2128		for (; i < il; i++) {
2129			c = array[i] | array[++i] << 8;
2130			55295 < c && c < 56320 && (c = ((c & 1023) + 64 << 10) + ((array[++i] | array[++i] << 8) & 1023));
2131			a.push(c);
2132		}
2133		return a;
2134	};
2135	charset.UTF16BE.fromU = function (array) {
2136		var a = [],
2137		    i,
2138		    il = array.length,
2139		    c,
2140		    m;
2141		for (i = 0; i < il; i++) {
2142			(c = array[i]) > 65535 && (m = (c >>> 10) - 64 | 55296, a.push(m >>> 8, m & 255), c = c & 1023 | 56320);
2143			a.push(c >>> 8, c & 255);
2144		}
2145		return a;
2146	};
2147	charset.UTF16BE.toU = function (array) {
2148		var a = [],
2149		    i = 0,
2150		    il = array.length,
2151		    c;
2152		array[0] === 254 && array[1] === 255 && (i = 2);
2153		for (; i < il; i++) {
2154			c = array[i] << 8 | array[++i];
2155			55295 < c && c < 56320 && (c = ((c & 1023) + 64 << 10) + ((array[++i] << 8 | array[++i]) & 1023));
2156			a.push(c);
2157		}
2158		return a;
2159	};
2160	charset.UTF16 = charset.UTF16BE;
2161	/**
2162  * convert_array
2163  *   他の文字コード配列に変換する
2164  * @param {Array}            array  変換前配列
2165  * @param {String or Object} to     変換先の文字コード('SJIS','UTF8',ECL.charset.SJIS,など)
2166  * @param {String or Object} from   変換元の文字コード('SJIS','UTF8',ECL.charset.SJIS,など)
2167  * @return {Array} 変換後配列
2168 */
2169	charset.convert_array = function (array, to, from) {
2170		from = from || charset.Unicode;
2171		!from.hasOwnProperty("toU") && (from = charset[from]);
2172		!to.hasOwnProperty("fromU") && (to = charset[to]);
2173		if (to == from) {
2174			return array;
2175		}
2176		if (from.hasOwnProperty("toJ") && to.hasOwnProperty("fromJ")) return to.fromJ(from.toJ(array));
2177		return to.fromU(from.toU(array));
2178	};
2179	/**
2180  * convert
2181  *   他の文字コードに変換する
2182  * @param {String}           str  変換前文字列
2183  * @param {String or Object} to   変換先の文字コード('SJIS','UTF8',ECL.charset.SJIS,など)
2184  * @param {String or Object} from 変換元の文字コード('SJIS','UTF8',ECL.charset.SJIS,など)
2185  * @return {String} 変換後文字列
2186 */
2187	charset.convert = function (str, to, from) {
2188		var array, parser;
2189		from = from || charset.Unicode;
2190		!from.hasOwnProperty("toU") && (from = charset[from]);
2191		!to.hasOwnProperty("fromU") && (to = charset[to]);
2192		if (to == from) {
2193			return str;
2194		}
2195		parser = from === charset.Unicode ? from : enc.Text;
2196		array = parser.parse(str);
2197		return charset.Unicode.stringify(charset.convert_array(array, to, from));
2198	};
2199	/**
2200  * Unicode配列をBase64符号化する
2201  * @param  {Array}         array 24bit配列
2202  * @param  {String|Object} to    変換する文字コード(default:UTF8)
2203  * @return {Array} Base64符号化された6bit配列
2204 */
2205	enc.Base64.fromU = function (array, to) {
2206		!(to = to || 'UTF8').hasOwnProperty("fromU") && (to = charset[to]);
2207		return enc.Base64.fromB(to.fromU(array));
2208	};
2209	/**
2210  * Base64符号化された6bit配列をUnicode配列にする
2211  * @param  {Array}
2211 array        Base64符号化された6bit配列
2212  * @param  {String|Object} from 変換する文字コード(default:UTF8)
2213  * @return {Array} 24bit配列
2214 */
2215	enc.Base64.toU = function (array, from) {
2216		!(from = from || 'UTF8').hasOwnProperty("toU") && (from = charset[from]);
2217		return from.toU(enc.Base64.toB(array));
2218	};
2219	/**
2220  * 8bit配列をBase64符号化する
2221  * @param  {Array} 8bit配列
2222  * @return {Array} Base64符号化された6bit配列
2223 */
2224	enc.Base64.fromB = function (array) {
2225		var a = [],
2226		    i = 0,
2227		    il = array.length,
2228		    b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
2229		    B = [],
2230		    c;
2231		for (i = 0; i < 64; i++) {
2232			B.push(b.charCodeAt(i));
2233		}for (i = 0; i < il; i++) {
2234			a.push(B[(c = array[i]) >>> 2], B[(c & 3) << 4 | (c = array[++i]) >>> 4], B[(c & 15) << 2 | (c = array[++i]) >>> 6], B[63 & c]);
2235		}(i = il % 3) !== 0 && (a.pop(), i === 1 && a.pop());
2236		return a;
2237	};
2238	/**
2239  *  Base64符号化された6bit配列を8bit配列にする
2240  * @param  {Array} Base64符号化された6bit配列
2241  * @return {Array} 8bit配列
2242 */
2243	enc.Base64.toB = function (array) {
2244		var i = 0,
2245		    a = [],
2246		    il = array.length,
2247		    B = {},
2248		    b,
2249		    c;
2250		while (i < 64) {
2251			B["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(i)] = i++;
2252		}for (i = 0; i < il; i++) {
2253			a.push((c = B[array[i]]) << 2 | (c = B[array[++i]]) >>> 4, (c & 15) << 4 | (c = B[array[++i]]) >>> 2, (c & 3) << 6 | B[array[++i]]);
2254		}(i = il % 4) !== 0 && (a.pop(), i < 3 && a.pop());
2255		return a;
2256	};
2257	enc.Base64.parse = function (str) {
2258		str = str.replace(/=+$/, '');
2259		return enc.Base64.toB(enc.Text.parse(str));
2260	};
2261	enc.Base64.stringify = function (array) {
2262		return enc.Text.stringify(enc.Base64.fromB(array));
2263	};
2264	/**
2265  * 文字列をBase64エンコードする
2266  * この関数はpaddingの=を追加する
2267  * @param {String} str         変換する文字列
2268  * @param {String|Object} cs1  strの文字セット default:Unicode
2269  * @param {String|Object} cs2  cs1がUnicodeだった場合の変換先文字セット default:UTF8
2270  * @return {String} Base64符号化された文字列
2271  *
2272  * @example
2273  *  // JS文字列をUTF8としてBase64符号化
2274  *  ECL.encodeBase64("文字列"); //=> "5paH5a2X5YiX==="
2275  *  ECL.encodeBase64("文字列", "Unicode", "UTF8"); // 上記と同じ
2276  * 
2277  *  // SJIS文字列をエンコード(引数は省略不可)
2278  *  ECL.encodeBase64(ECL.convert("文字列", "SJIS"), "SJIS"); //=> "lbaOmpfx==="
2279  *
2280 */
2281	enc.Base64.encode = function (str, cs1, cs2) {
2282		var array, parser, b;
2283		!(cs1 = cs1 || 'Unicode').hasOwnProperty("parse") && (cs1 = charset[cs1]);
2284		!(cs2 = cs2 || 'UTF8').hasOwnProperty("fromU") && (cs2 = charset[cs2]);
2285		parser = cs1 === charset.Unicode ? cs1 : enc.Text;
2286		array = parser.parse(str);
2287		b = enc.Base64.stringify(cs1 === charset.Unicode ? cs2.fromU(array) : array);
2288		b += "===".substring(0, 4 - b.length % 4);
2289		return b;
2290	};
2291	/**
2292  * Base64文字列をデコードする
2293  * この関数はpaddingの=を削除する
2294  * @param {String} str         Base64文字列
2295  * @param {String|Object} from 元の文字セット指定すればJS文字列に変換する default:UTF8
2296  * @return {String} デコードされた文字列
2297  *
2298  * @example
2299  *  // Base64符号化されたUTF8文字列をJS文字列に
2300  *  ECL.decodeBase64("5paH5a2X5YiX===");         //=> "文字列"
2301  *  ECL.decodeBase64("5paH5a2X5YiX===", "UTF8"); //=> "文字列"
2302  * 
2303  *  // エンコードされたSJIS文字列
2304  *  ECL.decodeBase64("lbaOmpfx===", ""); //=> "\x95\xb6\x8e\x9a\x97\xf1"
2305  *  ECL.decodeBase64("lbaOmpfx===", "SJIS"); //=> "文字列"
2306  *
2307 */
2308	enc.Base64.decode = function (str, from) {
2309		str = str.replace(/=+$/, '');
2310		var array = enc.Base64.parse(str);
2311		if (from === "") {
2312			return enc.Text.stringify(array);
2313		}
2314		!(from = from || 'UTF8').hasOwnProperty("toU") && (from = charset[from]);
2315		return charset.Unicode.stringify(from.toU(array));
2316	};
2317	/**
2318  * enc.URI.escape
2319  *   RFC3986に準じて [A-Za-z0-9_.~-] 以外を%エスケープする
2320  *   RFC2396準拠のencodeURIComponent()と違い [!*'()] もエスケープする
2321  *   arrayは8bitを想定しているのでUnicode(24bit)配列を渡すと正しい結果にならない
2322  * @param  {Array}   array      8bit配列
2323  * @param  {Boolean} asRFC2396  [!*'()]をエスケープしない (default:false)
2324  * @return {String}  encoded    エスケープされた文字列
2325  *
2326  * @see https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
2327  *   encodeURIComponent は、次を除く全ての文字をエスケープします。: アルファベット、数字、- _ . ! ~ * ' ( )
2328  *   ... より厳格に RFC 3986に従う場合には、「!」・「'」・「(」・「)」・「*」の各文字が予約されています
2329  * @see http://www.ipa.go.jp/security/fy21/reports/tech1-tg/b_09.html
2330  *   なお、上記の "!", "'", "(", ")", "*" が sub-delims の文字であるが、これらは RFC 2396 でã
2330¯ unreserved に属していた。
2331 */
2332	enc.URI.escape = function (array, asRFC2396) {
2333		var s = "",
2334		    i,
2335		    il = array.length,
2336		    c;
2337		if (asRFC2396) {
2338			for (i = 0; i < il; i++) {
2339				s += (c = array[i]) < 58 && c > 38 || 64 < c && c < 91 || 96 < c && c < 123 && c != 43 && c != 44 && c != 47 || c === 33 || c === 95 || c === 126 ? String.fromCharCode(c) : (c < 16 ? "%0" : "%") + c.toString(16).toUpperCase();
2340			}
2341		} else {
2342			for (i = 0; i < il; i++) {
2343				s += (c = array[i]) < 58 && c > 47 || 64 < c && c < 91 || 96 < c && c < 123 || c === 45 || c === 46 || c === 95 || c === 126 ? String.fromCharCode(c) : (c < 16 ? "%0" : "%") + c.toString(16).toUpperCase();
2344			}
2345		}
2346		return s;
2347	};
2348	enc.URI.unescape = function (str) {
2349		var a = [],
2350		    i,
2351		    il = str.length,
2352		    c;
2353		for (i = 0; i < il; i++) {
2354			a.push((c = str.charCodeAt(i)) === 37 ? parseInt(str.substring(++i, ++i + 1), 16) : c === 43 ? 20 : c);
2355		}return a;
2356	};
2357	/**
2358  * encodeURIComponent 互換の関数
2359  * @param  {String} str       JS文字列
2360  * @param  {String or Object} 変換先文字コード(default:'UTF8')
2361  * @return {String} encoded
2362 */
2363	enc.URI.encodeURIComponent = function (str, to) {
2364		!(to || "UTF8").hasOwnProperty("fromU") && (to = charset[to]);
2365		return enc.URI.escape(to.fromU(charset.Unicode.parse(str)));
2366	};
2367	enc.URI.decodeURIComponent = function (str, from) {
2368		!(from || "UTF8").hasOwnProperty("toU") && (from = charset[from]);
2369		return charset.Unicode.stringify(from.toU(enc.URI.unescape(str)));
2370	};
2371	/**
2372  * enc.Unicode.escape
2373  *   Unicode(24bit整数)配列を%エスケープする(0xff以上は%uXXXXになる)
2374  *   [*+\-\.\/@_0-9A-Za-z] 以外はエスケープされる
2375  *   
2376  * @param  {Array}   u24array 24bit整数の配列(String#charCodeAt() で取得した整数など)
2377  * @return {String}  escaped  %エスケープされた文字列
2378  */
2379	enc.Unicode.escape = function (u24array) {
2380		var s = "",
2381		    i,
2382		    il = u24array.length,
2383		    c;
2384		for (i = 0; i < il; i++) {
2385			c = u24array[i];
2386			s += 41 < c && c < 58 && c != 44 || 63 < c && c < 91 || 94 < c && c < 123 && c != 96 ? String.fromCharCode(c) : (c < 16 ? "%0" : c < 256 ? "%" : c < 4096 ? "%u0" : "%u") + c.toString(16).toUpperCase();
2387		}
2388		return s;
2389	};
2390	/**
2391  * enc.Unicode.unescape
2392  *   %エスケープされた文字列をUnicode(24bit整数)配列にする
2393  *   
2394  * @return {String}  escaped  %エスケープされた文字列
2395  * @param  {Array}   u24array 24bit整数の配列
2396  */
2397	enc.Unicode.unescape = function (str) {
2398		var a = [],
2399		    i,
2400		    il = str.length,
2401		    c;
2402		for (i = 0; i < il; i++) {
2403			a.push((c = str.charCodeAt(i)) === 37 //%
2404			? (c = str.charCodeAt(++i)) === 117 //%u
2405			? parseInt(str.charAt(++i) + str.charAt(++i) + str.charAt(++i) + str.charAt(++i) + ((c = str.charAt(i + 1)) !== "%" ? (++i, c) : ''), 16) : parseInt(str.charAt(i) + str.charAt(++i), 16) : c);
2406		}
2407		return a;
2408	};
2409	/**
2410  * enc.TextEncoder class
2411  * Encoding StandardのTextEncoderのように振る舞うクラス
2412  * @see https://encoding.spec.whatwg.org/
2413  * @see https://developer.mozilla.org/ja/docs/Web/API/TextEncoder
2414  */
2415	enc.TextEncoder = function (encoding) {
2416		var en,
2417		    map = { 'UTF8': [], 'UTF16LE': ['UTF16'], 'UTF16BE': [], 'SJIS': ['SHIFTJIS', 'WINDOWS31J', 'XSJIS'], 'EUCJP': ['XEUCJP'], 'JIS7': ['iso2022jp'] },
2418		    m = {},
2419		    x,
2420		    i;
2421		if (!encoding) {
2422			encoding = 'UTF-8';
2423		}
2424		for (x in map) {
2425			m[x] = x;
2426			for (i = 0; i < map[x].length; i++) {
2427				m[map[x][i]] = x;
2428			}
2429		}
2430		en = m[encoding.toUpperCase().replace(/[^A-Z0-9]/g, '')];
2431		if (!en) {
2432			throw new TypeError(encoding + " is not supported encoding");
2433		}
2434		this.encoding = encoding;
2435		this.encode = function (text) {
2436			return new Uint8Array(charset[en].fromU(enc.Text.parse(text)));
2437		};
2438	};
2439	/**
2440  * enc.TextDecoder class
2441  * Encoding StandardのTextDecoderのように振る舞うクラス
2442  * @see https://encoding.spec.whatwg.org/
2443  * @see https://developer.mozilla.org/ja/docs/Web/API/TextEncoder
2444  */
2445	enc.TextDecoder = function (encoding) {
2446		var en,
2447		    map = { 'UTF8': [], 'UTF16LE': ['UTF16'], 'UTF16BE': [], 'SJIS': ['SHIFTJIS', 'WINDOWS31J', 'XSJIS'], 'EUCJP': ['XEUCJP'], 'JIS7': ['iso2022jp'] },
2448		    m = {},
2449		    x,
2450		    i;
2451		if (!encoding) {
2452			encoding = 'UTF-8';
2453		}
2454		for (x in map) {
2455			m[x] = x;
2456			for (i = 0; i < map[x].length; i++) {
2457				m[map[x][i]] = x;
2458			}
2459		}
2460		en = m[encoding.toUpperCase().replace(/[^A-Z0-9]/g, '')];
2461		if (!en) {
2462			throw new TypeError(encoding + " is not supported encoding");
2463		}
2464		this.encoding = encoding;
2465		this.decode = function (u8array) {
2466			return enc.Text.stringify(charset[en].toU(u8array));
2467		};
2468	};
2469	/**
2470  * 配列から文字コードを推測する
2471  * ecl.jsのGetEscapeCodeType(str)に丸投げしている
2472 */
2473	charset.guess_array = function (array) {
2474		var i,
2475		    il = array.length,
2476		    c = array[0],
2477		    cs = null,
2478		    p,
2479		    a,
2480		    m,
2481		    u7,
2482		    mu7,
2483		    pm,
2484		    am,
2485		    b64,
2486		    mb64;
2487		//BOM 0xEFBBBF:UTF8, 0xFEFF:UTF16BE, 0xFFFE:UTF16LE
2488		cs = c === 239 && array[1] === 187 && array[2] === 191 ? "UTF8" : c === 255 && array[1] === 254 ? "UTF16LE" : c === 254 && array[1] === 255 ? "UTF16BE" : null;
2489		if (cs != null) return cs;
2490		//Unicode or ASCII(maybe UTF7,MUTF7) or ...?
2491		cs = "ASCII", p = a = m = -1, u7 = mu7 = true, pm = am = b64 = mb64 = 0;
2492		for (i = 0; i < il; i++) {
2493			c = array[i];
2494			if (255 < c) {
2495				cs = "Unicode";break;
2496			}
2497			if (c < 32 && c !== 9 && c !== 10 && c !== 13 || 126 < c) {
2498				cs = null;break;
2499			} //未定
2500			if (!u7 && !mu7) continue; //UTF-7でもModified UTF-7でもないならこの先を省略
2501			c === 126 && (u7 = false); //UTF-7は~を符号化するがModifiedUTF-7は~をそのまま印字する
2502			8 < c && c < 11 || c === 13 && (mu7 = false); //Modified UTF-7は\t\n\rを符号化する
2503			//"+-" or "\+[A-Za-z0-9\+\/]+-" があればUTF7 "&" ならMUTF7
2504			if (c === 45) {
2505				// [+&]- の出現数をカウント
2506				p >= 0 && u7 ? (i === p + 1 && pm++, p = -1) : a >= 0 && mu7 && (i === a + 1 && am++, a = -1);
2507				p = a = -1;
2508			} else {
2509				if (u7 && p >= 0) {
2510					//Base64 [A-Za-z0-9+/] かどうか
2511					(u7 = c === 43 || 46 < c && c < 58 || 64 < c && c < 91 || 96 < c && c < 123) ? b64++ : p = -1;
2512				}
2513				if (mu7 && a >= 0) {
2514					//Modified Base64 [A-Za-z0-9+,] かどうか
2515					(mu7 = 42 < c && c < 45 || 47 < c && c < 58 || 64 < c && c < 91 || 96 < c && c < 123) ? mb64++ : a = -1;
2516				}
2517			}
2518			c === 43 && p < 0 ? p = i : c === 38 && a < 0 ? a = i : c === 45 && (m = i);
2519		}
2520		if (cs === "ASCII") {
2521			cs = u7 && (b64 > 0 || pm > 0) ? "UTF7" : mu7 && (mb64 > 0 || am > 0) ? "MUTF7" : "ASCII";
2522		}
2523		//TODO: GetEscapeCodeTypeの代替処理が未実装
2524		return cs ? cs : GetEscapeCodeType(enc.URI.escape(array));
2525	};
2526	charset.guess = function (str) {
2527		return charset.guess_array(enc.Text.parse(str));
2528	};
2529	var names = ["SJIS", "EUCJP", "JIS7", "JIS8", "Unicode", "UTF7", "UTF8", "UTF16LE", "UTF16BE", "MUTF7"],
2530	    i,
2531	    il = names.length;
2532	ECL.charset = charset;
2533	for (i = 0; i < il; i++) {
2534		if (names[i] === 'Unicode') {
2535			ECL["escapeUnicode"] = function (str) {
2536				return enc.Unicode.escape(charset.Unicode.parse(str));
2537			};
2538			ECL["unescapeUnicode"] = function (str) {
2539				return charset.Unicode.stringify(enc.Unicode.unescape(str));
2540			};
2541		} else {
2542			ECL["escape" + names[i]] = function (fnc, cs) {
2543				return function (str) {
2544					return fnc(str, cs);
2545				};
2546			}(enc.URI.encodeURIComponent, charset[names[i]]);
2547			ECL["unescape" + names[i]] = function (fnc, cs) {
2548				return function (str) {
2549					return fnc(str, cs);
2550				};
2551			}(enc.URI.decodeURIComponent, charset[names[i]]);
2552			ECL.charset[names[i]].parse = function (fnc) {
2553				return function (str) {
2554					return fnc(enc.Text.parse(str));
2555				};
2556			}(charset[names[i]].toU);
2557			ECL.charset[names[i]].stringify = function (fnc) {
2558				return function (array) {
2559					return enc.Text.stringify(fnc(array));
2560				};
2561			}(charset[names[i]].fromU);
2562		}
2563	}
2564	ECL.convert = charset.convert;
2565	ECL.convert_array = charset.convert_array;
2566	ECL.enc = enc;
2567	ECL.escape = ECL.escapeUnicode;
2568	ECL.unescape = ECL.unescapeUnicode;
2569	ECL.encodeURIComponent = enc.URI.encodeURIComponent;
2570	ECL.decodeURIComponent = enc.URI.decodeURIComponent;
2571	ECL.encodeBase64 = enc.Base64.encode;
2572	ECL.decodeBase64 = enc.Base64.decode;
2573	ECL.TextEncoder = enc.TextEncoder;
2574	ECL.TextDecoder = enc.TextDecoder;
2575	//ECL.getEscapeCodeType = GetEscapeCodeType;
2576	ECL.JCT11280 = JCT11280;
2577	ECL.JCT8836 = JCT8836;
2578
2579	ECL.JISX0208 = { "U2CP": U2CP, "CP2U": CP2U };
2580
2581	// ----- for DMS ----- //
2582
2583	//
2584	// 無効な文字のSJISコードの範囲定義: SJIS文字コードの中で、不適切な文字と定義する文字があれば、ここにSJISコード番号の範囲を記載する
2585	//
2586	var tableOfInvalidSjisChars = [{ begin: 0x80, end: 0xa0 }, { begin: 0xe0, end: 0xff }];
2587
2588	//
2589	// 文字列を1文字ずつ抽出・判定し、SJISに無い文字を抽出する
2590	// @param  {string}   対象文字列(UTF-8)
2591	// @return {array}		SJISに変換できない文字の配列(要素数0の場合、すべてがSJISに適合)
2592	//
2593	ECL.pickupNotSJIS = function (str) {
2594		// 結果格納先
2595		var ret = [];
2596
2597		// 対象文字
2598		var iChar = '';
2599
2600		//
2601		var le = str.length;
2602		// console.log('le', le)
2603		for (var _i = 0; _i < le; _i++) {
2604			//
2605			// i番目の文字を取得
2606			//
2607			var code = str.charCodeAt(_i);
2608			if (Number.isNaN(code)) {
2609				continue; // Position not found
2610			}
2611			if (code < 0xD800 || code > 0xDFFF) {
2612				iChar = str.charAt(_i);
2613			}
2614			// High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters)
2615			if (0xD800 <= code && code <= 0xDBFF) {
2616				if (str.length <= _i + 1) {
2617					throw 'High surrogate without following low surrogate';
2618				}
2619				var next = str.charCodeAt(_i + 1);
2620				if (0xDC00 > next || next > 0xDFFF) {
2621					throw 'High surrogate without following low surrogate';
2622				}
2623				iChar = str.charAt(_i) + str.charAt(_i + 1);
2624				_i++;
2625			}
2626			// console.log('iChar', iChar)
2627
2628			//
2629			// i番目がSJISかチェック
2630			//
2631			if (!isSjisChar(iChar)) {
2632				ret.push(iChar);
2633			}
2634		}
2635
2636		return ret;
2637	};
2638
2639	//
2640	// 指定文字がSJISに変換可能(可逆変換)を判定する
2641	//   true : sjisである
2642	//   false: sjisではない
2643	//
2644	var isSjisChar = function isSjisChar(iChar) {
2645		// console.log('iChar', iChar)
2646
2647		// 文字 => Unicode16bit数値列
2648		var iCharCode = ECL.charset.Unicode.parse(iChar);
2649		// console.log('iCharCode', iCharCode)
2650		// iCharCode.forEach((x) => {
2651		//   console.log('.', x.toString(16))
2652		// })
2653
2654		// Unicode16bit数値列 => SJISコード
2655		var sjisCodeArray = ECL.convert_array(iCharCode, "SJIS");
2656		// console.log('sjisCodeArray', sjisCodeArray)
2657		// sjisCodeArray.forEach((x) => {
2658		//   console.log('.', x.toString(16))
2659		// })
2660		// SJISコードを1つの値にする
2661		var sjisCode = 0;
2662		sjisCodeArray.forEach(function (x) {
2663			sjisCode *= 256;
2664			sjisCode += x - 0;
2665		});
2666
2667		// SJISコードが指定範囲内の場合、無効な文字と判定
2668		var bHit = false;
2669		tableOfInvalidSjisChars.forEach(function (range) {
2670			if (range.begin <= sjisCode && sjisCode <= range.end) {
2671				bHit = true;
2672				return;
2673			}
2674		});
2675		if (bHit) {
2676			return false;
2677		}
2678
2679		// 文字列をUnicode 16bit数値の列に変換
2680		var unicodeCode = ECL.charset.SJIS.toU(sjisCodeArray);
2681		// console.log('unicodeCode', unicodeCode)
2682		// unicodeCode.forEach((x) => {
2683		//   console.log('.', x.toString(16))
2684		// })
2685
2686		// Unicode 16bit数値列 => 文字
2687		var charUnicode = ECL.charset.Unicode.stringify(unicodeCode);
2688		// console.log('charUnicode', charUnicode)
2689
2690		// 入力文字 => Unicode => SJIS => Unicode => 文字が適切に行われれば、SJIS適合文字とする
2691		return iChar === charUnicode;
2692	};
2693
2694	//
2695	// 自由項目サイズ定義: フォームの自由項目のデータサイズ
2696	//
2697	ECL.defOfFormFreeItemCounting = ['free_item1', 'free_item2', 'free_item3', 'free_check1', 'free_check2', 'free_check3', 'free_radio1', 'free_radio2', 'free_radio3'];
2698
2699	//
2700	// Shift_JISに変換して、サイズを計算する(Shift_JIS 半角1バイト, 全角2バイト)
2701	// @return {Number}   計算結果(bytes)
2702	//
2703	String.prototype.getSjisBytes = function () {
2704
2705		// 文字 => Unicode16bit数値列
2706		var iCharCode = ECL.charset.Unicode.parse(this);
2707		// console.log('iCharCode', iCharCode)
2708		// iCharCode.forEach((x) => {
2709		//   console.log('.', x.toString(16))
2710		// })
2711
2712		// Unicode16bit数値列 => SJISコード
2713		var sjisCodeArray = ECL.convert_array(iCharCode, "SJIS");
2714		// console.log('sjisCodeArray', sjisCodeArray)
2715		// sjisCodeArray.forEach((x) => {
2716		//   console.log('.', x.toString(16))
2717		// })
2718		var arySjises = [];
2719		var tmp = null;
2720		var val = null;
2721		sjisCodeArray.forEach(function (x, idx) {
2722			// console.log('x', x)
2723			// console.log('idx', idx)
2724			if (tmp !== null) {
2725				tmp = tmp * 256 + x;
2726				// console.log('tmp:', tmp.toString(16));
2727				arySjises.push(tmp);
2728				tmp = null;
2729			} else {
2730				if (x > 0x80) {
2731					tmp = x;
2732				} else {
2733					arySjises.push(x);
2734				}
2735			}
2736		});
2737		// console.log('--- arySjises', arySjises)
2738		// arySjises.forEach((x) => {
2739		//   console.log('.', x.toString(16))
2740		// })
2741
2742		var length = 0;
2743		for (var i = 0; i < arySjises.length; i++) {
2744			var c = arySjises[i];
2745			if (c >= 0x0 && c < 0x81 || c === 0xf8f0 || c >= 0xff61 && c < 0xffa0 || c >= 0xf8f1 && c < 0xf8f4) {
2746				length += 1;
2747			} else {
2748				length += 2;
2749			}
2750		}
2751		// console.log('length', length)
2752		return length;
2753	};
2754
2755	//
2756	// 自由項目サイズ定義にしたがって、データサイズを計算し、サイズを返す
2757	// @param  {object} formData		対象データ
2758	// @return {object}							計算結果
2759	//
2760	ECL.countDataSize = function (formData) {
2761		// 産出したデータ全体のサイズ
2762		var size = 0;
2763		// 区切り文字を「、」読点と定義、そのサイズ
2764		var separatedCharSize = '、'.getSjisBytes();
2765		// console.log('separatedCharSize', separatedCharSize)
2766
2767		//
2768		ECL.defOfFormFreeItemCounting.forEach(function (def) {
2769			// console.log('def', def)
2770			//
2771			var itemSize = 0;
2772			//
2773			var type = def.match(/free_(item|check|radio)\d$/)[1];
2774			// console.log('type', type)
2775			switch (type) {
2776				case 'item':
2777					// _label
2778					// console.log('key', def + '_label');
2779					// console.log('formData[' + def + '_label]', formData[def + '_label']);
2780					// console.log('formData[' + def + '_label]', formData[def + '_label'].getSjisBytes());
2781					itemSize += formData[def + '_label'].getSjisBytes();
2782					break;
2783
2784				case 'check':
2785					// _label
2786					// console.log('key', def + '_label');
2787					// console.log('formData[' + def + '_label]', formData[def + '_label']);
2788					// console.log('formData[' + def + '_label]', formData[def + '_label'].getSjisBytes());
2789					itemSize += formData[def + '_label'].getSjisBytes();
2790
2791					// _data
2792					// console.log('key', def + '_data');
2793					// console.log('formData[' + def + '_data]', formData[def + '_data']);
2794					formData[def + '_data'].forEach(function (val, idx) {
2795						// console.log('val', val)
2796						// console.log('val.display_flg', val.display_flg.getSjisBytes() + 1)
2797						// console.log('val.label', val.label.getSjisBytes() + 1)
2798						if (val.display_flg === 1) {
2799							itemSize += val.label.getSjisBytes() + separatedCharSize;
2800						}
2801					});
2802					break;
2803
2804				case 'radio':
2805					// _label
2806					// console.log('key', def + '_label');
2807					// console.log('formData[' + def + '_label]', formData[def + '_label']);
2808					// console.log('formData[' + def + '_label]', formData[def + '_label'].getSjisBytes());
2809					itemSize += formData[def + '_label'].getSjisBytes();
2810
2811					// _data
2812					// console.log('key', def + '_data');
2813					// console.log('formData[' + def + '_data]', formData[def + '_data']);
2814					var maxSizeOfRadioItems = 0;
2815					formData[def + '_data'].forEach(function (val, idx) {
2816						// console.log('val.label', val.label)
2817						// console.log('val.label', val.label.getSjisBytes() + 1)
2818						var radioItemSize = val.label.getSjisBytes() + separatedCharSize;
2819						if (val.display_flg === 1 && radioItemSize > maxSizeOfRadioItems) {
2820							maxSizeOfRadioItems = radioItemSize;
2821						}
2822					});
2823					itemSize += maxSizeOfRadioItems;
2824					break;
2825			}
2826			// console.log('itemSize', itemSize)
2827			size += itemSize;
2828			// console.log(':size', size)
2829		});
2830		// console.log('::: total size', size)
2831
2832		return size;
2833	};
2834})();/*! fancyBox v2.1.7 fancyapps.com | fancyapps.com/fancybox/#license */
2835(function(t,J,f,x){var L=f("html"),q=f(t),p=f(J),b=f.fancybox=function(){b.open.apply(this,arguments)},K=navigator.userAgent.match(/msie/i),D=null,u=J.createTouch!==x,v=function(a){return a&&a.hasOwnProperty&&a instanceof f},r=function(a){return a&&"string"===f.type(a)},G=function(a){return r(a)&&0<a.indexOf("%")},m=function(a,c){var d=parseInt(a,10)||0;c&&G(a)&&(d*=b.getViewport()[c]/100);return Math.ceil(d)},y=function(a,b){return m(a,b)+"px"};f.extend(b,{version:"2.1.7",defaults:{padding:15,margin:20,
2836width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!u,fitToView:!0,aspectRatio:!1,topRatio:.5,leftRatio:.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},
2837keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+
2838(K?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>',loading:'<div id="fancybox-loading"><div></div></div>'},openEffect:"fade",
2839openSpeed:250,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},
2840previous:null,coming:null,current:null,isActive:!1,isOpen:!1,isOpened:!1,wrap:null,
vendor: 17,958 bytes, lines 2840-2875
2840skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,c){if(a&&(f.isPlainObject(c)||(c={}),!1!==b.close(!0)))return f.isArray(a)||(a=v(a)?f(a).get():[a]),f.each(a,function(d,e){var k={},g,l,h,n,m;"object"===f.type(e)&&(e.nodeType&&(e=f(e)),v(e)?(k={href:e.data("fancybox-href")||e.attr("href"),title:f("<div/>").text(e.data("fancybox-title")||
2841e.attr("title")||"").html(),isDom:!0,element:e},f.metadata&&f.extend(!0,k,e.metadata())):k=e);g=c.href||k.href||(r(e)?e:null);l=c.title!==x?c.title:k.title||"";n=(h=c.content||k.content)?"html":c.type||k.type;!n&&k.isDom&&(n=e.data("fancybox-type"),n||(n=(n=e.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(e)&&(n="html",h=e)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));h||("inline"===n?g?h=f(r(g)?
2842g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(h=e):"html"===n?h=g:n||g||!k.isDom||(n="inline",h=e));f.extend(k,{href:g,type:n,content:h,title:l,selector:m});a[d]=k}),b.opts=f.extend(!0,{},b.defaults,c),c.keys!==x&&(b.opts.keys=c.keys?f.extend({},b.defaults.keys,c.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&
2843a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var c=function(){clearTimeout(b.player.timer)},
2844d=function(){c();b.current&&b.player.isActive&&(b.player.timer=setTimeout(b.next,b.current.playSpeed))},e=function(){c();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index<b.group.length-1)&&(b.player.isActive=!0,p.bind({"onCancel.player beforeClose.player":e,"onUpdate.player":d,"beforeLoad.player":c}),d(),b.trigger("onPlayStart")):e()},next:function(a){var c=b.current;c&&(r(a)||(a=c.direction.next),b.jumpto(c.index+
28451,a,"next"))},prev:function(a){var c=b.current;c&&(r(a)||(a=c.direction.prev),b.jumpto(c.index-1,a,"prev"))},jumpto:function(a,c,d){var e=b.current;e&&(a=m(a),b.direction=c||e.direction[a>=e.index?"next":"prev"],b.router=d||"jumpto",e.loop&&(0>a&&(a=e.group.length+a%e.group.length),a%=e.group.length),e.group[a]!==x&&(b.cancel(),b._start(a)))},reposition:function(a,c){var d=b.current,e=d?d.wrap:null,k;e&&(k=b._getPosition(c),a&&"scroll"===a.type?(delete k.position,e.stop(!0,!0).animate(k,200)):(e.css(k),
2846d.pos=f.extend({},d.dim,k)))},update:function(a){var c=a&&a.originalEvent&&a.originalEvent.type,d=!c||"orientationchange"===c;d&&(clearTimeout(D),D=null);b.isOpen&&!D&&(D=setTimeout(function(){var e=b.current;e&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(d||"load"===c||"resize"===c&&e.autoResize)&&b._setDimension(),"scroll"===c&&e.canShrink||b.reposition(a),b.trigger("onUpdate"),D=null)},d&&!u?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,
2847u&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,c;b.hideLoading();a=f(b.opts.tpl.loading).click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(c=b.getViewport(),a.css({position:"absolute",top:.5*c.h+c.y,left:.5*c.w+c.x}));b.trigger("onLoading")},getViewport:function(){var a=
2848b.current&&b.current.locked||!1,c={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(c.w=a[0].clientWidth,c.h=a[0].clientHeight):(c.w=u&&t.innerWidth?t.innerWidth:q.width(),c.h=u&&t.innerHeight?t.innerHeight:q.height());return c},unbindEvents:function(){b.wrap&&v(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,c;a&&(q.bind("orientationchange.fb"+(u?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(c=a.keys)&&p.bind("keydown.fb",
2849function(d){var e=d.which||d.keyCode,k=d.target||d.srcElement;if(27===e&&b.coming)return!1;d.ctrlKey||d.altKey||d.shiftKey||d.metaKey||k&&(k.type||f(k).is("[contenteditable]"))||f.each(c,function(c,k){if(1<a.group.length&&k[e]!==x)return b[c](k[e]),d.preventDefault(),!1;if(-1<f.inArray(e,k))return b[c](),d.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(c,e,k,g){for(var d=f(c.target||null),h=!1;d.length&&!(h||d.is(".fancybox-skin")||d.is(".fancybox-wrap"));)h=
2850(h=d[0])&&!(h.style.overflow&&"hidden"===h.style.overflow)&&(h.clientWidth&&h.scrollWidth>h.clientWidth||h.clientHeight&&h.scrollHeight>h.clientHeight),d=f(d).parent();0!==e&&!h&&1<b.group.length&&!a.canShrink&&(0<g||0<k?b.prev(0<g?"down":"left"):(0>g||0>k)&&b.next(0>g?"up":"right"),c.preventDefault())}))},trigger:function(a,c){var d,e=c||b.coming||b.current;if(e){f.isFunction(e[a])&&(d=e[a].apply(e,Array.prototype.slice.call(arguments,1)));if(!1===d)return!1;e.helpers&&f.each(e.helpers,function(c,
2851d){if(d&&b.helpers[c]&&f.isFunction(b.helpers[c][a]))b.helpers[c][a](f.extend(!0,{},b.helpers[c].defaults,d),e)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var c={},d,e;a=m(a);d=b.group[a]||null;if(!d)return!1;c=f.extend(!0,{},b.opts,d);d=c.margin;e=c.padding;"number"===f.type(d)&&(c.margin=[d,d,d,d]);"number"===f.type(e)&&(c.padding=
2852[e,e,e,e]);c.modal&&f.extend(!0,c,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});c.autoSize&&(c.autoWidth=c.autoHeight=!0);"auto"===c.width&&(c.autoWidth=!0);"auto"===c.height&&(c.autoHeight=!0);c.group=b.group;c.index=a;b.coming=c;if(!1===b.trigger("beforeLoad"))b.coming=null;else{e=c.type;d=c.href;if(!e)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===
2853e||"swf"===e)c.autoHeight=c.autoWidth=!1,c.scrolling="visible";"image"===e&&(c.aspectRatio=!0);"iframe"===e&&u&&(c.scrolling="scroll");c.wrap=f(c.tpl.wrap).addClass("fancybox-"+(u?"mobile":"desktop")+" fancybox-type-"+e+" fancybox-tmp "+c.wrapCSS).appendTo(c.parent||"body");f.extend(c,{skin:f(".fancybox-skin",c.wrap),outer:f(".fancybox-outer",c.wrap),inner:f(".fancybox-inner",c.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){c.skin.css("padding"+b,y(c.padding[a]))});b.trigger("onReady");
2854if("inline"===e||"html"===e){if(!c.content||!c.content.length)return b._error("content")}else if(!d)return b._error("href");"image"===e?b._loadImage():"ajax"===e?b._loadAjax():"iframe"===e?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=
2855this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,d){b.coming&&"abort"!==d?b._error("ajax",a):b.hideLoading()},success:function(c,d){"success"===d&&(a.content=c,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,
2856c=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",u?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(d){}});a.iframe.preload&&(b.showLoading(),c.one("load",function(){f(this).data("ready",1);u||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=c.appendTo(a.inner);a.iframe.preload||
2857b._afterLoad()},_preloadImages:function(){var a=b.group,c=b.current,d=a.length,e=c.preload?Math.min(c.preload,d-1):0,f,g;for(g=1;g<=e;g+=1)f=a[(c.index+g)%d],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,c=b.current,d,e,k,g,l;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,c))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{c&&(b.trigger("beforeChange",c),c.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());
2858b.unbindEvents();d=a.content;e=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:c});g=a.href;switch(e){case "inline":case "ajax":case "html":a.selector?d=f("<div>").html(d).find(a.selector):v(d)&&(d.data("fancybox-placeholder")||d.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(d).hide()),d=d.show().detach(),a.wrap.bind("onReset",function(){f(this).find(d).length&&d.hide().replaceAll(d.data("fancybox-placeholder")).data("fancybox-placeholder",
2859!1)}));break;case "image":d=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":d='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',l="",f.each(a.swf,function(a,b){d+='<param name="'+a+'" value="'+b+'"></param>';l+=" "+a+'="'+b+'"'}),d+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+l+"></embed></object>"}v(d)&&d.parent().is(a.inner)||a.inner.append(d);b.trigger("beforeShow");
2860a.inner.css("overflow","yes"===k?"scroll":"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(c.prevMethod)b.transitions[c.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),c=0,d,e=b.wrap,k=b.skin,g=b.inner,l=b.current;d=l.width;var h=l.height,n=l.minWidth,w=l.minHeight,p=l.maxWidth,
2861q=l.maxHeight,u=l.scrolling,r=l.scrollOutside?l.scrollbarWidth:0,z=l.margin,A=m(z[1]+z[3]),t=m(z[0]+z[2]),x,B,v,E,C,H,D,F,I;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");z=m(k.outerWidth(!0)-k.width());x=m(k.outerHeight(!0)-k.height());B=A+z;v=t+x;E=G(d)?(a.w-B)*m(d)/100:d;C=G(h)?(a.h-v)*m(h)/100:h;if("iframe"===l.type){if(I=l.content,l.autoHeight&&I&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(E).height(9999),H=I.contents().find("body"),r&&H.css("overflow-x",
2862"hidden"),C=H.outerHeight(!0))}catch(M){}}else if(l.autoWidth||l.autoHeight)g.addClass("fancybox-tmp"),l.autoWidth||g.width(E),l.autoHeight||g.height(C),l.autoWidth&&(E=g.width()),l.autoHeight&&(C=g.height()),g.removeClass("fancybox-tmp");d=m(E);h=m(C);F=E/C;n=m(G(n)?m(n,"w")-B:n);p=m(G(p)?m(p,"w")-B:p);w=m(G(w)?m(w,"h")-v:w);q=m(G(q)?m(q,"h")-v:q);H=p;D=q;l.fitToView&&(p=Math.min(a.w-B,p),q=Math.min(a.h-v,q));B=a.w-A;t=a.h-t;l.aspectRatio?(d>p&&(d=p,h=m(d/F)),h>q&&(h=q,d=m(h*F)),d<n&&(d=n,h=m(d/
2863F)),h<w&&(h=w,d=m(h*F))):(d=Math.max(n,Math.min(d,p)),l.autoHeight&&"iframe"!==l.type&&(g.width(d),h=g.height()),h=Math.max(w,Math.min(h,q)));if(l.fitToView)if(g.width(d).height(h),e.width(d+z),a=e.width(),A=e.height(),l.aspectRatio)for(;(a>B||A>t)&&d>n&&h>w&&!(19<c++);)h=Math.max(w,Math.min(q,h-10)),d=m(h*F),d<n&&(d=n,h=m(d/F)),d>p&&(d=p,h=m(d/F)),g.width(d).height(h),e.width(d+z),a=e.width(),A=e.height();else d=Math.max(n,Math.min(d,d-(a-B))),h=Math.max(w,Math.min(h,h-(A-t)));r&&"auto"===u&&h<C&&
2864d+z+r<B&&(d+=r);g.width(d).height(h);e.width(d+z);a=e.width();A=e.height();c=(a>B||A>t)&&d>n&&h>w;d=l.aspectRatio?d<H&&h<D&&d<E&&h<C:(d<H||h<D)&&(d<E||h<C);f.extend(l,{dim:{width:y(a),height:y(A)},origWidth:E,origHeight:C,canShrink:c,canExpand:d,wPadding:z,hPadding:x,wrapSpace:A-k.outerHeight(!0),skinSpace:k.height()-h});!I&&l.autoHeight&&h>w&&h<q&&!d&&g.height("auto")},_getPosition:function(a){var c=b.current,d=b.getViewport(),e=c.margin,f=b.wrap.width()+e[1]+e[3],g=b.wrap.height()+e[0]+e[2],e={position:"absolute",
2865top:e[0],left:e[3]};c.autoCenter&&c.fixed&&!a&&g<=d.h&&f<=d.w?e.position="fixed":c.locked||(e.top+=d.y,e.left+=d.x);e.top=y(Math.max(e.top,e.top+(d.h-g)*c.topRatio));e.left=y(Math.max(e.left,e.left+(d.w-f)*c.leftRatio));return e},_afterZoomIn:function(){var a=b.current;a&&((b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened").hide().show(0),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(c){f(c.target).is("a")||
2866f(c.target).parent().is("a")||(c.preventDefault(),b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),a.loop||a.index!==a.group.length-1)?b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=
2867!1,b.play(!0)):b.play(!1))},_afterZoomOut:function(a){a=a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,c=a.element,d=a.orig,e={},f=50,g=50,l=a.hPadding,h=a.wPadding,n=b.getViewport();!d&&a.isDom&&c.is(":visible")&&(d=c.find("img:first"),d.length||(d=c));v(d)?
2868(e=d.offset(),d.is("img")&&(f=d.outerWidth(),g=d.outerHeight())):(e.top=n.y+(n.h-g)*a.topRatio,e.left=n.x+(n.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)e.top-=n.y,e.left-=n.x;return e={top:y(e.top-l*a.topRatio),left:y(e.left-h*a.leftRatio),width:y(f+h),height:y(g+l)}},step:function(a,c){var d,e,f=c.prop;e=b.current;var g=e.wrapSpace,l=e.skinSpace;if("width"===f||"height"===f)d=c.end===c.start?1:(a-c.start)/(c.end-c.start),b.isClosing&&(d=1-d),e="width"===f?e.wPadding:e.hPadding,
2869e=a-e,b.skin[f](m("width"===f?e:e-g*d)),b.inner[f](m("width"===f?e:e-g*d-l*d))},zoomIn:function(){var a=b.current,c=a.pos,d=a.openEffect,e="elastic"===d,k=f.extend({opacity:1},c);delete k.position;e?(c=this.getOrigPosition(),a.openOpacity&&(c.opacity=.1)):"fade"===d&&(c.opacity=.1);b.wrap.css(c).animate(k,{duration:"none"===d?0:a.openSpeed,easing:a.openEasing,step:e?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,c=a.closeEffect,d="elastic"===c,e={opacity:.1};d&&(e=this.getOrigPosition(),
2870a.closeOpacity&&(e.opacity=.1));b.wrap.animate(e,{duration:"none"===c?0:a.closeSpeed,easing:a.closeEasing,step:d?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,c=a.nextEffect,d=a.pos,e={opacity:1},f=b.direction,g;d.opacity=.1;"elastic"===c&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(d[g]=y(m(d[g])-200),e[g]="+=200px"):(d[g]=y(m(d[g])+200),e[g]="-=200px"));"none"===c?b._afterZoomIn():b.wrap.css(d).animate(e,{duration:a.nextSpeed,easing:a.nextEasing,
2871complete:b._afterZoomIn})},changeOut:function(){var a=b.previous,c=a.prevEffect,d={opacity:.1},e=b.direction;"elastic"===c&&(d["down"===e||"up"===e?"top":"left"]=("up"===e||"left"===e?"-":"+")+"=200px");a.wrap.animate(d,{duration:"none"===c?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!u,fixed:!0},overlay:null,fixed:!1,el:f("html"),create:function(a){var c;a=f.extend({},
2872this.defaults,a);this.overlay&&this.close();c=b.coming?b.coming.parent:a.parent;this.overlay=f('<div class="fancybox-overlay"></div>').appendTo(c&&c.length?c:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var c=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&
2873this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():c.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");
2874K?(b=Math.max(J.documentElement.offsetWidth,J.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var d=this.overlay;f(".fancybox-overlay").stop(!0,!0);d||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*:not(object)").filter(function(){return"fixed"===
2875f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f
2875(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",
2876position:"bottom"},beforeShow:function(a){var c=b.current,d=c.title,e=a.type;f.isFunction(d)&&(d=d.call(c.element,c));if(r(d)&&""!==f.trim(d)){c=f('<div class="fancybox-title fancybox-title-'+e+'-wrap">'+d+"</div>");switch(e){case "inside":e=b.skin;break;case "outside":e=b.wrap;break;case "over":e=b.inner;break;default:e=b.skin,c.appendTo("body"),K&&c.width(c.width()),c.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(m(c.css("margin-bottom")))}c["top"===a.position?"prependTo":
2877"appendTo"](e)}}};f.fn.fancybox=function(a){var c,d=f(this),e=this.selector||"",k=function(g){var l=f(this).blur(),h=c,k,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||l.is(".fancybox-wrap")||(k=a.groupAttr||"data-fancybox-group",m=l.attr(k),m||(k="rel",m=l.get(0)[k]),m&&""!==m&&"nofollow"!==m&&(l=e.length?f(e):d,l=l.filter("["+k+'="'+m+'"]'),h=l.index(this)),a.index=h,!1!==b.open(l,a)&&g.preventDefault())};a=a||{};c=a.index||0;e&&!1!==a.live?p.undelegate(e,"click.fb-start").delegate(e+":not('.fancybox-item, .fancybox-nav')",
2878"click.fb-start",k):d.unbind("click.fb-start").bind("click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,c;f.scrollbarWidth===x&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===x&&(f.support.fixedPosition=function(){var a=f('<div style="position:fixed;top:20px;"></div>').appendTo("body"),
2879b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(t).width();L.addClass("fancybox-lock-test");c=f(t).width();L.removeClass("fancybox-lock-test");f("<style type='text/css'>.fancybox-margin{margin-right:"+(c-a)+"px;}</style>").appendTo("head")})})(window,document,jQuery);
2880/*
2881* jquery-match-height 0.7.2 by @liabru
2882* http://brm.io/jquery-match-height/
2883* License MIT
2884*/
2885!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=-1,o=-1,n=function(t){return parseFloat(t)||0},a=function(e){var o=1,a=t(e),i=null,r=[];return a.each(function(){var e=t(this),a=e.offset().top-n(e.css("margin-top")),s=r.length>0?r[r.length-1]:null;null===s?r.push(e):Math.floor(Math.abs(i-a))<=o?r[r.length-1]=s.add(e):r.push(e),i=a}),r},i=function(e){var o={
2886byRow:!0,property:"height",target:null,remove:!1};return"object"==typeof e?t.extend(o,e):("boolean"==typeof e?o.byRow=e:"remove"===e&&(o.remove=!0),o)},r=t.fn.matchHeight=function(e){var o=i(e);if(o.remove){var n=this;return this.css(o.property,""),t.each(r._groups,function(t,e){e.elements=e.elements.not(n)}),this}return this.length<=1&&!o.target?this:(r._groups.push({elements:this,options:o}),r._apply(this,o),this)};r.version="0.7.2",r._groups=[],r._throttle=80,r._maintainScroll=!1,r._beforeUpdate=null,
2887r._afterUpdate=null,r._rows=a,r._parse=n,r._parseOptions=i,r._apply=function(e,o){var s=i(o),h=t(e),l=[h],c=t(window).scrollTop(),p=t("html").outerHeight(!0),u=h.parents().filter(":hidden");return u.each(function(){var e=t(this);e.data("style-cache",e.attr("style"))}),u.css("display","block"),s.byRow&&!s.target&&(h.each(function(){var e=t(this),o=e.css("display");"inline-block"!==o&&"flex"!==o&&"inline-flex"!==o&&(o="block"),e.data("style-cache",e.attr("style")),e.css({display:o,"padding-top":"0",
2888"padding-bottom":"0","margin-top":"0","margin-bottom":"0","border-top-width":"0","border-bottom-width":"0",height:"100px",overflow:"hidden"})}),l=a(h),h.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||"")})),t.each(l,function(e,o){var a=t(o),i=0;if(s.target)i=s.target.outerHeight(!1);else{if(s.byRow&&a.length<=1)return void a.css(s.property,"");a.each(function(){var e=t(this),o=e.attr("style"),n=e.css("display");"inline-block"!==n&&"flex"!==n&&"inline-flex"!==n&&(n="block");var a={
2889display:n};a[s.property]="",e.css(a),e.outerHeight(!1)>i&&(i=e.outerHeight(!1)),o?e.attr("style",o):e.css("display","")})}a.each(function(){var e=t(this),o=0;s.target&&e.is(s.target)||("border-box"!==e.css("box-sizing")&&(o+=n(e.css("border-top-width"))+n(e.css("border-bottom-width")),o+=n(e.css("padding-top"))+n(e.css("padding-bottom"))),e.css(s.property,i-o+"px"))})}),u.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||null)}),r._maintainScroll&&t(window).scrollTop(c/p*t("html").outerHeight(!0)),
2890this},r._applyDataApi=function(){var e={};t("[data-match-height], [data-mh]").each(function(){var o=t(this),n=o.attr("data-mh")||o.attr("data-match-height");n in e?e[n]=e[n].add(o):e[n]=o}),t.each(e,function(){this.matchHeight(!0)})};var s=function(e){r._beforeUpdate&&r._beforeUpdate(e,r._groups),t.each(r._groups,function(){r._apply(this.elements,this.options)}),r._afterUpdate&&r._afterUpdate(e,r._groups)};r._update=function(n,a){if(a&&"resize"===a.type){var i=t(window).width();if(i===e)return;e=i;
2891}n?o===-1&&(o=setTimeout(function(){s(a),o=-1},r._throttle)):s(a)},t(r._applyDataApi);var h=t.fn.on?"on":"bind";t(window)[h]("load",function(t){r._update(!1,t)}),t(window)[h]("resize orientationchange",function(t){r._update(!0,t)})});/*!
2892 * # Semantic UI 2.4.1 - Dropdown
2893 * http://github.com/semantic-org/semantic-ui/
2894 *
2895 *
2896 * Released under the MIT license
2897 * http://opensource.org/licenses/MIT
2898 *
2899 */
2900
2901;(function ($, window, document, undefined) {
2902
2903	'use strict';
2904	
2905	window = (typeof window != 'undefined' && window.Math == Math)
2906	  ? window
2907	  : (typeof self != 'undefined' && self.Math == Math)
2908		? self
2909		: Function('return this')()
2910	;
2911	
2912	$.fn.dropdown = function(parameters) {
2913	  var
2914		$allModules    = $(this),
2915		$document      = $(document),
2916	
2917		moduleSelector = $allModules.selector || '',
2918	
2919		hasTouch       = ('ontouchstart' in document.documentElement),
2920		time           = new Date().getTime(),
2921		performance    = [],
2922	
2923		query          = arguments[0],
2924		methodInvoked  = (typeof query == 'string'),
2925		queryArguments = [].slice.call(arguments, 1),
2926		returnedValue
2927	  ;
2928	
2929	  $allModules
2930		.each(function(elementIndex) {
2931		  var
2932			settings          = ( $.isPlainObject(parameters) )
2933			  ? $.extend(true, {}, $.fn.dropdown.settings, parameters)
2934			  : $.extend({}, $.fn.dropdown.settings),
2935	
2936			className       = settings.className,
2937			message         = settings.message,
2938			fields          = settings.fields,
2939			keys            = settings.keys,
2940			metadata        = settings.metadata,
2941			namespace       = settings.namespace,
2942			regExp          = settings.regExp,
2943			selector        = settings.selector,
2944			error           = settings.error,
2945			templates       = settings.templates,
2946	
2947			eventNamespace  = '.' + namespace,
2948			moduleNamespace = 'module-' + namespace,
2949	
2950			$module         = $(this),
2951			$context        = $(settings.context),
2952			$text           = $module.find(selector.text),
2953			$search         = $module.find(selector.search),
2954			$sizer          = $module.find(selector.sizer),
2955			$input          = $module.find(selector.input),
2956			$icon           = $module.find(selector.icon),
2957	
2958			$combo = ($module.prev().find(selector.text).length > 0)
2959			  ? $module.prev().find(selector.text)
2960			  : $module.prev(),
2961	
2962			$menu           = $module.children(selector.menu),
2963			$item           = $menu.find(selector.item),
2964	
2965			activated       = false,
2966			itemActivated   = false,
2967			internalChange  = false,
2968			element         = this,
2969			instance        = $module.data(moduleNamespace),
2970	
2971			initialLoad,
2972			pageLostFocus,
2973			willRefocus,
2974			elementNamespace,
2975			id,
2976			selectObserver,
2977			menuObserver,
2978			module
2979		  ;
2980	
2981		  module = {
2982	
2983			initialize: function() {
2984			  module.debug('Initializing dropdown', settings);
2985	
2986			  if( module.is.alreadySetup() ) {
2987				module.setup.reference();
2988			  }
2989			  else {
2990	
2991				module.setup.layout();
2992	
2993				if(settings.values) {
2994				  module.change.values(settings.values);
2995				}
2996	
2997				module.refreshData();
2998	
2999				module.save.defaults();
3000				module.restore.selected();
3001	
3002				module.create.id();
3003				module.bind.events();
3004	
3005				module.observeChanges();
3006				module.instantiate();
3007			  }
3008	
3009			},
3010	
3011			instantiate: function() {
3012			  module.verbose('Storing instance of dropdown', module);
3013			  instance = module;
3014			  $module
3015				.data(moduleNamespace, module)
3016			  ;
3017			},
3018	
3019			destroy: function() {
3020			  module.verbose('Destroying previous dropdown', $module);
3021			  module.remove.tabbable();
3022			  $module
3023				.off(eventNamespace)
3024				.removeData(moduleNamespace)
3025			  ;
3026			  $menu
3027				.off(eventNamespace)
3028			  ;
3029			  $document
3030				.off(elementNamespace)
3031			  ;
3032			  module.disconnect.menuObserver();
3033			  module.disconnect.selectObserver();
3034			},
3035	
3036			observeChanges: function() {
3037			  if('MutationObserver' in window) {
3038				selectObserver = new MutationObserver(module.event.select.mutation);
3039				menuObserver   = new MutationObserver(module.event.menu.mutation);
3040				module.debug('Setting up mutation observer', selectObserver, menuObserver);
3041				module.observe.select();
3042				module.observe.menu();
3043			  }
3044			},
3045	
3046			disconnect: {
3047			  menuObserver: function() {
3048				if(menuObserver) {
3049				  menuObserver.disconnect();
3050				}
3051			  },
3052			  selectObserver: function() {
3053				if(selectObserver) {
3054				  selectObserver.disconnect();
3055				}
3056			  }
3057			},
3058			observe: {
3059			  select: function() {
3060				if(module.has.input()) {
3061				  selectObserver.observe($module[0], {
3062					childList : true,
3063					subtree   : true
3064				  });
3065				}
3066			  },
3067			  menu: function() {
3068				if(module.has.menu()) {
3069				  menuObserver.observe($menu[0], {
3070					childList : true,
3071					subtree   : true
3072				  });
3073				}
3074			  }
3075			},
3076	
3077			create: {
3078			  id: function() {
3079				id = (Math.random().toString(16) + '000000000').substr(2, 8);
3080				elementNamespace = '.' + id;
3081				module.verbose('Creating unique id for element', id);
3082			  },
3083			  userChoice: function(values) {
3084				var
3085				  $userChoices,
3086				  $userChoice,
3087				  isUserValue,
3088				  html
3089				;
3090				values = values || module.get.userValues();
3091				if(!values) {
3092				  return false;
vendor: 107,155 bytes, lines 3093-6828
3093				}
3094				values = $.isArray(values)
3095				  ? values
3096				  : [values]
3097				;
3098				$.each(values, function(index, value) {
3099				  if(module.get.item(value) === false) {
3100					html         = settings.templates.addition( module.add.variables(message.addResult, value) );
3101					$userChoice  = $('<div />')
3102					  .html(html)
3103					  .attr('data-' + metadata.value, value)
3104					  .attr('data-' + metadata.text, value)
3105					  .addClass(className.addition)
3106					  .addClass(className.item)
3107					;
3108					if(settings.hideAdditions) {
3109					  $userChoice.addClass(className.hidden);
3110					}
3111					$userChoices = ($userChoices === undefined)
3112					  ? $userChoice
3113					  : $userChoices.add($userChoice)
3114					;
3115					module.verbose('Creating user choices for value', value, $userChoice);
3116				  }
3117				});
3118				return $userChoices;
3119			  },
3120			  userLabels: function(value) {
3121				var
3122				  userValues = module.get.userValues()
3123				;
3124				if(userValues) {
3125				  module.debug('Adding user labels', userValues);
3126				  $.each(userValues, function(index, value) {
3127					module.verbose('Adding custom user value');
3128					module.add.label(value, value);
3129				  });
3130				}
3131			  },
3132			  menu: function() {
3133				$menu = $('<div />')
3134				  .addClass(className.menu)
3135				  .appendTo($module)
3136				;
3137			  },
3138			  sizer: function() {
3139				$sizer = $('<span />')
3140				  .addClass(className.sizer)
3141				  .insertAfter($search)
3142				;
3143			  }
3144			},
3145	
3146			search: function(query) {
3147			  query = (query !== undefined)
3148				? query
3149				: module.get.query()
3150			  ;
3151			  module.verbose('Searching for query', query);
3152			  if(module.has.minCharacters(query)) {
3153				module.filter(query);
3154			  }
3155			  else {
3156				module.hide();
3157			  }
3158			},
3159	
3160			select: {
3161			  firstUnfiltered: function() {
3162				module.verbose('Selecting first non-filtered element');
3163				module.remove.selectedItem();
3164				$item
3165				  .not(selector.unselectable)
3166				  .not(selector.addition + selector.hidden)
3167					.eq(0)
3168					.addClass(className.selected)
3169				;
3170			  },
3171			  nextAvailable: function($selected) {
3172				$selected = $selected.eq(0);
3173				var
3174				  $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),
3175				  $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),
3176				  hasNext        = ($nextAvailable.length > 0)
3177				;
3178				if(hasNext) {
3179				  module.verbose('Moving selection to', $nextAvailable);
3180				  $nextAvailable.addClass(className.selected);
3181				}
3182				else {
3183				  module.verbose('Moving selection to', $prevAvailable);
3184				  $prevAvailable.addClass(className.selected);
3185				}
3186			  }
3187			},
3188	
3189			setup: {
3190			  api: function() {
3191				var
3192				  apiSettings = {
3193					debug   : settings.debug,
3194					urlData : {
3195					  value : module.get.value(),
3196					  query : module.get.query()
3197					},
3198					on    : false
3199				  }
3200				;
3201				module.verbose('First request, initializing API');
3202				$module
3203				  .api(apiSettings)
3204				;
3205			  },
3206			  layout: function() {
3207				if( $module.is('select') ) {
3208				  module.setup.select();
3209				  module.setup.returnedObject();
3210				}
3211				if( !module.has.menu() ) {
3212				  module.create.menu();
3213				}
3214				if( module.is.search() && !module.has.search() ) {
3215				  module.verbose('Adding search input');
3216				  $search = $('<input />')
3217					.addClass(className.search)
3218					.prop('autocomplete', 'off')
3219					.insertBefore($text)
3220				  ;
3221				}
3222				if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {
3223				  module.create.sizer();
3224				}
3225				if(settings.allowTab) {
3226				  module.set.tabbable();
3227				}
3228			  },
3229			  select: function() {
3230				var
3231				  selectValues  = module.get.selectValues()
3232				;
3233				module.debug('Dropdown initialized on a select', selectValues);
3234				if( $module.is('select') ) {
3235				  $input = $module;
3236				}
3237				// see if select is placed correctly already
3238				if($input.parent(selector.dropdown).length > 0) {
3239				  module.debug('UI dropdown already exists. Creating dropdown menu only');
3240				  $module = $input.closest(selector.dropdown);
3241				  if( !module.has.menu() ) {
3242					module.create.menu();
3243				  }
3244				  $menu = $module.children(selector.menu);
3245				  module.setup.menu(selectValues);
3246				}
3247				else {
3248				  module.debug('Creating entire dropdown from select');
3249				  $module = $('<div />')
3250					.attr('class', $input.attr('class') )
3251					.addClass(className.selection)
3252					.addClass(className.dropdown)
3253					.html( templates.dropdown(selectValues) )
3254					.insertBefore($input)
3255				  ;
3256				  if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {
3257					module.error(error.missingMultiple);
3258					$input.prop('multiple', true);
3259				  }
3260				  if($input.is('[multiple]')) {
3261					module.set.multiple();
3262				  }
3263				  if ($input.prop('disabled')) {
3264					module.debug('Disabling dropdown');
3265					$module.addClass(className.disabled);
3266				  }
3267				  $input
3268					.removeAttr('class')
3269					.detach()
3270					.prependTo($module)
3271				  ;
3272				}
3273				module.refresh();
3274			  },
3275			  menu: function(values) {
3276				$menu.html( templates.menu(values, fields));
3277				$item = $menu.find(selector.item);
3278			  },
3279			  reference: function() {
3280				module.debug('Dropdown behavior was called on select, replacing with closest dropdown');
3281				// replace module reference
3282				$module  = $module.parent(selector.dropdown);
3283				instance = $module.data(moduleNamespace);
3284				element  = $module.get(0);
3285				module.refresh();
3286				module.setup.returnedObject();
3287			  },
3288			  returnedObject: function() {
3289				var
3290				  $firstModules = $allModules.slice(0, elementIndex),
3291				  $lastModules  = $allModules.slice(elementIndex + 1)
3292				;
3293				// adjust all modules to use correct reference
3294				$allModules = $firstModules.add($module).add($lastModules);
3295			  }
3296			},
3297	
3298			refresh: function() {
3299			  module.refreshSelectors();
3300			  module.refreshData();
3301			},
3302	
3303			refreshItems: function() {
3304			  $item = $menu.find(selector.item);
3305			},
3306	
3307			refreshSelectors: function() {
3308			  module.verbose('Refreshing selector cache');
3309			  $text   = $module.find(selector.text);
3310			  $search = $module.find(selector.search);
3311			  $input  = $module.find(selector.input);
3312			  $icon   = $module.find(selector.icon);
3313			  $combo  = ($module.prev().find(selector.text).length > 0)
3314				? $module.prev().find(selector.text)
3315				: $module.prev()
3316			  ;
3317			  $menu    = $module.children(selector.menu);
3318			  $item    = $menu.find(selector.item);
3319			},
3320	
3321			refreshData: function() {
3322			  module.verbose('Refreshing cached metadata');
3323			  $item
3324				.removeData(metadata.text)
3325				.removeData(metadata.value)
3326			  ;
3327			},
3328	
3329			clearData: function() {
3330			  module.verbose('Clearing metadata');
3331			  $item
3332				.removeData(metadata.text)
3333				.removeData(metadata.value)
3334			  ;
3335			  $module
3336				.removeData(metadata.defaultText)
3337				.removeData(metadata.defaultValue)
3338				.removeData(metadata.placeholderText)
3339			  ;
3340			},
3341	
3342			toggle: function() {
3343			  module.verbose('Toggling menu visibility');
3344			  if( !module.is.active() ) {
3345				module.show();
3346			  }
3347			  else {
3348				module.hide();
3349			  }
3350			},
3351	
3352			show: function(callback) {
3353			  callback = $.isFunction(callback)
3354				? callback
3355				: function(){}
3356			  ;
3357			  if(!module.can.show() && module.is.remote()) {
3358				module.debug('No API results retrieved, searching before show');
3359				module.queryRemote(module.get.query(), module.show);
3360			  }
3361			  if( module.can.show() && !module.is.active() ) {
3362				module.debug('Showing dropdown');
3363				if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {
3364				  module.remove.message();
3365				}
3366				if(module.is.allFiltered()) {
3367				  return true;
3368				}
3369				if(settings.onShow.call(element) !== false) {
3370				  module.animate.show(function() {
3371					if( module.can.click() ) {
3372					  module.bind.intent();
3373					}
3374					if(module.has.menuSearch()) {
3375					  module.focusSearch();
3376					}
3377					module.set.visible();
3378					callback.call(element);
3379				  });
3380				}
3381			  }
3382			},
3383	
3384			hide: function(callback) {
3385			  callback = $.isFunction(callback)
3386				? callback
3387				: function(){}
3388			  ;
3389			  if( module.is.active() && !module.is.animatingOutward() ) {
3390				module.debug('Hiding dropdown');
3391				if(settings.onHide.call(element) !== false) {
3392				  module.animate.hide(function() {
3393					module.remove.visible();
3394					callback.call(element);
3395				  });
3396				}
3397			  }
3398			},
3399	
3400			hideOthers: function() {
3401			  module.verbose('Finding other dropdowns to hide');
3402			  $allModules
3403				.not($module)
3404				  .has(selector.menu + '.' + className.visible)
3405					.dropdown('hide')
3406			  ;
3407			},
3408	
3409			hideMenu: function() {
3410			  module.verbose('Hiding menu  instantaneously');
3411			  module.remove.active();
3412			  module.remove.visible();
3413			  $menu.transition('hide');
3414			},
3415	
3416			hideSubMenus: function() {
3417			  var
3418				$subMenus = $menu.children(selector.item).find(selector.menu)
3419			  ;
3420			  module.verbose('Hiding sub menus', $subMenus);
3421			  $subMenus.transition('hide');
3422			},
3423	
3424			bind: {
3425			  events: function() {
3426				if(hasTouch) {
3427				  module.bind.touchEvents();
3428				}
3429				module.bind.keyboardEvents();
3430				module.bind.inputEvents();
3431				module.bind.mouseEvents();
3432			  },
3433			  touchEvents: function() {
3434				module.debug('Touch device detected binding additional touch events');
3435				if( module.is.searchSelection() ) {
3436				  // do nothing special yet
3437				}
3438				else if( module.is.single() ) {
3439				  $module
3440					.on('touchstart' + eventNamespace, module.event.test.toggle)
3441				  ;
3442				}
3443				$menu
3444				  .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
3445				;
3446			  },
3447			  keyboardEvents: function() {
3448				module.verbose('Binding keyboard events');
3449				$module
3450				  .on('keydown' + eventNamespace, module.event.keydown)
3451				;
3452				if( module.has.search() ) {
3453				  $module
3454					.on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)
3455				  ;
3456				}
3457				if( module.is.multiple() ) {
3458				  $document
3459					.on('keydown' + elementNamespace, module.event.document.keydown)
3460				  ;
3461				}
3462			  },
3463			  inputEvents: function() {
3464				module.verbose('Binding input change events');
3465				$module
3466				  .on('change' + eventNamespace, selector.input, module.event.change)
3467				;
3468			  },
3469			  mouseEvents: function() {
3470				module.verbose('Binding mouse events');
3471				if(module.is.multiple()) {
3472				  $module
3473					.on('click'   + eventNamespace, selector.label,  module.event.label.click)
3474					.on('click'   + eventNamespace, selector.remove, module.event.remove.click)
3475				  ;
3476				}
3477				if( module.is.searchSelection() ) {
3478				  $module
3479					.on('mousedown' + eventNamespace, module.event.mousedown)
3480					.on('mouseup'   + eventNamespace, module.event.mouseup)
3481					.on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)
3482					.on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)
3483					.on('click'     + eventNamespace, selector.icon,   module.event.icon.click)
3484					.on('focus'     + eventNamespace, selector.search, module.event.search.focus)
3485					.on('click'     + eventNamespace, selector.search, module.event.search.focus)
3486					.on('blur'      + eventNamespace, selector.search, module.event.search.blur)
3487					.on('click'     + eventNamespace, selector.text,   module.event.text.focus)
3488				  ;
3489				  if(module.is.multiple()) {
3490					$module
3491					  .on('click' + eventNamespace, module.event.click)
3492					;
3493				  }
3494				}
3495				else {
3496				  if(settings.on == 'click') {
3497					$module
3498					  .on('click' + eventNamespace, module.event.test.toggle)
3499					;
3500				  }
3501				  else if(settings.on == 'hover') {
3502					$module
3503					  .on('mouseenter' + eventNamespace, module.delay.show)
3504					  .on('mouseleave' + eventNamespace, module.delay.hide)
3505					;
3506				  }
3507				  else {
3508					$module
3509					  .on(settings.on + eventNamespace, module.toggle)
3510					;
3511				  }
3512				  $module
3513					.on('click' + eventNamespace, selector.icon, module.event.icon.click)
3514					.on('mousedown' + eventNamespace, module.event.mousedown)
3515					.on('mouseup'   + eventNamespace, module.event.mouseup)
3516					.on('focus'     + eventNamespace, module.event.focus)
3517				  ;
3518				  if(module.has.menuSearch() ) {
3519					$module
3520					  .on('blur' + eventNamespace, selector.search, module.event.search.blur)
3521					;
3522				  }
3523				  else {
3524					$module
3525					  .on('blur' + eventNamespace, module.event.blur)
3526					;
3527				  }
3528				}
3529				$menu
3530				  .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
3531				  .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
3532				  .on('click'      + eventNamespace, selector.item, module.event.item.click)
3533				;
3534			  },
3535			  intent: function() {
3536				module.verbose('Binding hide intent event to document');
3537				if(hasTouch) {
3538				  $document
3539					.on('touchstart' + elementNamespace, module.event.test.touch)
3540					.on('touchmove'  + elementNamespace, module.event.test.touch)
3541				  ;
3542				}
3543				$document
3544				  .on('click' + elementNamespace, module.event.test.hide)
3545				;
3546			  }
3547			},
3548	
3549			unbind: {
3550			  intent: function() {
3551				module.verbose('Removing hide intent event from document');
3552				if(hasTouch) {
3553				  $document
3554					.off('touchstart' + elementNamespace)
3555					.off('touchmove' + elementNamespace)
3556				  ;
3557				}
3558				$document
3559				  .off('click' + elementNamespace)
3560				;
3561			  }
3562			},
3563	
3564			filter: function(query) {
3565			  var
3566				searchTerm = (query !== undefined)
3567				  ? query
3568				  : module.get.query(),
3569				afterFiltered = function() {
3570				  if(module.is.multiple()) {
3571					module.filterActive();
3572				  }
3573				  if(query || (!query && module.get.activeItem().length == 0)) {
3574					module.select.firstUnfiltered();
3575				  }
3576				  if( module.has.allResultsFiltered() ) {
3577					if( settings.onNoResults.call(element, searchTerm) ) {
3578					  if(settings.allowAdditions) {
3579						if(settings.hideAdditions) {
3580						  module.verbose('User addition with no menu, setting empty style');
3581						  module.set.empty();
3582						  module.hideMenu();
3583						}
3584					  }
3585					  else {
3586						module.verbose('All items filtered, showing message', searchTerm);
3587						module.add.message(message.noResults);
3588					  }
3589					}
3590					else {
3591					  module.verbose('All items filtered, hiding dropdown', searchTerm);
3592					  module.hideMenu();
3593					}
3594				  }
3595				  else {
3596					module.remove.empty();
3597					module.remove.message();
3598				  }
3599				  if(settings.allowAdditions) {
3600					module.add.userSuggestion(query);
3601				  }
3602				  if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {
3603					module.show();
3604				  }
3605				}
3606			  ;
3607			  if(settings.useLabels && module.has.maxSelections()) {
3608				return;
3609			  }
3610			  if(settings.apiSettings) {
3611				if( module.can.useAPI() ) {
3612				  module.queryRemote(searchTerm, function() {
3613					if(settings.filterRemoteData) {
3614					  module.filterItems(searchTerm);
3615					}
3616					afterFiltered();
3617				  });
3618				}
3619				else {
3620				  module.error(error.noAPI);
3621				}
3622			  }
3623			  else {
3624				module.filterItems(searchTerm);
3625				afterFiltered();
3626			  }
3627			},
3628	
3629			queryRemote: function(query, callback) {
3630			  var
3631				apiSettings = {
3632				  errorDuration : false,
3633				  cache         : 'local',
3634				  throttle      : settings.throttle,
3635				  urlData       : {
3636					query: query
3637				  },
3638				  onError: function() {
3639					module.add.message(message.serverError);
3640					callback();
3641				  },
3642				  onFailure: function() {
3643					module.add.message(message.serverError);
3644					callback();
3645				  },
3646				  onSuccess : function(response) {
3647					var
3648					  values          = response[fields.remoteValues],
3649					  hasRemoteValues = ($.isArray(values) && values.length > 0)
3650					;
3651					if(hasRemoteValues) {
3652					  module.remove.message();
3653					  module.setup.menu({
3654						values: response[fields.remoteValues]
3655					  });
3656					}
3657					else {
3658					  module.add.message(message.noResults);
3659					}
3660					callback();
3661				  }
3662				}
3663			  ;
3664			  if( !$module.api('get request') ) {
3665				module.setup.api();
3666			  }
3667			  apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);
3668			  $module
3669				.api('setting', apiSettings)
3670				.api('query')
3671			  ;
3672			},
3673	
3674			filterItems: function(query) {
3675			  var
3676				searchTerm = (query !== undefined)
3677				  ? query
3678				  : module.get.query(),
3679				results          =  null,
3680				escapedTerm      = module.escape.string(searchTerm),
3681				beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')
3682			  ;
3683			  // avoid loop if we're matching nothing
3684			  if( module.has.query() ) {
3685				results = [];
3686	
3687				module.verbose('Searching for matching values', searchTerm);
3688				$item
3689				  .each(function(){
3690					var
3691					  $choice = $(this),
3692					  text,
3693					  value
3694					;
3695					if(settings.match == 'both' || settings.match == 'text') {
3696					  text = String(module.get.choiceText($choice, false));
3697					  if(text.search(beginsWithRegExp) !== -1) {
3698						results.push(this);
3699						return true;
3700					  }
3701					  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {
3702						results.push(this);
3703						return true;
3704					  }
3705					  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {
3706						results.push(this);
3707						return true;
3708					  }
3709					}
3710					if(settings.match == 'both' || settings.match == 'value') {
3711					  value = String(module.get.choiceValue($choice, text));
3712					  if(value.search(beginsWithRegExp) !== -1) {
3713						results.push(this);
3714						return true;
3715					  }
3716					  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {
3717						results.push(this);
3718						return true;
3719					  }
3720					  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {
3721						results.push(this);
3722						return true;
3723					  }
3724					}
3725				  })
3726				;
3727			  }
3728			  module.debug('Showing only matched items', searchTerm);
3729			  module.remove.filteredItem();
3730			  if(results) {
3731				$item
3732				  .not(results)
3733				  .addClass(className.filtered)
3734				;
3735			  }
3736			},
3737	
3738			fuzzySearch: function(query, term) {
3739			  var
3740				termLength  = term.length,
3741				queryLength = query.length
3742			  ;
3743			  query = query.toLowerCase();
3744			  term  = term.toLowerCase();
3745			  if(queryLength > termLength) {
3746				return false;
3747			  }
3748			  if(queryLength === termLength) {
3749				return (query === term);
3750			  }
3751			  search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {
3752				var
3753				  queryCharacter = query.charCodeAt(characterIndex)
3754				;
3755				while(nextCharacterIndex < termLength) {
3756				  if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {
3757					continue search;
3758				  }
3759				}
3760				return false;
3761			  }
3762			  return true;
3763			},
3764			exactSearch: function (query, term) {
3765			  query = query.toLowerCase();
3766			  term  = term.toLowerCase();
3767			  if(term.indexOf(query) > -1) {
3768				 return true;
3769			  }
3770			  return false;
3771			},
3772			filterActive: function() {
3773			  if(settings.useLabels) {
3774				$item.filter('.' + className.active)
3775				  .addClass(className.filtered)
3776				;
3777			  }
3778			},
3779	
3780			focusSearch: function(skipHandler) {
3781			  if( module.has.search() && !module.is.focusedOnSearch() ) {
3782				if(skipHandler) {
3783				  $module.off('focus' + eventNamespace, selector.search);
3784				  $search.focus();
3785				  $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);
3786				}
3787				else {
3788				  $search.focus();
3789				}
3790			  }
3791			},
3792	
3793			forceSelection: function() {
3794			  var
3795				$currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),
3796				$activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),
3797				$selectedItem      = ($currentlySelected.length > 0)
3798				  ? $currentlySelected
3799				  : $activeItem,
3800				hasSelected = ($selectedItem.length > 0)
3801			  ;
3802			  if(hasSelected && !module.is.multiple()) {
3803				module.debug('Forcing partial selection to selected item', $selectedItem);
3804				module.event.item.click.call($selectedItem, {}, true);
3805				return;
3806			  }
3807			  else {
3808				if(settings.allowAdditions) {
3809				  module.set.selected(module.get.query());
3810				  module.remove.searchTerm();
3811				}
3812				else {
3813				  module.remove.searchTerm();
3814				}
3815			  }
3816			},
3817	
3818			change: {
3819			  values: function(values) {
3820				if(!settings.allowAdditions) {
3821				  module.clear();
3822				}
3823				module.debug('Creating dropdown with specified values', values);
3824				module.setup.menu({values: values});
3825				$.each(values, function(index, item) {
3826				  if(item.selected == true) {
3827					module.debug('Setting initial selection to', item.value);
3828					module.set.selected(item.value);
3829					return true;
3830				  }
3831				});
3832			  }
3833			},
3834	
3835			event: {
3836			  change: function() {
3837				if(!internalChange) {
3838				  module.debug('Input changed, updating selection');
3839				  module.set.selected();
3840				}
3841			  },
3842			  focus: function() {
3843				if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {
3844				  module.show();
3845				}
3846			  },
3847			  blur: function(event) {
3848				pageLostFocus = (document.activeElement === this);
3849				if(!activated && !pageLostFocus) {
3850				  module.remove.activeLabel();
3851				  module.hide();
3852				}
3853			  },
3854			  mousedown: function() {
3855				if(module.is.searchSelection()) {
3856				  // prevent menu hiding on immediate re-focus
3857				  willRefocus = true;
3858				}
3859				else {
3860				  // prevents focus callback from occurring on mousedown
3861				  activated = true;
3862				}
3863			  },
3864			  mouseup: function() {
3865				if(module.is.searchSelection()) {
3866				  // prevent menu hiding on immediate re-focus
3867				  willRefocus = false;
3868				}
3869				else {
3870				  activated = false;
3871				}
3872			  },
3873			  click: function(event) {
3874				var
3875				  $target = $(event.target)
3876				;
3877				// focus search
3878				if($target.is($module)) {
3879				  if(!module.is.focusedOnSearch()) {
3880					module.focusSearch();
3881				  }
3882				  else {
3883					module.show();
3884				  }
3885				}
3886			  },
3887			  search: {
3888				focus: function() {
3889				  activated = true;
3890				  if(module.is.multiple()) {
3891					module.remove.activeLabel();
3892				  }
3893				  if(settings.showOnFocus) {
3894					module.search();
3895				  }
3896				},
3897				blur: function(event) {
3898				  pageLostFocus = (document.activeElement === this);
3899				  if(module.is.searchSelection() && !willRefocus) {
3900					if(!itemActivated && !pageLostFocus) {
3901					  if(settings.forceSelection) {
3902						module.forceSelection();
3903					  }
3904					  module.hide();
3905					}
3906				  }
3907				  willRefocus = false;
3908				}
3909			  },
3910			  icon: {
3911				click: function(event) {
3912				  if($icon.hasClass(className.clear)) {
3913					module.clear();
3914				  }
3915				  else if (module.can.click()) {
3916					module.toggle();
3917				  }
3918				}
3919			  },
3920			  text: {
3921				focus: function(event) {
3922				  activated = true;
3923				  module.focusSearch();
3924				}
3925			  },
3926			  input: function(event) {
3927				if(module.is.multiple() || module.is.searchSelection()) {
3928				  module.set.filtered();
3929				}
3930				clearTimeout(module.timer);
3931				module.timer = setTimeout(module.search, settings.delay.search);
3932			  },
3933			  label: {
3934				click: function(event) {
3935				  var
3936					$label        = $(this),
3937					$labels       = $module.find(selector.label),
3938					$activeLabels = $labels.filter('.' + className.active),
3939					$nextActive   = $label.nextAll('.' + className.active),
3940					$prevActive   = $label.prevAll('.' + className.active),
3941					$range = ($nextActive.length > 0)
3942					  ? $label.nextUntil($nextActive).add($activeLabels).add($label)
3943					  : $label.prevUntil($prevActive).add($activeLabels).add($label)
3944				  ;
3945				  if(event.shiftKey) {
3946					$activeLabels.removeClass(className.active);
3947					$range.addClass(className.active);
3948				  }
3949				  else if(event.ctrlKey) {
3950					$label.toggleClass(className.active);
3951				  }
3952				  else {
3953					$activeLabels.removeClass(className.active);
3954					$label.addClass(className.active);
3955				  }
3956				  settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));
3957				}
3958			  },
3959			  remove: {
3960				click: function() {
3961				  var
3962					$label = $(this).parent()
3963				  ;
3964				  if( $label.hasClass(className.active) ) {
3965					// remove all selected labels
3966					module.remove.activeLabels();
3967				  }
3968				  else {
3969					// remove this label only
3970					module.remove.activeLabels( $label );
3971				  }
3972				}
3973			  },
3974			  test: {
3975				toggle: function(event) {
3976				  var
3977					toggleBehavior = (module.is.multiple())
3978					  ? module.show
3979					  : module.toggle
3980				  ;
3981				  if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {
3982					return;
3983				  }
3984				  if( module.determine.eventOnElement(event, toggleBehavior) ) {
3985					event.preventDefault();
3986				  }
3987				},
3988				touch: function(event) {
3989				  module.determine.eventOnElement(event, function() {
3990					if(event.type == 'touchstart') {
3991					  module.timer = setTimeout(function() {
3992						module.hide();
3993					  }, settings.delay.touch);
3994					}
3995					else if(event.type == 'touchmove') {
3996					  clearTimeout(module.timer);
3997					}
3998				  });
3999				  event.stopPropagation();
4000				},
4001				hide: function(event) {
4002				  module.determine.eventInModule(event, module.hide);
4003				}
4004			  },
4005			  select: {
4006				mutation: function(mutations) {
4007				  module.debug('<select> modified, recreating menu');
4008				  var
4009					isSelectMutation = false
4010				  ;
4011				  $.each(mutations, function(index, mutation) {
4012					if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
4013					  isSelectMutation = true;
4014					  return true;
4015					}
4016				  });
4017				  if(isSelectMutation) {
4018					module.disconnect.selectObserver();
4019					module.refresh();
4020					module.setup.select();
4021					module.set.selected();
4022					module.observe.select();
4023				  }
4024				}
4025			  },
4026			  menu: {
4027				mutation: function(mutations) {
4028				  var
4029					mutation   = mutations[0],
4030					$addedNode = mutation.addedNodes
4031					  ? $(mutation.addedNodes[0])
4032					  : $(false),
4033					$removedNode = mutation.removedNodes
4034					  ? $(mutation.removedNodes[0])
4035					  : $(false),
4036					$changedNodes  = $addedNode.add($removedNode),
4037					isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,
4038					isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0
4039				  ;
4040				  if(isUserAddition || isMessage) {
4041					module.debug('Updating item selector cache');
4042					module.refreshItems();
4043				  }
4044				  else {
4045					module.debug('Menu modified, updating selector cache');
4046					module.refresh();
4047				  }
4048				},
4049				mousedown: function() {
4050				  itemActivated = true;
4051				},
4052				mouseup: function() {
4053				  itemActivated = false;
4054				}
4055			  },
4056			  item: {
4057				mouseenter: function(event) {
4058				  var
4059					$target        = $(event.target),
4060					$item          = $(this),
4061					$subMenu       = $item.children(selector.menu),
4062					$otherMenus    = $item.siblings(selector.item).children(selector.menu),
4063					hasSubMenu     = ($subMenu.length > 0),
4064					isBubbledEvent = ($subMenu.find($target).length > 0)
4065				  ;
4066				  if( !isBubbledEvent && hasSubMenu ) {
4067					clearTimeout(module.itemTimer);
4068					module.itemTimer = setTimeout(function() {
4069					  module.verbose('Showing sub-menu', $subMenu);
4070					  $.each($otherMenus, function() {
4071						module.animate.hide(false, $(this));
4072					  });
4073					  module.animate.show(false, $subMenu);
4074					}, settings.delay.show);
4075					event.preventDefault();
4076				  }
4077				},
4078				mouseleave: function(event) {
4079				  var
4080					$subMenu = $(this).children(selector.menu)
4081				  ;
4082				  if($subMenu.length > 0) {
4083					clearTimeout(module.itemTimer);
4084					module.itemTimer = setTimeout(function() {
4085					  module.verbose('Hiding sub-menu', $subMenu);
4086					  module.animate.hide(false, $subMenu);
4087					}, settings.delay.hide);
4088				  }
4089				},
4090				click: function (event, skipRefocus) {
4091				  var
4092					$choice        = $(this),
4093					$target        = (event)
4094					  ? $(event.target)
4095					  : $(''),
4096					$subMenu       = $choice.find(selector.menu),
4097					text           = module.get.choiceText($choice),
4098					value          = module.get.choiceValue($choice, text),
4099					hasSubMenu     = ($subMenu.length > 0),
4100					isBubbledEvent = ($subMenu.find($target).length > 0)
4101				  ;
4102				  // prevents IE11 bug where menu receives focus even though `tabindex=-1`
4103				  if(module.has.menuSearch()) {
4104					$(document.activeElement).blur();
4105				  }
4106				  if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {
4107					if(module.is.searchSelection()) {
4108					  if(settings.allowAdditions) {
4109						module.remove.userAddition();
4110					  }
4111					  module.remove.searchTerm();
4112					  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {
4113						module.focusSearch(true);
4114					  }
4115					}
4116					if(!settings.useLabels) {
4117					  module.remove.filteredItem();
4118					  module.set.scrollPosition($choice);
4119					}
4120					module.determine.selectAction.call(this, text, value);
4121				  }
4122				}
4123			  },
4124	
4125			  document: {
4126				// label selection should occur even when element has no focus
4127				keydown: function(event) {
4128				  var
4129					pressedKey    = event.which,
4130					isShortcutKey = module.is.inObject(pressedKey, keys)
4131				  ;
4132				  if(isShortcutKey) {
4133					var
4134					  $label            = $module.find(selector.label),
4135					  $activeLabel      = $label.filter('.' + className.active),
4136					  activeValue       = $activeLabel.data(metadata.value),
4137					  labelIndex        = $label.index($activeLabel),
4138					  labelCount        = $label.length,
4139					  hasActiveLabel    = ($activeLabel.length > 0),
4140					  hasMultipleActive = ($activeLabel.length > 1),
4141					  isFirstLabel      = (labelIndex === 0),
4142					  isLastLabel       = (labelIndex + 1 == labelCount),
4143					  isSearch          = module.is.searchSelection(),
4144					  isFocusedOnSearch = module.is.focusedOnSearch(),
4145					  isFocused         = module.is.focused(),
4146					  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),
4147					  $nextLabel
4148					;
4149					if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {
4150					  return;
4151					}
4152	
4153					if(pressedKey == keys.leftArrow) {
4154					  // activate previous label
4155					  if((isFocused || caretAtStart) && !hasActiveLabel) {
4156						module.verbose('Selecting previous label');
4157						$label.last().addClass(className.active);
4158					  }
4159					  else if(hasActiveLabel) {
4160						if(!event.shiftKey) {
4161						  module.verbose('Selecting previous label');
4162						  $label.removeClass(className.active);
4163						}
4164						else {
4165						  module.verbose('Adding previous label to selection');
4166						}
4167						if(isFirstLabel && !hasMultipleActive) {
4168						  $activeLabel.addClass(className.active);
4169						}
4170						else {
4171						  $activeLabel.prev(selector.siblingLabel)
4172							.addClass(className.active)
4173							.end()
4174						  ;
4175						}
4176						event.preventDefault();
4177					  }
4178					}
4179					else if(pressedKey == keys.rightArrow) {
4180					  // activate first label
4181					  if(isFocused && !hasActiveLabel) {
4182						$label.first().addClass(className.active);
4183					  }
4184					  // activate next label
4185					  if(hasActiveLabel) {
4186						if(!event.shiftKey) {
4187						  module.verbose('Selecting next label');
4188						  $label.removeClass(className.active);
4189						}
4190						else {
4191						  module.verbose('Adding next label to selection');
4192						}
4193						if(isLastLabel) {
4194						  if(isSearch) {
4195							if(!isFocusedOnSearch) {
4196							  module.focusSearch();
4197							}
4198							else {
4199							  $label.removeClass(className.active);
4200							}
4201						  }
4202						  else if(hasMultipleActive) {
4203							$activeLabel.next(selector.siblingLabel).addClass(className.active);
4204						  }
4205						  else {
4206							$activeLabel.addClass(className.active);
4207						  }
4208						}
4209						else {
4210						  $activeLabel.next(selector.siblingLabel).addClass(className.active);
4211						}
4212						event.preventDefault();
4213					  }
4214					}
4215					else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {
4216					  if(hasActiveLabel) {
4217						module.verbose('Removing active labels');
4218						if(isLastLabel) {
4219						  if(isSearch && !isFocusedOnSearch) {
4220							module.focusSearch();
4221						  }
4222						}
4223						$activeLabel.last().next(selector.siblingLabel).addClass(className.active);
4224						module.remove.activeLabels($activeLabel);
4225						event.preventDefault();
4226					  }
4227					  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {
4228						module.verbose('Removing last label on input backspace');
4229						$activeLabel = $label.last().addClass(className.active);
4230						module.remove.activeLabels($activeLabel);
4231					  }
4232					}
4233					else {
4234					  $activeLabel.removeClass(className.active);
4235					}
4236				  }
4237				}
4238			  },
4239	
4240			  keydown: function(event) {
4241				var
4242				  pressedKey    = event.which,
4243				  isShortcutKey = module.is.inObject(pressedKey, keys)
4244				;
4245				if(isShortcutKey) {
4246				  var
4247					$currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),
4248					$activeItem        = $menu.children('.' + className.active).eq(0),
4249					$selectedItem      = ($currentlySelected.length > 0)
4250					  ? $currentlySelected
4251					  : $activeItem,
4252					$visibleItems = ($selectedItem.length > 0)
4253					  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()
4254					  : $menu.children(':not(.' + className.filtered +')'),
4255					$subMenu              = $selectedItem.children(selector.menu),
4256					$parentMenu           = $selectedItem.closest(selector.menu),
4257					inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),
4258					hasSubMenu            = ($subMenu.length> 0),
4259					hasSelectedItem       = ($selectedItem.length > 0),
4260					selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),
4261					delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),
4262					isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
4263					$nextItem,
4264					isSubMenuItem,
4265					newIndex
4266				  ;
4267				  // allow selection with menu closed
4268				  if(isAdditionWithoutMenu) {
4269					module.verbose('Selecting item from keyboard shortcut', $selectedItem);
4270					module.event.item.click.call($selectedItem, event);
4271					if(module.is.searchSelection()) {
4272					  module.remove.searchTerm();
4273					}
4274				  }
4275	
4276				  // visible menu keyboard shortcuts
4277				  if( module.is.visible() ) {
4278	
4279					// enter (select or open sub-menu)
4280					if(pressedKey == keys.enter || delimiterPressed) {
4281					  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {
4282						module.verbose('Pressed enter on unselectable category, opening sub menu');
4283						pressedKey = keys.rightArrow;
4284					  }
4285					  else if(selectedIsSelectable) {
4286						module.verbose('Selecting item from keyboard shortcut', $selectedItem);
4287						module.event.item.click.call($selectedItem, event);
4288						if(module.is.searchSelection()) {
4289						  module.remove.searchTerm();
4290						}
4291					  }
4292					  event.preventDefault();
4293					}
4294	
4295					// sub-menu actions
4296					if(hasSelectedItem) {
4297	
4298					  if(pressedKey == keys.leftArrow) {
4299	
4300						isSubMenuItem = ($parentMenu[0] !== $menu[0]);
4301	
4302						if(isSubMenuItem) {
4303						  module.verbose('Left key pressed, closing sub-menu');
4304						  module.animate.hide(false, $parentMenu);
4305						  $selectedItem
4306							.removeClass(className.selected)
4307						  ;
4308						  $parentMenu
4309							.closest(selector.item)
4310							  .addClass(className.selected)
4311						  ;
4312						  event.preventDefault();
4313						}
4314					  }
4315	
4316					  // right arrow (show sub-menu)
4317					  if(pressedKey == keys.rightArrow) {
4318						if(hasSubMenu) {
4319						  module.verbose('Right key pressed, opening sub-menu');
4320						  module.animate.show(false, $subMenu);
4321						  $selectedItem
4322							.removeClass(className.selected)
4323						  ;
4324						  $subMenu
4325							.find(selector.item).eq(0)
4326							  .addClass(className.selected)
4327						  ;
4328						  event.preventDefault();
4329						}
4330					  }
4331					}
4332	
4333					// up arrow (traverse menu up)
4334					if(pressedKey == keys.upArrow) {
4335					  $nextItem = (hasSelectedItem && inVisibleMenu)
4336						? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)
4337						: $item.eq(0)
4338					  ;
4339					  if($visibleItems.index( $nextItem ) < 0) {
4340						module.verbose('Up key pressed but reached top of current menu');
4341						event.preventDefault();
4342						return;
4343					  }
4344					  else {
4345						module.verbose('Up key pressed, changing active item');
4346						$selectedItem
4347						  .removeClass(className.selected)
4348						;
4349						$nextItem
4350						  .addClass(className.selected)
4351						;
4352						module.set.scrollPosition($nextItem);
4353						if(settings.selectOnKeydown && module.is.single()) {
4354						  module.set.selectedItem($nextItem);
4355						}
4356					  }
4357					  event.preventDefault();
4358					}
4359	
4360					// down arrow (traverse menu down)
4361					if(pressedKey == keys.downArrow) {
4362					  $nextItem = (hasSelectedItem && inVisibleMenu)
4363						? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)
4364						: $item.eq(0)
4365					  ;
4366					  if($nextItem.length === 0) {
4367						module.verbose('Down key pressed but reached bottom of current menu');
4368						event.preventDefault();
4369						return;
4370					  }
4371					  else {
4372						module.verbose('Down key pressed, changing active item');
4373						$item
4374						  .removeClass(className.selected)
4375						;
4376						$nextItem
4377						  .addClass(className.selected)
4378						;
4379						module.set.scrollPosition($nextItem);
4380						if(settings.selectOnKeydown && module.is.single()) {
4381						  module.set.selectedItem($nextItem);
4382						}
4383					  }
4384					  event.preventDefault();
4385					}
4386	
4387					// page down (show next page)
4388					if(pressedKey == keys.pageUp) {
4389					  module.scrollPage('up');
4390					  event.preventDefault();
4391					}
4392					if(pressedKey == keys.pageDown) {
4393					  module.scrollPage('down');
4394					  event.preventDefault();
4395					}
4396	
4397					// escape (close menu)
4398					if(pressedKey == keys.escape) {
4399					  module.verbose('Escape key pressed, closing dropdown');
4400					  module.hide();
4401					}
4402	
4403				  }
4404				  else {
4405					// delimiter key
4406					if(delimiterPressed) {
4407					  event.preventDefault();
4408					}
4409					// down arrow (open menu)
4410					if(pressedKey == keys.downArrow && !module.is.visible()) {
4411					  module.verbose('Down key pressed, showing dropdown');
4412					  module.show();
4413					  event.preventDefault();
4414					}
4415				  }
4416				}
4417				else {
4418				  if( !module.has.search() ) {
4419					module.set.selectedLetter( String.fromCharCode(pressedKey) );
4420				  }
4421				}
4422			  }
4423			},
4424	
4425			trigger: {
4426			  change: function() {
4427				var
4428				  events       = document.createEvent('HTMLEvents'),
4429				  inputElement = $input[0]
4430				;
4431				if(inputElement) {
4432				  module.verbose('Triggering native change event');
4433				  events.initEvent('change', true, false);
4434				  inputElement.dispatchEvent(events);
4435				}
4436			  }
4437			},
4438	
4439			determine: {
4440			  selectAction: function(text, value) {
4441				module.verbose('Determining action', settings.action);
4442				if( $.isFunction( module.action[settings.action] ) ) {
4443				  module.verbose('Triggering preset action', settings.action, text, value);
4444				  module.action[ settings.action ].call(element, text, value, this);
4445				}
4446				else if( $.isFunction(settings.action) ) {
4447				  module.verbose('Triggering user action', settings.action, text, value);
4448				  settings.action.call(element, text, value, this);
4449				}
4450				else {
4451				  module.error(error.action, settings.action);
4452				}
4453			  },
4454			  eventInModule: function(event, callback) {
4455				var
4456				  $target    = $(event.target),
4457				  inDocument = ($target.closest(document.documentElement).length > 0),
4458				  inModule   = ($target.closest($module).length > 0)
4459				;
4460				callback = $.isFunction(callback)
4461				  ? callback
4462				  : function(){}
4463				;
4464				if(inDocument && !inModule) {
4465				  module.verbose('Triggering event', callback);
4466				  callback();
4467				  return true;
4468				}
4469				else {
4470				  module.verbose('Event occurred in dropdown, canceling callback');
4471				  return false;
4472				}
4473			  },
4474			  eventOnElement: function(event, callback) {
4475				var
4476				  $target      = $(event.target),
4477				  $label       = $target.closest(selector.siblingLabel),
4478				  inVisibleDOM = document.body.contains(event.target),
4479				  notOnLabel   = ($module.find($label).length === 0),
4480				  notInMenu    = ($target.closest($menu).length === 0)
4481				;
4482				callback = $.isFunction(callback)
4483				  ? callback
4484				  : function(){}
4485				;
4486				if(inVisibleDOM && notOnLabel && notInMenu) {
4487				  module.verbose('Triggering event', callback);
4488				  callback();
4489				  return true;
4490				}
4491				else {
4492				  module.verbose('Event occurred in dropdown menu, canceling callback');
4493				  return false;
4494				}
4495			  }
4496			},
4497	
4498			action: {
4499	
4500			  nothing: function() {},
4501	
4502			  activate: function(text, value, element) {
4503				value = (value !== undefined)
4504				  ? value
4505				  : text
4506				;
4507				if( module.can.activate( $(element) ) ) {
4508				  module.set.selected(value, $(element));
4509				  if(module.is.multiple() && !module.is.allFiltered()) {
4510					return;
4511				  }
4512				  else {
4513					module.hideAndClear();
4514				  }
4515				}
4516			  },
4517	
4518			  select: function(text, value, element) {
4519				value = (value !== undefined)
4520				  ? value
4521				  : text
4522				;
4523				if( module.can.activate( $(element) ) ) {
4524				  module.set.value(value, text, $(element));
4525				  if(module.is.multiple() && !module.is.allFiltered()) {
4526					return;
4527				  }
4528				  else {
4529					module.hideAndClear();
4530				  }
4531				}
4532			  },
4533	
4534			  combo: function(text, value, element) {
4535				value = (value !== undefined)
4536				  ? value
4537				  : text
4538				;
4539				module.set.selected(value, $(element));
4540				module.hideAndClear();
4541			  },
4542	
4543			  hide: function(text, value, element) {
4544				module.set.value(value, text, $(element));
4545				module.hideAndClear();
4546			  }
4547	
4548			},
4549	
4550			get: {
4551			  id: function() {
4552				return id;
4553			  },
4554			  defaultText: function() {
4555				return $module.data(metadata.defaultText);
4556			  },
4557			  defaultValue: function() {
4558				return $module.data(metadata.defaultValue);
4559			  },
4560			  placeholderText: function() {
4561				if(settings.placeholder != 'auto' && typeof settings.placeholder == 'string') {
4562				  return settings.placeholder;
4563				}
4564				return $module.data(metadata.placeholderText) || '';
4565			  },
4566			  text: function() {
4567				return $text.text();
4568			  },
4569			  query: function() {
4570				return $.trim($search.val());
4571			  },
4572			  searchWidth: function(value) {
4573				value = (value !== undefined)
4574				  ? value
4575				  : $search.val()
4576				;
4577				$sizer.text(value);
4578				// prevent rounding issues
4579				return Math.ceil( $sizer.width() + 1);
4580			  },
4581			  selectionCount: function() {
4582				var
4583				  values = module.get.values(),
4584				  count
4585				;
4586				count = ( module.is.multiple() )
4587				  ? $.isArray(values)
4588					? values.length
4589					: 0
4590				  : (module.get.value() !== '')
4591					? 1
4592					: 0
4593				;
4594				return count;
4595			  },
4596			  transition: function($subMenu) {
4597				return (settings.transition == 'auto')
4598				  ? module.is.upward($subMenu)
4599					? 'slide up'
4600					: 'slide down'
4601				  : settings.transition
4602				;
4603			  },
4604			  userValues: function() {
4605				var
4606				  values = module.get.values()
4607				;
4608				if(!values) {
4609				  return false;
4610				}
4611				values = $.isArray(values)
4612				  ? values
4613				  : [values]
4614				;
4615				return $.grep(values, function(value) {
4616				  return (module.get.item(value) === false);
4617				});
4618			  },
4619			  uniqueArray: function(array) {
4620				return $.grep(array, function (value, index) {
4621					return $.inArray(value, array) === index;
4622				});
4623			  },
4624			  caretPosition: function() {
4625				var
4626				  input = $search.get(0),
4627				  range,
4628				  rangeLength
4629				;
4630				if('selectionStart' in input) {
4631				  return input.selectionStart;
4632				}
4633				else if (document.selection) {
4634				  input.focus();
4635				  range       = document.selection.createRange();
4636				  rangeLength = range.text.length;
4637				  range.moveStart('character', -input.value.length);
4638				  return range.text.length - rangeLength;
4639				}
4640			  },
4641			  value: function() {
4642				var
4643				  value = ($input.length > 0)
4644					? $input.val()
4645					: $module.data(metadata.value),
4646				  isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')
4647				;
4648				// prevents placeholder element from being selected when multiple
4649				return (value === undefined || isEmptyMultiselect)
4650				  ? ''
4651				  : value
4652				;
4653			  },
4654			  values: function() {
4655				var
4656				  value = module.get.value()
4657				;
4658				if(value === '') {
4659				  return '';
4660				}
4661				return ( !module.has.selectInput() && module.is.multiple() )
4662				  ? (typeof value == 'string') // delimited string
4663					? value.split(settings.delimiter)
4664					: ''
4665				  : value
4666				;
4667			  },
4668			  remoteValues: function() {
4669				var
4670				  values = module.get.values(),
4671				  remoteValues = false
4672				;
4673				if(values) {
4674				  if(typeof values == 'string') {
4675					values = [values];
4676				  }
4677				  $.each(values, function(index, value) {
4678					var
4679					  name = module.read.remoteData(value)
4680					;
4681					module.verbose('Restoring value from session data', name, value);
4682					if(name) {
4683					  if(!remoteValues) {
4684						remoteValues = {};
4685					  }
4686					  remoteValues[value] = name;
4687					}
4688				  });
4689				}
4690				return remoteValues;
4691			  },
4692			  choiceText: function($choice, preserveHTML) {
4693				preserveHTML = (preserveHTML !== undefined)
4694				  ? preserveHTML
4695				  : settings.preserveHTML
4696				;
4697				if($choice) {
4698				  if($choice.find(selector.menu).length > 0) {
4699					module.verbose('Retrieving text of element with sub-menu');
4700					$choice = $choice.clone();
4701					$choice.find(selector.menu).remove();
4702					$choice.find(selector.menuIcon).remove();
4703				  }
4704				  return ($choice.data(metadata.text) !== undefined)
4705					? $choice.data(metadata.text)
4706					: (preserveHTML)
4707					  ? $.trim($choice.html())
4708					  : $.trim($choice.text())
4709				  ;
4710				}
4711			  },
4712			  choiceValue: function($choice, choiceText) {
4713				choiceText = choiceText || module.get.choiceText($choice);
4714				if(!$choice) {
4715				  return false;
4716				}
4717				return ($choice.data(metadata.value) !== undefined)
4718				  ? String( $choice.data(metadata.value) )
4719				  : (typeof choiceText === 'string')
4720					? $.trim(choiceText.toLowerCase())
4721					: String(choiceText)
4722				;
4723			  },
4724			  inputEvent: function() {
4725				var
4726				  input = $search[0]
4727				;
4728				if(input) {
4729				  return (input.oninput !== undefined)
4730					? 'input'
4731					: (input.onpropertychange !== undefined)
4732					  ? 'propertychange'
4733					  : 'keyup'
4734				  ;
4735				}
4736				return false;
4737			  },
4738			  selectValues: function() {
4739				var
4740				  select = {}
4741				;
4742				select.values = [];
4743				$module
4744				  .find('option')
4745					.each(function() {
4746					  var
4747						$option  = $(this),
4748						name     = $option.html(),
4749						disabled = $option.attr('disabled'),
4750						value    = ( $option.attr('value') !== undefined )
4751						  ? $option.attr('value')
4752						  : name
4753					  ;
4754					  if(settings.placeholder === 'auto' && value === '') {
4755						select.placeholder = name;
4756					  }
4757					  else {
4758						select.values.push({
4759						  name     : name,
4760						  value    : value,
4761						  disabled : disabled
4762						});
4763					  }
4764					})
4765				;
4766				if(settings.placeholder && settings.placeholder !== 'auto') {
4767				  module.debug('Setting placeholder value to', settings.placeholder);
4768				  select.placeholder = settings.placeholder;
4769				}
4770				if(settings.sortSelect) {
4771				  select.values.sort(function(a, b) {
4772					return (a.name > b.name)
4773					  ? 1
4774					  : -1
4775					;
4776				  });
4777				  module.debug('Retrieved and sorted values from select', select);
4778				}
4779				else {
4780				  module.debug('Retrieved values from select', select);
4781				}
4782				return select;
4783			  },
4784			  activeItem: function() {
4785				return $item.filter('.'  + className.active);
4786			  },
4787			  selectedItem: function() {
4788				var
4789				  $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)
4790				;
4791				return ($selectedItem.length > 0)
4792				  ? $selectedItem
4793				  : $item.eq(0)
4794				;
4795			  },
4796			  itemWithAdditions: function(value) {
4797				var
4798				  $items       = module.get.item(value),
4799				  $userItems   = module.create.userChoice(value),
4800				  hasUserItems = ($userItems && $userItems.length > 0)
4801				;
4802				if(hasUserItems) {
4803				  $items = ($items.length > 0)
4804					? $items.add($userItems)
4805					: $userItems
4806				  ;
4807				}
4808				return $items;
4809			  },
4810			  item: function(value, strict) {
4811				var
4812				  $selectedItem = false,
4813				  shouldSearch,
4814				  isMultiple
4815				;
4816				value = (value !== undefined)
4817				  ? value
4818				  : ( module.get.values() !== undefined)
4819					? module.get.values()
4820					: module.get.text()
4821				;
4822				shouldSearch = (isMultiple)
4823				  ? (value.length > 0)
4824				  : (value !== undefined && value !== null)
4825				;
4826				isMultiple = (module.is.multiple() && $.isArray(value));
4827				strict     = (value === '' || value === 0)
4828				  ? true
4829				  : strict || false
4830				;
4831				if(shouldSearch) {
4832				  $item
4833					.each(function() {
4834					  var
4835						$choice       = $(this),
4836						optionText    = module.get.choiceText($choice),
4837						optionValue   = module.get.choiceValue($choice, optionText)
4838					  ;
4839					  // safe early exit
4840					  if(optionValue === null || optionValue === undefined) {
4841						return;
4842					  }
4843					  if(isMultiple) {
4844						if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {
4845						  $selectedItem = ($selectedItem)
4846							? $selectedItem.add($choice)
4847							: $choice
4848						  ;
4849						}
4850					  }
4851					  else if(strict) {
4852						module.verbose('Ambiguous dropdown value using strict type check', $choice, value);
4853						if( optionValue === value || optionText === value) {
4854						  $selectedItem = $choice;
4855						  return true;
4856						}
4857					  }
4858					  else {
4859						if( String(optionValue) == String(value) || optionText == value) {
4860						  module.verbose('Found select item by value', optionValue, value);
4861						  $selectedItem = $choice;
4862						  return true;
4863						}
4864					  }
4865					})
4866				  ;
4867				}
4868				return $selectedItem;
4869			  }
4870			},
4871	
4872			check: {
4873			  maxSelections: function(selectionCount) {
4874				if(settings.maxSelections) {
4875				  selectionCount = (selectionCount !== undefined)
4876					? selectionCount
4877					: module.get.selectionCount()
4878				  ;
4879				  if(selectionCount >= settings.maxSelections) {
4880					module.debug('Maximum selection count reached');
4881					if(settings.useLabels) {
4882					  $item.addClass(className.filtered);
4883					  module.add.message(message.maxSelections);
4884					}
4885					return true;
4886				  }
4887				  else {
4888					module.verbose('No longer at maximum selection count');
4889					module.remove.message();
4890					module.remove.filteredItem();
4891					if(module.is.searchSelection()) {
4892					  module.filterItems();
4893					}
4894					return false;
4895				  }
4896				}
4897				return true;
4898			  }
4899			},
4900	
4901			restore: {
4902			  defaults: function() {
4903				module.clear();
4904				module.restore.defaultText();
4905				module.restore.defaultValue();
4906			  },
4907			  defaultText: function() {
4908				var
4909				  defaultText     = module.get.defaultText(),
4910				  placeholderText = module.get.placeholderText
4911				;
4912				if(defaultText === placeholderText) {
4913				  module.debug('Restoring default placeholder text', defaultText);
4914				  module.set.placeholderText(defaultText);
4915				}
4916				else {
4917				  module.debug('Restoring default text', defaultText);
4918				  module.set.text(defaultText);
4919				}
4920			  },
4921			  placeholderText: function() {
4922				module.set.placeholderText();
4923			  },
4924			  defaultValue: function() {
4925				var
4926				  defaultValue = module.get.defaultValue()
4927				;
4928				if(defaultValue !== undefined) {
4929				  module.debug('Restoring default value', defaultValue);
4930				  if(defaultValue !== '') {
4931					module.set.value(defaultValue);
4932					module.set.selected();
4933				  }
4934				  else {
4935					module.remove.activeItem();
4936					module.remove.selectedItem();
4937				  }
4938				}
4939			  },
4940			  labels: function() {
4941				if(settings.allowAdditions) {
4942				  if(!settings.useLabels) {
4943					module.error(error.labels);
4944					settings.useLabels = true;
4945				  }
4946				  module.debug('Restoring selected values');
4947				  module.create.userLabels();
4948				}
4949				module.check.maxSelections();
4950			  },
4951			  selected: function() {
4952				module.restore.values();
4953				if(module.is.multiple()) {
4954				  module.debug('Restoring previously selected values and labels');
4955				  module.restore.labels();
4956				}
4957				else {
4958				  module.debug('Restoring previously selected values');
4959				}
4960			  },
4961			  values: function() {
4962				// prevents callbacks from occurring on initial load
4963				module.set.initialLoad();
4964				if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {
4965				  module.restore.remoteValues();
4966				}
4967				else {
4968				  module.set.selected();
4969				}
4970				module.remove.initialLoad();
4971			  },
4972			  remoteValues: function() {
4973				var
4974				  values = module.get.remoteValues()
4975				;
4976				module.debug('Recreating selected from session data', values);
4977				if(values) {
4978				  if( module.is.single() ) {
4979					$.each(values, function(value, name) {
4980					  module.set.text(name);
4981					});
4982				  }
4983				  else {
4984					$.each(values, function(value, name) {
4985					  module.add.label(value, name);
4986					});
4987				  }
4988				}
4989			  }
4990			},
4991	
4992			read: {
4993			  remoteData: function(value) {
4994				var
4995				  name
4996				;
4997				if(window.Storage === undefined) {
4998				  module.error(error.noStorage);
4999				  return;
5000				}
5001				name = sessionStorage.getItem(value);
5002				return (name !== undefined)
5003				  ? name
5004				  : false
5005				;
5006			  }
5007			},
5008	
5009			save: {
5010			  defaults: function() {
5011				module.save.defaultText();
5012				module.save.placeholderText();
5013				module.save.defaultValue();
5014			  },
5015			  defaultValue: function() {
5016				var
5017				  value = module.get.value()
5018				;
5019				module.verbose('Saving default value as', value);
5020				$module.data(metadata.defaultValue, value);
5021			  },
5022			  defaultText: function() {
5023				var
5024				  text = module.get.text()
5025				;
5026				module.verbose('Saving default text as', text);
5027				$module.data(metadata.defaultText, text);
5028			  },
5029			  placeholderText: function() {
5030				var
5031				  text
5032				;
5033				if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {
5034				  text = module.get.text();
5035				  module.verbose('Saving placeholder text as', text);
5036				  $module.data(metadata.placeholderText, text);
5037				}
5038			  },
5039			  remoteData: function(name, value) {
5040				if(window.Storage === undefined) {
5041				  module.error(error.noStorage);
5042				  return;
5043				}
5044				module.verbose('Saving remote data to session storage', value, name);
5045				sessionStorage.setItem(value, name);
5046			  }
5047			},
5048	
5049			clear: function() {
5050			  if(module.is.multiple() && settings.useLabels) {
5051				module.remove.labels();
5052			  }
5053			  else {
5054				module.remove.activeItem();
5055				module.remove.selectedItem();
5056			  }
5057			  module.set.placeholderText();
5058			  module.clearValue();
5059			},
5060	
5061			clearValue: function() {
5062			  module.set.value('');
5063			},
5064	
5065			scrollPage: function(direction, $selectedItem) {
5066			  var
5067				$currentItem  = $selectedItem || module.get.selectedItem(),
5068				$menu         = $currentItem.closest(selector.menu),
5069				menuHeight    = $menu.outerHeight(),
5070				currentScroll = $menu.scrollTop(),
5071				itemHeight    = $item.eq(0).outerHeight(),
5072				itemsPerPage  = Math.floor(menuHeight / itemHeight),
5073				maxScroll     = $menu.prop('scrollHeight'),
5074				newScroll     = (direction == 'up')
5075				  ? currentScroll - (itemHeight * itemsPerPage)
5076				  : currentScroll + (itemHeight * itemsPerPage),
5077				$selectableItem = $item.not(selector.unselectable),
5078				isWithinRange,
5079				$nextSelectedItem,
5080				elementIndex
5081			  ;
5082			  elementIndex      = (direction == 'up')
5083				? $selectableItem.index($currentItem) - itemsPerPage
5084				: $selectableItem.index($currentItem) + itemsPerPage
5085			  ;
5086			  isWithinRange = (direction == 'up')
5087				? (elementIndex >= 0)
5088				: (elementIndex < $selectableItem.length)
5089			  ;
5090			  $nextSelectedItem = (isWithinRange)
5091				? $selectableItem.eq(elementIndex)
5092				: (direction == 'up')
5093				  ? $selectableItem.first()
5094				  : $selectableItem.last()
5095			  ;
5096			  if($nextSelectedItem.length > 0) {
5097				module.debug('Scrolling page', direction, $nextSelectedItem);
5098				$currentItem
5099				  .removeClass(className.selected)
5100				;
5101				$nextSelectedItem
5102				  .addClass(className.selected)
5103				;
5104				if(settings.selectOnKeydown && module.is.single()) {
5105				  module.set.selectedItem($nextSelectedItem);
5106				}
5107				$menu
5108				  .scrollTop(newScroll)
5109				;
5110			  }
5111			},
5112	
5113			set: {
5114			  filtered: function() {
5115				var
5116				  isMultiple       = module.is.multiple(),
5117				  isSearch         = module.is.searchSelection(),
5118				  isSearchMultiple = (isMultiple && isSearch),
5119				  searchValue      = (isSearch)
5120					? module.get.query()
5121					: '',
5122				  hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),
5123				  searchWidth      = module.get.searchWidth(),
5124				  valueIsSet       = searchValue !== ''
5125				;
5126				if(isMultiple && hasSearchValue) {
5127				  module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);
5128				  $search.css('width', searchWidth);
5129				}
5130				if(hasSearchValue || (isSearchMultiple && valueIsSet)) {
5131				  module.verbose('Hiding placeholder text');
5132				  $text.addClass(className.filtered);
5133				}
5134				else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {
5135				  module.verbose('Showing placeholder text');
5136				  $text.removeClass(className.filtered);
5137				}
5138			  },
5139			  empty: function() {
5140				$module.addClass(className.empty);
5141			  },
5142			  loading: function() {
5143				$module.addClass(className.loading);
5144			  },
5145			  placeholderText: function(text) {
5146				text = text || module.get.placeholderText();
5147				module.debug('Setting placeholder text', text);
5148				module.set.text(text);
5149				$text.addClass(className.placeholder);
5150			  },
5151			  tabbable: function() {
5152				if( module.is.searchSelection() ) {
5153				  module.debug('Added tabindex to searchable dropdown');
5154				  $search
5155					.val('')
5156					.attr('tabindex', 0)
5157				  ;
5158				  $menu
5159					.attr('tabindex', -1)
5160				  ;
5161				}
5162				else {
5163				  module.debug('Added tabindex to dropdown');
5164				  if( $module.attr('tabindex') === undefined) {
5165					$module
5166					  .attr('tabindex', 0)
5167					;
5168					$menu
5169					  .attr('tabindex', -1)
5170					;
5171				  }
5172				}
5173			  },
5174			  initialLoad: function() {
5175				module.verbose('Setting initial load');
5176				initialLoad = true;
5177			  },
5178			  activeItem: function($item) {
5179				if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {
5180				  $item.addClass(className.filtered);
5181				}
5182				else {
5183				  $item.addClass(className.active);
5184				}
5185			  },
5186			  partialSearch: function(text) {
5187				var
5188				  length = module.get.query().length
5189				;
5190				$search.val( text.substr(0, length));
5191			  },
5192			  scrollPosition: function($item, forceScroll) {
5193				var
5194				  edgeTolerance = 5,
5195				  $menu,
5196				  hasActive,
5197				  offset,
5198				  itemHeight,
5199				  itemOffset,
5200				  menuOffset,
5201				  menuScroll,
5202				  menuHeight,
5203				  abovePage,
5204				  belowPage
5205				;
5206	
5207				$item       = $item || module.get.selectedItem();
5208				$menu       = $item.closest(selector.menu);
5209				hasActive   = ($item && $item.length > 0);
5210				forceScroll = (forceScroll !== undefined)
5211				  ? forceScroll
5212				  : false
5213				;
5214				if($item && $menu.length > 0 && hasActive) {
5215				  itemOffset = $item.position().top;
5216	
5217				  $menu.addClass(className.loading);
5218				  menuScroll = $menu.scrollTop();
5219				  menuOffset = $menu.offset().top;
5220				  itemOffset = $item.offset().top;
5221				  offset     = menuScroll - menuOffset + itemOffset;
5222				  if(!forceScroll) {
5223					menuHeight = $menu.height();
5224					belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);
5225					abovePage  = ((offset - edgeTolerance) < menuScroll);
5226				  }
5227				  module.debug('Scrolling to active item', offset);
5228				  if(forceScroll || abovePage || belowPage) {
5229					$menu.scrollTop(offset);
5230				  }
5231				  $menu.removeClass(className.loading);
5232				}
5233			  },
5234			  text: function(text) {
5235				if(settings.action !== 'select') {
5236				  if(settings.action == 'combo') {
5237					module.debug('Changing combo button text', text, $combo);
5238					if(settings.preserveHTML) {
5239					  $combo.html(text);
5240					}
5241					else {
5242					  $combo.text(text);
5243					}
5244				  }
5245				  else {
5246					if(text !== module.get.placeholderText()) {
5247					  $text.removeClass(className.placeholder);
5248					}
5249					module.debug('Changing text', text, $text);
5250					$text
5251					  .removeClass(className.filtered)
5252					;
5253					if(settings.preserveHTML) {
5254					  $text.html(text);
5255					}
5256					else {
5257					  $text.text(text);
5258					}
5259				  }
5260				}
5261			  },
5262			  selectedItem: function($item) {
5263				var
5264				  value      = module.get.choiceValue($item),
5265				  searchText = module.get.choiceText($item, false),
5266				  text       = module.get.choiceText($item, true)
5267				;
5268				module.debug('Setting user selection to item', $item);
5269				module.remove.activeItem();
5270				module.set.partialSearch(searchText);
5271				module.set.activeItem($item);
5272				module.set.selected(value, $item);
5273				module.set.text(text);
5274			  },
5275			  selectedLetter: function(letter) {
5276				var
5277				  $selectedItem         = $item.filter('.' + className.selected),
5278				  alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),
5279				  $nextValue            = false,
5280				  $nextItem
5281				;
5282				// check next of same letter
5283				if(alreadySelectedLetter) {
5284				  $nextItem = $selectedItem.nextAll($item).eq(0);
5285				  if( module.has.firstLetter($nextItem, letter) ) {
5286					$nextValue  = $nextItem;
5287				  }
5288				}
5289				// check all values
5290				if(!$nextValue) {
5291				  $item
5292					.each(function(){
5293					  if(module.has.firstLetter($(this), letter)) {
5294						$nextValue = $(this);
5295						return false;
5296					  }
5297					})
5298				  ;
5299				}
5300				// set next value
5301				if($nextValue) {
5302				  module.verbose('Scrolling to next value with letter', letter);
5303				  module.set.scrollPosition($nextValue);
5304				  $selectedItem.removeClass(className.selected);
5305				  $nextValue.addClass(className.selected);
5306				  if(settings.selectOnKeydown && module.is.single()) {
5307					module.set.selectedItem($nextValue);
5308				  }
5309				}
5310			  },
5311			  direction: function($menu) {
5312				if(settings.direction == 'auto') {
5313				  // reset position
5314				  module.remove.upward();
5315	
5316				  if(module.can.openDownward($menu)) {
5317					module.remove.upward($menu);
5318				  }
5319				  else {
5320					module.set.upward($menu);
5321				  }
5322				  if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {
5323					module.set.leftward($menu);
5324				  }
5325				}
5326				else if(settings.direction == 'upward') {
5327				  module.set.upward($menu);
5328				}
5329			  },
5330			  upward: function($currentMenu) {
5331				var $element = $currentMenu || $module;
5332				$element.addClass(className.upward);
5333			  },
5334			  leftward: function($currentMenu) {
5335				var $element = $currentMenu || $menu;
5336				$element.addClass(className.leftward);
5337			  },
5338			  value: function(value, text, $selected) {
5339				var
5340				  escapedValue = module.escape.value(value),
5341				  hasInput     = ($input.length > 0),
5342				  currentValue = module.get.values(),
5343				  stringValue  = (value !== undefined)
5344					? String(value)
5345					: value,
5346				  newValue
5347				;
5348				if(hasInput) {
5349				  if(!settings.allowReselection && stringValue == currentValue) {
5350					module.verbose('Skipping value update already same value', value, currentValue);
5351					if(!module.is.initialLoad()) {
5352					  return;
5353					}
5354				  }
5355	
5356				  if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {
5357					module.debug('Adding user option', value);
5358					module.add.optionValue(value);
5359				  }
5360				  module.debug('Updating input value', escapedValue, currentValue);
5361				  internalChange = true;
5362				  $input
5363					.val(escapedValue)
5364				  ;
5365				  if(settings.fireOnInit === false && module.is.initialLoad()) {
5366					module.debug('Input native change event ignored on initial load');
5367				  }
5368				  else {
5369					module.trigger.change();
5370				  }
5371				  internalChange = false;
5372				}
5373				else {
5374				  module.verbose('Storing value in metadata', escapedValue, $input);
5375				  if(escapedValue !== currentValue) {
5376					$module.data(metadata.value, stringValue);
5377				  }
5378				}
5379				if(module.is.single() && settings.clearable) {
5380				  // treat undefined or '' as empty
5381				  if(!escapedValue) {
5382					module.remove.clearable();
5383				  }
5384				  else {
5385					module.set.clearable();
5386				  }
5387				}
5388				if(settings.fireOnInit === false && module.is.initialLoad()) {
5389				  module.verbose('No callback on initial load', settings.onChange);
5390				}
5391				else {
5392				  settings.onChange.call(element, value, text, $selected);
5393				}
5394			  },
5395			  active: function() {
5396				$module
5397				  .addClass(className.active)
5398				;
5399			  },
5400			  multiple: function() {
5401				$module.addClass(className.multiple);
5402			  },
5403			  visible: function() {
5404				$module.addClass(className.visible);
5405			  },
5406			  exactly: function(value, $selectedItem) {
5407				module.debug('Setting selected to exact values');
5408				module.clear();
5409				module.set.selected(value, $selectedItem);
5410			  },
5411			  selected: function(value, $selectedItem) {
5412				var
5413				  isMultiple = module.is.multiple(),
5414				  $userSelectedItem
5415				;
5416				$selectedItem = (settings.allowAdditions)
5417				  ? $selectedItem || module.get.itemWithAdditions(value)
5418				  : $selectedItem || module.get.item(value)
5419				;
5420				if(!$selectedItem) {
5421				  return;
5422				}
5423				module.debug('Setting selected menu item to', $selectedItem);
5424				if(module.is.multiple()) {
5425				  module.remove.searchWidth();
5426				}
5427				if(module.is.single()) {
5428				  module.remove.activeItem();
5429				  module.remove.selectedItem();
5430				}
5431				else if(settings.useLabels) {
5432				  module.remove.selectedItem();
5433				}
5434				// select each item
5435				$selectedItem
5436				  .each(function() {
5437					var
5438					  $selected      = $(this),
5439					  selectedText   = module.get.choiceText($selected),
5440					  selectedValue  = module.get.choiceValue($selected, selectedText),
5441	
5442					  isFiltered     = $selected.hasClass(className.filtered),
5443					  isActive       = $selected.hasClass(className.active),
5444					  isUserValue    = $selected.hasClass(className.addition),
5445					  shouldAnimate  = (isMultiple && $selectedItem.length == 1)
5446					;
5447					if(isMultiple) {
5448					  if(!isActive || isUserValue) {
5449						if(settings.apiSettings && settings.saveRemoteData) {
5450						  module.save.remoteData(selectedText, selectedValue);
5451						}
5452						if(settings.useLabels) {
5453						  module.add.label(selectedValue, selectedText, shouldAnimate);
5454						  module.add.value(selectedValue, selectedText, $selected);
5455						  module.set.activeItem($selected);
5456						  module.filterActive();
5457						  module.select.nextAvailable($selectedItem);
5458						}
5459						else {
5460						  module.add.value(selectedValue, selectedText, $selected);
5461						  module.set.text(module.add.variables(message.count));
5462						  module.set.activeItem($selected);
5463						}
5464					  }
5465					  else if(!isFiltered) {
5466						module.debug('Selected active value, removing label');
5467						module.remove.selected(selectedValue);
5468					  }
5469					}
5470					else {
5471					  if(settings.apiSettings && settings.saveRemoteData) {
5472						module.save.remoteData(selectedText, selectedValue);
5473					  }
5474					  module.set.text(selectedText);
5475					  module.set.value(selectedValue, selectedText, $selected);
5476					  $selected
5477						.addClass(className.active)
5478						.addClass(className.selected)
5479					  ;
5480					}
5481				  })
5482				;
5483			  },
5484			  clearable: function() {
5485				$icon.addClass(className.clear);
5486			  },
5487			},
5488	
5489			add: {
5490			  label: function(value, text, shouldAnimate) {
5491				var
5492				  $next  = module.is.searchSelection()
5493					? $search
5494					: $text,
5495				  escapedValue = module.escape.value(value),
5496				  $label
5497				;
5498				if(settings.ignoreCase) {
5499				  escapedValue = escapedValue.toLowerCase();
5500				}
5501				$label =  $('<a />')
5502				  .addClass(className.label)
5503				  .attr('data-' + metadata.value, escapedValue)
5504				  .html(templates.label(escapedValue, text))
5505				;
5506				$label = settings.onLabelCreate.call($label, escapedValue, text);
5507	
5508				if(module.has.label(value)) {
5509				  module.debug('User selection already exists, skipping', escapedValue);
5510				  return;
5511				}
5512				if(settings.label.variation) {
5513				  $label.addClass(settings.label.variation);
5514				}
5515				if(shouldAnimate === true) {
5516				  module.debug('Animating in label', $label);
5517				  $label
5518					.addClass(className.hidden)
5519					.insertBefore($next)
5520					.transition(settings.label.transition, settings.label.duration)
5521				  ;
5522				}
5523				else {
5524				  module.debug('Adding selection label', $label);
5525				  $label
5526					.insertBefore($next)
5527				  ;
5528				}
5529			  },
5530			  message: function(message) {
5531				var
5532				  $message = $menu.children(selector.message),
5533				  html     = settings.templates.message(module.add.variables(message))
5534				;
5535				if($message.length > 0) {
5536				  $message
5537					.html(html)
5538				  ;
5539				}
5540				else {
5541				  $message = $('<div/>')
5542					.html(html)
5543					.addClass(className.message)
5544					.appendTo($menu)
5545				  ;
5546				}
5547			  },
5548			  optionValue: function(value) {
5549				var
5550				  escapedValue = module.escape.value(value),
5551				  $option      = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
5552				  hasOption    = ($option.length > 0)
5553				;
5554				if(hasOption) {
5555				  return;
5556				}
5557				// temporarily disconnect observer
5558				module.disconnect.selectObserver();
5559				if( module.is.single() ) {
5560				  module.verbose('Removing previous user addition');
5561				  $input.find('option.' + className.addition).remove();
5562				}
5563				$('<option/>')
5564				  .prop('value', escapedValue)
5565				  .addClass(className.addition)
5566				  .html(value)
5567				  .appendTo($input)
5568				;
5569				module.verbose('Adding user addition as an <option>', value);
5570				module.observe.select();
5571			  },
5572			  userSuggestion: function(value) {
5573				var
5574				  $addition         = $menu.children(selector.addition),
5575				  $existingItem     = module.get.item(value),
5576				  alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,
5577				  hasUserSuggestion = $addition.length > 0,
5578				  html
5579				;
5580				if(settings.useLabels && module.has.maxSelections()) {
5581				  return;
5582				}
5583				if(value === '' || alreadyHasValue) {
5584				  $addition.remove();
5585				  return;
5586				}
5587				if(hasUserSuggestion) {
5588				  $addition
5589					.data(metadata.value, value)
5590					.data(metadata.text, value)
5591					.attr('data-' + metadata.value, value)
5592					.attr('data-' + metadata.text, value)
5593					.removeClass(className.filtered)
5594				  ;
5595				  if(!settings.hideAdditions) {
5596					html = settings.templates.addition( module.add.variables(message.addResult, value) );
5597					$addition
5598					  .html(html)
5599					;
5600				  }
5601				  module.verbose('Replacing user suggestion with new value', $addition);
5602				}
5603				else {
5604				  $addition = module.create.userChoice(value);
5605				  $addition
5606					.prependTo($menu)
5607				  ;
5608				  module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);
5609				}
5610				if(!settings.hideAdditions || module.is.allFiltered()) {
5611				  $addition
5612					.addClass(className.selected)
5613					.siblings()
5614					.removeClass(className.selected)
5615				  ;
5616				}
5617				module.refreshItems();
5618			  },
5619			  variables: function(message, term) {
5620				var
5621				  hasCount    = (message.search('{count}') !== -1),
5622				  hasMaxCount = (message.search('{maxCount}') !== -1),
5623				  hasTerm     = (message.search('{term}') !== -1),
5624				  values,
5625				  count,
5626				  query
5627				;
5628				module.verbose('Adding templated variables to message', message);
5629				if(hasCount) {
5630				  count  = module.get.selectionCount();
5631				  message = message.replace('{count}', count);
5632				}
5633				if(hasMaxCount) {
5634				  count  = module.get.selectionCount();
5635				  message = message.replace('{maxCount}', settings.maxSelections);
5636				}
5637				if(hasTerm) {
5638				  query   = term || module.get.query();
5639				  message = message.replace('{term}', query);
5640				}
5641				return message;
5642			  },
5643			  value: function(addedValue, addedText, $selectedItem) {
5644				var
5645				  currentValue = module.get.values(),
5646				  newValue
5647				;
5648				if(module.has.value(addedValue)) {
5649				  module.debug('Value already selected');
5650				  return;
5651				}
5652				if(addedValue === '') {
5653				  module.debug('Cannot select blank values from multiselect');
5654				  return;
5655				}
5656				// extend current array
5657				if($.isArray(currentValue)) {
5658				  newValue = currentValue.concat([addedValue]);
5659				  newValue = module.get.uniqueArray(newValue);
5660				}
5661				else {
5662				  newValue = [addedValue];
5663				}
5664				// add values
5665				if( module.has.selectInput() ) {
5666				  if(module.can.extendSelect()) {
5667					module.debug('Adding value to select', addedValue, newValue, $input);
5668					module.add.optionValue(addedValue);
5669				  }
5670				}
5671				else {
5672				  newValue = newValue.join(settings.delimiter);
5673				  module.debug('Setting hidden input to delimited value', newValue, $input);
5674				}
5675	
5676				if(settings.fireOnInit === false && module.is.initialLoad()) {
5677				  module.verbose('Skipping onadd callback on initial load', settings.onAdd);
5678				}
5679				else {
5680				  settings.onAdd.call(element, addedValue, addedText, $selectedItem);
5681				}
5682				module.set.value(newValue, addedValue, addedText, $selectedItem);
5683				module.check.maxSelections();
5684			  },
5685			},
5686	
5687			remove: {
5688			  active: function() {
5689				$module.removeClass(className.active);
5690			  },
5691			  activeLabel: function() {
5692				$module.find(selector.label).removeClass(className.active);
5693			  },
5694			  empty: function() {
5695				$module.removeClass(className.empty);
5696			  },
5697			  loading: function() {
5698				$module.removeClass(className.loading);
5699			  },
5700			  initialLoad: function() {
5701				initialLoad = false;
5702			  },
5703			  upward: function($currentMenu) {
5704				var $element = $currentMenu || $module;
5705				$element.removeClass(className.upward);
5706			  },
5707			  leftward: function($currentMenu) {
5708				var $element = $currentMenu || $menu;
5709				$element.removeClass(className.leftward);
5710			  },
5711			  visible: function() {
5712				$module.removeClass(className.visible);
5713			  },
5714			  activeItem: function() {
5715				$item.removeClass(className.active);
5716			  },
5717			  filteredItem: function() {
5718				if(settings.useLabels && module.has.maxSelections() ) {
5719				  return;
5720				}
5721				if(settings.useLabels && module.is.multiple()) {
5722				  $item.not('.' + className.active).removeClass(className.filtered);
5723				}
5724				else {
5725				  $item.removeClass(className.filtered);
5726				}
5727				module.remove.empty();
5728			  },
5729			  optionValue: function(value) {
5730				var
5731				  escapedValue = module.escape.value(value),
5732				  $option      = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
5733				  hasOption    = ($option.length > 0)
5734				;
5735				if(!hasOption || !$option.hasClass(className.addition)) {
5736				  return;
5737				}
5738				// temporarily disconnect observer
5739				if(selectObserver) {
5740				  selectObserver.disconnect();
5741				  module.verbose('Temporarily disconnecting mutation observer');
5742				}
5743				$option.remove();
5744				module.verbose('Removing user addition as an <option>', escapedValue);
5745				if(selectObserver) {
5746				  selectObserver.observe($input[0], {
5747					childList : true,
5748					subtree   : true
5749				  });
5750				}
5751			  },
5752			  message: function() {
5753				$menu.children(selector.message).remove();
5754			  },
5755			  searchWidth: function() {
5756				$search.css('width', '');
5757			  },
5758			  searchTerm: function() {
5759				module.verbose('Cleared search term');
5760				$search.val('');
5761				module.set.filtered();
5762			  },
5763			  userAddition: function() {
5764				$item.filter(selector.addition).remove();
5765			  },
5766			  selected: function(value, $selectedItem) {
5767				$selectedItem = (settings.allowAdditions)
5768				  ? $selectedItem || module.get.itemWithAdditions(value)
5769				  : $selectedItem || module.get.item(value)
5770				;
5771	
5772				if(!$selectedItem) {
5773				  return false;
5774				}
5775	
5776				$selectedItem
5777				  .each(function() {
5778					var
5779					  $selected     = $(this),
5780					  selectedText  = module.get.choiceText($selected),
5781					  selectedValue = module.get.choiceValue($selected, selectedText)
5782					;
5783					if(module.is.multiple()) {
5784					  if(settings.useLabels) {
5785						module.remove.value(selectedValue, selectedText, $selected);
5786						module.remove.label(selectedValue);
5787					  }
5788					  else {
5789						module.remove.value(selectedValue, selectedText, $selected);
5790						if(module.get.selectionCount() === 0) {
5791						  module.set.placeholderText();
5792						}
5793						else {
5794						  module.set.text(module.add.variables(message.count));
5795						}
5796					  }
5797					}
5798					else {
5799					  module.remove.value(selectedValue, selectedText, $selected);
5800					}
5801					$selected
5802					  .removeClass(className.filtered)
5803					  .removeClass(className.active)
5804					;
5805					if(settings.useLabels) {
5806					  $selected.removeClass(className.selected);
5807					}
5808				  })
5809				;
5810			  },
5811			  selectedItem: function() {
5812				$item.removeClass(className.selected);
5813			  },
5814			  value: function(removedValue, removedText, $removedItem) {
5815				var
5816				  values = module.get.values(),
5817				  newValue
5818				;
5819				if( module.has.selectInput() ) {
5820				  module.verbose('Input is <select> removing selected option', removedValue);
5821				  newValue = module.remove.arrayValue(removedValue, values);
5822				  module.remove.optionValue(removedValue);
5823				}
5824				else {
5825				  module.verbose('Removing from delimited values', removedValue);
5826				  newValue = module.remove.arrayValue(removedValue, values);
5827				  newValue = newValue.join(settings.delimiter);
5828				}
5829				if(settings.fireOnInit === false && module.is.initialLoad()) {
5830				  module.verbose('No callback on initial load', settings.onRemove);
5831				}
5832				else {
5833				  settings.onRemove.call(element, removedValue, removedText, $removedItem);
5834				}
5835				module.set.value(newValue, removedText, $removedItem);
5836				module.check.maxSelections();
5837			  },
5838			  arrayValue: function(removedValue, values) {
5839				if( !$.isArray(values) ) {
5840				  values = [values];
5841				}
5842				values = $.grep(values, function(value){
5843				  return (removedValue != value);
5844				});
5845				module.verbose('Removed value from delimited string', removedValue, values);
5846				return values;
5847			  },
5848			  label: function(value, shouldAnimate) {
5849				var
5850				  $labels       = $module.find(selector.label),
5851				  $removedLabel = $labels.filter('[data-' + metadata.value + '="' + module.escape.string(value) +'"]')
5852				;
5853				module.verbose('Removing label', $removedLabel);
5854				$removedLabel.remove();
5855			  },
5856			  activeLabels: function($activeLabels) {
5857				$activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);
5858				module.verbose('Removing active label selections', $activeLabels);
5859				module.remove.labels($activeLabels);
5860			  },
5861			  labels: function($labels) {
5862				$labels = $labels || $module.find(selector.label);
5863				module.verbose('Removing labels', $labels);
5864				$labels
5865				  .each(function(){
5866					var
5867					  $label      = $(this),
5868					  value       = $label.data(metadata.value),
5869					  stringValue = (value !== undefined)
5870						? String(value)
5871						: value,
5872					  isUserValue = module.is.userValue(stringValue)
5873					;
5874					if(settings.onLabelRemove.call($label, value) === false) {
5875					  module.debug('Label remove callback cancelled removal');
5876					  return;
5877					}
5878					module.remove.message();
5879					if(isUserValue) {
5880					  module.remove.value(stringValue);
5881					  module.remove.label(stringValue);
5882					}
5883					else {
5884					  // selected will also remove label
5885					  module.remove.selected(stringValue);
5886					}
5887				  })
5888				;
5889			  },
5890			  tabbable: function() {
5891				if( module.is.searchSelection() ) {
5892				  module.debug('Searchable dropdown initialized');
5893				  $search
5894					.removeAttr('tabindex')
5895				  ;
5896				  $menu
5897					.removeAttr('tabindex')
5898				  ;
5899				}
5900				else {
5901				  module.debug('Simple selection dropdown initialized');
5902				  $module
5903					.removeAttr('tabindex')
5904				  ;
5905				  $menu
5906					.removeAttr('tabindex')
5907				  ;
5908				}
5909			  },
5910			  clearable: function() {
5911				$icon.removeClass(className.clear);
5912			  }
5913			},
5914	
5915			has: {
5916			  menuSearch: function() {
5917				return (module.has.search() && $search.closest($menu).length > 0);
5918			  },
5919			  search: function() {
5920				return ($search.length > 0);
5921			  },
5922			  sizer: function() {
5923				return ($sizer.length > 0);
5924			  },
5925			  selectInput: function() {
5926				return ( $input.is('select') );
5927			  },
5928			  minCharacters: function(searchTerm) {
5929				if(settings.minCharacters) {
5930				  searchTerm = (searchTerm !== undefined)
5931					? String(searchTerm)
5932					: String(module.get.query())
5933				  ;
5934				  return (searchTerm.length >= settings.minCharacters);
5935				}
5936				return true;
5937			  },
5938			  firstLetter: function($item, letter) {
5939				var
5940				  text,
5941				  firstLetter
5942				;
5943				if(!$item || $item.length === 0 || typeof letter !== 'string') {
5944				  return false;
5945				}
5946				text        = module.get.choiceText($item, false);
5947				letter      = letter.toLowerCase();
5948				firstLetter = String(text).charAt(0).toLowerCase();
5949				return (letter == firstLetter);
5950			  },
5951			  input: function() {
5952				return ($input.length > 0);
5953			  },
5954			  items: function() {
5955				return ($item.length > 0);
5956			  },
5957			  menu: function() {
5958				return ($menu.length > 0);
5959			  },
5960			  message: function() {
5961				return ($menu.children(selector.message).length !== 0);
5962			  },
5963			  label: function(value) {
5964				var
5965				  escapedValue = module.escape.value(value),
5966				  $labels      = $module.find(selector.label)
5967				;
5968				if(settings.ignoreCase) {
5969				  escapedValue = escapedValue.toLowerCase();
5970				}
5971				return ($labels.filter('[data-' + metadata.value + '="' + module.escape.string(escapedValue) +'"]').length > 0);
5972			  },
5973			  maxSelections: function() {
5974				return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);
5975			  },
5976			  allResultsFiltered: function() {
5977				var
5978				  $normalResults = $item.not(selector.addition)
5979				;
5980				return ($normalResults.filter(selector.unselectable).length === $normalResults.length);
5981			  },
5982			  userSuggestion: function() {
5983				return ($menu.children(selector.addition).length > 0);
5984			  },
5985			  query: function() {
5986				return (module.get.query() !== '');
5987			  },
5988			  value: function(value) {
5989				return (settings.ignoreCase)
5990				  ? module.has.valueIgnoringCase(value)
5991				  : module.has.valueMatchingCase(value)
5992				;
5993			  },
5994			  valueMatchingCase: function(value) {
5995				var
5996				  values   = module.get.values(),
5997				  hasValue = $.isArray(values)
5998				   ? values && ($.inArray(value, values) !== -1)
5999				   : (values == value)
6000				;
6001				return (hasValue)
6002				  ? true
6003				  : false
6004				;
6005			  },
6006			  valueIgnoringCase: function(value) {
6007				var
6008				  values   = module.get.values(),
6009				  hasValue = false
6010				;
6011				if(!$.isArray(values)) {
6012				  values = [values];
6013				}
6014				$.each(values, function(index, existingValue) {
6015				  if(String(value).toLowerCase() == String(existingValue).toLowerCase()) {
6016					hasValue = true;
6017					return false;
6018				  }
6019				});
6020				return hasValue;
6021			  }
6022			},
6023	
6024			is: {
6025			  active: function() {
6026				return $module.hasClass(className.active);
6027			  },
6028			  animatingInward: function() {
6029				return $menu.transition('is inward');
6030			  },
6031			  animatingOutward: function() {
6032				return $menu.transition('is outward');
6033			  },
6034			  bubbledLabelClick: function(event) {
6035				return $(event.target).is('select, input') && $module.closest('label').length > 0;
6036			  },
6037			  bubbledIconClick: function(event) {
6038				return $(event.target).closest($icon).length > 0;
6039			  },
6040			  alreadySetup: function() {
6041				return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
6042			  },
6043			  animating: function($subMenu) {
6044				return ($subMenu)
6045				  ? $subMenu.transition && $subMenu.transition('is animating')
6046				  : $menu.transition    && $menu.transition('is animating')
6047				;
6048			  },
6049			  leftward: function($subMenu) {
6050				var $selectedMenu = $subMenu || $menu;
6051				return $selectedMenu.hasClass(className.leftward);
6052			  },
6053			  disabled: function() {
6054				return $module.hasClass(className.disabled);
6055			  },
6056			  focused: function() {
6057				return (document.activeElement === $module[0]);
6058			  },
6059			  focusedOnSearch: function() {
6060				return (document.activeElement === $search[0]);
6061			  },
6062			  allFiltered: function() {
6063				return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );
6064			  },
6065			  hidden: function($subMenu) {
6066				return !module.is.visible($subMenu);
6067			  },
6068			  initialLoad: function() {
6069				return initialLoad;
6070			  },
6071			  inObject: function(needle, object) {
6072				var
6073				  found = false
6074				;
6075				$.each(object, function(index, property) {
6076				  if(property == needle) {
6077					found = true;
6078					return true;
6079				  }
6080				});
6081				return found;
6082			  },
6083			  multiple: function() {
6084				return $module.hasClass(className.multiple);
6085			  },
6086			  remote: function() {
6087				return settings.apiSettings && module.can.useAPI();
6088			  },
6089			  single: function() {
6090				return !module.is.multiple();
6091			  },
6092			  selectMutation: function(mutations) {
6093				var
6094				  selectChanged = false
6095				;
6096				$.each(mutations, function(index, mutation) {
6097				  if(mutation.target && $(mutation.target).is('select')) {
6098					selectChanged = true;
6099					return true;
6100				  }
6101				});
6102				return selectChanged;
6103			  },
6104			  search: function() {
6105				return $module.hasClass(className.search);
6106			  },
6107			  searchSelection: function() {
6108				return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );
6109			  },
6110			  selection: function() {
6111				return $module.hasClass(className.selection);
6112			  },
6113			  userValue: function(value) {
6114				return ($.inArray(value, module.get.userValues()) !== -1);
6115			  },
6116			  upward: function($menu) {
6117				var $element = $menu || $module;
6118				return $element.hasClass(className.upward);
6119			  },
6120			  visible: function($subMenu) {
6121				return ($subMenu)
6122				  ? $subMenu.hasClass(className.visible)
6123				  : $menu.hasClass(className.visible)
6124				;
6125			  },
6126			  verticallyScrollableContext: function() {
6127				var
6128				  overflowY = ($context.get(0) !== window)
6129					? $context.css('overflow-y')
6130					: false
6131				;
6132				return (overflowY == 'auto' || overflowY == 'scroll');
6133			  },
6134			  horizontallyScrollableContext: function() {
6135				var
6136				  overflowX = ($context.get(0) !== window)
6137					? $context.css('overflow-X')
6138					: false
6139				;
6140				return (overflowX == 'auto' || overflowX == 'scroll');
6141			  }
6142			},
6143	
6144			can: {
6145			  activate: function($item) {
6146				if(settings.useLabels) {
6147				  return true;
6148				}
6149				if(!module.has.maxSelections()) {
6150				  return true;
6151				}
6152				if(module.has.maxSelections() && $item.hasClass(className.active)) {
6153				  return true;
6154				}
6155				return false;
6156			  },
6157			  openDownward: function($subMenu) {
6158				var
6159				  $currentMenu    = $subMenu || $menu,
6160				  canOpenDownward = true,
6161				  onScreen        = {},
6162				  calculations
6163				;
6164				$currentMenu
6165				  .addClass(className.loading)
6166				;
6167				calculations = {
6168				  context: {
6169					offset    : ($context.get(0) === window)
6170					  ? { top: 0, left: 0}
6171					  : $context.offset(),
6172					scrollTop : $context.scrollTop(),
6173					height    : $context.outerHeight()
6174				  },
6175				  menu : {
6176					offset: $currentMenu.offset(),
6177					height: $currentMenu.outerHeight()
6178				  }
6179				};
6180				if(module.is.verticallyScrollableContext()) {
6181				  calculations.menu.offset.top += calculations.context.scrollTop;
6182				}
6183				onScreen = {
6184				  above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.context.offset.top - calculations.menu.height,
6185				  below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top - calculations.context.offset.top + calculations.menu.height
6186				};
6187				if(onScreen.below) {
6188				  module.verbose('Dropdown can fit in context downward', onScreen);
6189				  canOpenDownward = true;
6190				}
6191				else if(!onScreen.below && !onScreen.above) {
6192				  module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);
6193				  canOpenDownward = true;
6194				}
6195				else {
6196				  module.verbose('Dropdown cannot fit below, opening upward', onScreen);
6197				  canOpenDownward = false;
6198				}
6199				$currentMenu.removeClass(className.loading);
6200				return canOpenDownward;
6201			  },
6202			  openRightward: function($subMenu) {
6203				var
6204				  $currentMenu     = $subMenu || $menu,
6205				  canOpenRightward = true,
6206				  isOffscreenRight = false,
6207				  calculations
6208				;
6209				$currentMenu
6210				  .addClass(className.loading)
6211				;
6212				calculations = {
6213				  context: {
6214					offset     : ($context.get(0) === window)
6215					  ? { top: 0, left: 0}
6216					  : $context.offset(),
6217					scrollLeft : $context.scrollLeft(),
6218					width      : $context.outerWidth()
6219				  },
6220				  menu: {
6221					offset : $currentMenu.offset(),
6222					width  : $currentMenu.outerWidth()
6223				  }
6224				};
6225				if(module.is.horizontallyScrollableContext()) {
6226				  calculations.menu.offset.left += calculations.context.scrollLeft;
6227				}
6228				isOffscreenRight = (calculations.menu.offset.left - calculations.context.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);
6229				if(isOffscreenRight) {
6230				  module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);
6231				  canOpenRightward = false;
6232				}
6233				$currentMenu.removeClass(className.loading);
6234				return canOpenRightward;
6235			  },
6236			  click: function() {
6237				return (hasTouch || settings.on == 'click');
6238			  },
6239			  extendSelect: function() {
6240				return settings.allowAdditions || settings.apiSettings;
6241			  },
6242			  show: function() {
6243				return !module.is.disabled() && (module.has.items() || module.has.message());
6244			  },
6245			  useAPI: function() {
6246				return $.fn.api !== undefined;
6247			  }
6248			},
6249	
6250			animate: {
6251			  show: function(callback, $subMenu) {
6252				var
6253				  $currentMenu = $subMenu || $menu,
6254				  start = ($subMenu)
6255					? function() {}
6256					: function() {
6257					  module.hideSubMenus();
6258					  module.hideOthers();
6259					  module.set.active();
6260					},
6261				  transition
6262				;
6263				callback = $.isFunction(callback)
6264				  ? callback
6265				  : function(){}
6266				;
6267				module.verbose('Doing menu show animation', $currentMenu);
6268				module.set.direction($subMenu);
6269				transition = module.get.transition($subMenu);
6270				if( module.is.selection() ) {
6271				  module.set.scrollPosition(module.get.selectedItem(), true);
6272				}
6273				if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {
6274				  if(transition == 'none') {
6275					start();
6276					$currentMenu.transition('show');
6277					callback.call(element);
6278				  }
6279				  else if($.fn.transition !== undefined && $module.transition('is supported')) {
6280					$currentMenu
6281					  .transition({
6282						animation  : transition + ' in',
6283						debug      : settings.debug,
6284						verbose    : settings.verbose,
6285						duration   : settings.duration,
6286						queue      : true,
6287						onStart    : start,
6288						onComplete : function() {
6289						  callback.call(element);
6290						}
6291					  })
6292					;
6293				  }
6294				  else {
6295					module.error(error.noTransition, transition);
6296				  }
6297				}
6298			  },
6299			  hide: function(callback, $subMenu) {
6300				var
6301				  $currentMenu = $subMenu || $menu,
6302				  duration = ($subMenu)
6303					? (settings.duration * 0.9)
6304					: settings.duration,
6305				  start = ($subMenu)
6306					? function() {}
6307					: function() {
6308					  if( module.can.click() ) {
6309						module.unbind.intent();
6310					  }
6311					  module.remove.active();
6312					},
6313				  transition = module.get.transition($subMenu)
6314				;
6315				callback = $.isFunction(callback)
6316				  ? callback
6317				  : function(){}
6318				;
6319				if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {
6320				  module.verbose('Doing menu hide animation', $currentMenu);
6321	
6322				  if(transition == 'none') {
6323					start();
6324					$currentMenu.transition('hide');
6325					callback.call(element);
6326				  }
6327				  else if($.fn.transition !== undefined && $module.transition('is supported')) {
6328					$currentMenu
6329					  .transition({
6330						animation  : transition + ' out',
6331						duration   : settings.duration,
6332						debug      : settings.debug,
6333						verbose    : settings.verbose,
6334						queue      : false,
6335						onStart    : start,
6336						onComplete : function() {
6337						  callback.call(element);
6338						}
6339					  })
6340					;
6341				  }
6342				  else {
6343					module.error(error.transition);
6344				  }
6345				}
6346			  }
6347			},
6348	
6349			hideAndClear: function() {
6350			  module.remove.searchTerm();
6351			  if( module.has.maxSelections() ) {
6352				return;
6353			  }
6354			  if(module.has.search()) {
6355				module.hide(function() {
6356				  module.remove.filteredItem();
6357				});
6358			  }
6359			  else {
6360				module.hide();
6361			  }
6362			},
6363	
6364			delay: {
6365			  show: function() {
6366				module.verbose('Delaying show event to ensure user intent');
6367				clearTimeout(module.timer);
6368				module.timer = setTimeout(module.show, settings.delay.show);
6369			  },
6370			  hide: function() {
6371				module.verbose('Delaying hide event to ensure user intent');
6372				clearTimeout(module.timer);
6373				module.timer = setTimeout(module.hide, settings.delay.hide);
6374			  }
6375			},
6376	
6377			escape: {
6378			  value: function(value) {
6379				var
6380				  multipleValues = $.isArray(value),
6381				  stringValue    = (typeof value === 'string'),
6382				  isUnparsable   = (!stringValue && !multipleValues),
6383				  hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),
6384				  values         = []
6385				;
6386				if(isUnparsable || !hasQuotes) {
6387				  return value;
6388				}
6389				module.debug('Encoding quote values for use in select', value);
6390				if(multipleValues) {
6391				  $.each(value, function(index, value){
6392					values.push(value.replace(regExp.quote, '&quot;'));
6393				  });
6394				  return values;
6395				}
6396				return value.replace(regExp.quote, '&quot;');
6397			  },
6398			  string: function(text) {
6399				text =  String(text);
6400				return text.replace(regExp.escape, '\\$&');
6401			  }
6402			},
6403	
6404			setting: function(name, value) {
6405			  module.debug('Changing setting', name, value);
6406			  if( $.isPlainObject(name) ) {
6407				$.extend(true, settings, name);
6408			  }
6409			  else if(value !== undefined) {
6410				if($.isPlainObject(settings[name])) {
6411				  $.extend(true, settings[name], value);
6412				}
6413				else {
6414				  settings[name] = value;
6415				}
6416			  }
6417			  else {
6418				return settings[name];
6419			  }
6420			},
6421			internal: function(name, value) {
6422			  if( $.isPlainObject(name) ) {
6423				$.extend(true, module, name);
6424			  }
6425			  else if(value !== undefined) {
6426				module[name] = value;
6427			  }
6428			  else {
6429				return module[name];
6430			  }
6431			},
6432			debug: function() {
6433			  if(!settings.silent && settings.debug) {
6434				if(settings.performance) {
6435				  module.performance.log(arguments);
6436				}
6437				else {
6438				  module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
6439				  module.debug.apply(console, arguments);
6440				}
6441			  }
6442			},
6443			verbose: function() {
6444			  if(!settings.silent && settings.verbose && settings.debug) {
6445				if(settings.performance) {
6446				  module.performance.log(arguments);
6447				}
6448				else {
6449				  module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
6450				  module.verbose.apply(console, arguments);
6451				}
6452			  }
6453			},
6454			error: function() {
6455			  if(!settings.silent) {
6456				module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
6457				module.error.apply(console, arguments);
6458			  }
6459			},
6460			performance: {
6461			  log: function(message) {
6462				var
6463				  currentTime,
6464				  executionTime,
6465				  previousTime
6466				;
6467				if(settings.performance) {
6468				  currentTime   = new Date().getTime();
6469				  previousTime  = time || currentTime;
6470				  executionTime = currentTime - previousTime;
6471				  time          = currentTime;
6472				  performance.push({
6473					'Name'           : message[0],
6474					'Arguments'      : [].slice.call(message, 1) || '',
6475					'Element'        : element,
6476					'Execution Time' : executionTime
6477				  });
6478				}
6479				clearTimeout(module.performance.timer);
6480				module.performance.timer = setTimeout(module.performance.display, 500);
6481			  },
6482			  display: function() {
6483				var
6484				  title = settings.name + ':',
6485				  totalTime = 0
6486				;
6487				time = false;
6488				clearTimeout(module.performance.timer);
6489				$.each(performance, function(index, data) {
6490				  totalTime += data['Execution Time'];
6491				});
6492				title += ' ' + totalTime + 'ms';
6493				if(moduleSelector) {
6494				  title += ' \'' + moduleSelector + '\'';
6495				}
6496				if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
6497				  console.groupCollapsed(title);
6498				  if(console.table) {
6499					console.table(performance);
6500				  }
6501				  else {
6502					$.each(performance, function(index, data) {
6503					  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
6504					});
6505				  }
6506				  console.groupEnd();
6507				}
6508				performance = [];
6509			  }
6510			},
6511			invoke: function(query, passedArguments, context) {
6512			  var
6513				object = instance,
6514				maxDepth,
6515				found,
6516				response
6517			  ;
6518			  passedArguments = passedArguments || queryArguments;
6519			  context         = element         || context;
6520			  if(typeof query == 'string' && object !== undefined) {
6521				query    = query.split(/[\. ]/);
6522				maxDepth = query.length - 1;
6523				$.each(query, function(depth, value) {
6524				  var camelCaseValue = (depth != maxDepth)
6525					? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
6526					: query
6527				  ;
6528				  if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
6529					object = object[camelCaseValue];
6530				  }
6531				  else if( object[camelCaseValue] !== undefined ) {
6532					found = object[camelCaseValue];
6533					return false;
6534				  }
6535				  else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
6536					object = object[value];
6537				  }
6538				  else if( object[value] !== undefined ) {
6539					found = object[value];
6540					return false;
6541				  }
6542				  else {
6543					module.error(error.method, query);
6544					return false;
6545				  }
6546				});
6547			  }
6548			  if ( $.isFunction( found ) ) {
6549				response = found.apply(context, passedArguments);
6550			  }
6551			  else if(found !== undefined) {
6552				response = found;
6553			  }
6554			  if($.isArray(returnedValue)) {
6555				returnedValue.push(response);
6556			  }
6557			  else if(returnedValue !== undefined) {
6558				returnedValue = [returnedValue, response];
6559			  }
6560			  else if(response !== undefined) {
6561				returnedValue = response;
6562			  }
6563			  return found;
6564			}
6565		  };
6566	
6567		  if(methodInvoked) {
6568			if(instance === undefined) {
6569			  module.initialize();
6570			}
6571			module.invoke(query);
6572		  }
6573		  else {
6574			if(instance !== undefined) {
6575			  instance.invoke('destroy');
6576			}
6577			module.initialize();
6578		  }
6579		})
6580	  ;
6581	  return (returnedValue !== undefined)
6582		? returnedValue
6583		: $allModules
6584	  ;
6585	};
6586	
6587	$.fn.dropdown.settings = {
6588	
6589	  silent                 : false,
6590	  debug                  : false,
6591	  verbose                : false,
6592	  performance            : true,
6593	
6594	  on                     : 'click',    // what event should show menu action on item selection
6595	  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})
6596	
6597	  values                 : false,      // specify values to use for dropdown
6598	
6599	  clearable              : false,      // whether the value of the dropdown can be cleared
6600	
6601	  apiSettings            : false,
6602	  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used
6603	  minCharacters          : 0,          // Minimum characters required to trigger API call
6604	
6605	  filterRemoteData       : false,      // Whether API results should be filtered after being returned for query term
6606	  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh
6607	
6608	  throttle               : 200,        // How long to wait after last user input to search remotely
6609	
6610	  context                : window,     // Context to use when determining if on screen
6611	  direction              : 'auto',     // Whether dropdown should always open in one direction
6612	  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing
6613	
6614	  match                  : 'both',     // what to match against with search selection (both, text, or label)
6615	  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)
6616	
6617	  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text
6618	  preserveHTML           : true,       // preserve html when selecting value
6619	  sortSelect             : false,      // sort selection on init
6620	
6621	  forceSelection         : true,       // force a choice on blur with search selection
6622	
6623	  allowAdditions         : false,      // whether multiple select should allow user added values
6624	  ignoreCase             : false,       // whether to consider values not matching in case to be the same
6625	  hideAdditions          : true,       // whether or not to hide special message prompting a user they can enter a value
6626	
6627	  maxSelections          : false,      // When set to a number limits the number of selections to this count
6628	  useLabels              : true,       // whether multiple select should filter currently active selections from choices
6629	  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character
6630	
6631	  showOnFocus            : true,       // show menu on focus
6632	  allowReselection       : false,      // whether current value should trigger callbacks when reselected
6633	  allowTab               : true,       // add tabindex to element
6634	  allowCategorySelection : false,      // allow elements with sub-menus to be selected
6635	
6636	  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values
6637	
6638	  transition             : 'auto',     // auto transition will slide down or up based on direction
6639	  duration               : 200,        // duration of transition
6640	
6641	  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width
6642	
6643	  // label settings on multi-select
6644	  label: {
6645		transition : 'scale',
6646		duration   : 200,
6647		variation  : false
6648	  },
6649	
6650	  // delay before event
6651	  delay : {
6652		hide   : 300,
6653		show   : 200,
6654		search : 20,
6655		touch  : 50
6656	  },
6657	
6658	  /* Callbacks */
6659	  onChange      : function(value, text, $selected){},
6660	  onAdd         : function(value, text, $selected){},
6661	  onRemove      : function(value, text, $selected){},
6662	
6663	  onLabelSelect : function($selectedLabels){},
6664	  onLabelCreate : function(value, text) { return $(this); },
6665	  onLabelRemove : function(value) { return true; },
6666	  onNoResults   : function(searchTerm) { return true; },
6667	  onShow        : function(){},
6668	  onHide        : function(){},
6669	
6670	  /* Component */
6671	  name           : 'Dropdown',
6672	  namespace      : 'dropdown',
6673	
6674	  message: {
6675		addResult     : 'Add <b>{term}</b>',
6676		count         : '{count} selected',
6677		maxSelections : 'Max {maxCount} selections',
6678		noResults     : 'No results found.',
6679		serverError   : 'There was an error contacting the server'
6680	  },
6681	
6682	  error : {
6683		action          : 'You called a dropdown action that was not defined',
6684		alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',
6685		labels          : 'Allowing user additions currently requires the use of labels.',
6686		missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',
6687		method          : 'The method you called is not defined.',
6688		noAPI           : 'The API module is required to load resources remotely',
6689		noStorage       : 'Saving remote data requires session storage',
6690		noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'
6691	  },
6692	
6693	  regExp : {
6694		escape   : /[-[\]{}()*+?.,\\^$|#\s]/g,
6695		quote    : /"/g
6696	  },
6697	
6698	  metadata : {
6699		defaultText     : 'defaultText',
6700		defaultValue    : 'defaultValue',
6701		placeholderText : 'placeholder',
6702		text            : 'text',
6703		value           : 'value'
6704	  },
6705	
6706	  // property names for remote query
6707	  fields: {
6708		remoteValues : 'results',  // grouping for api results
6709		values       : 'values',   // grouping for all dropdown values
6710		disabled     : 'disabled', // whether value should be disabled
6711		name         : 'name',     // displayed dropdown text
6712		value        : 'value',    // actual dropdown value
6713		text         : 'text'      // displayed text when selected
6714	  },
6715	
6716	  keys : {
6717		backspace  : 8,
6718		delimiter  : 188, // comma
6719		deleteKey  : 46,
6720		enter      : 13,
6721		escape     : 27,
6722		pageUp     : 33,
6723		pageDown   : 34,
6724		leftArrow  : 37,
6725		upArrow    : 38,
6726		rightArrow : 39,
6727		downArrow  : 40
6728	  },
6729	
6730	  selector : {
6731		addition     : '.addition',
6732		dropdown     : '.ui.dropdown',
6733		hidden       : '.hidden',
6734		icon         : '> .dropdown.icon',
6735		input        : '> input[type="hidden"], > select',
6736		item         : '.item',
6737		label        : '> .label',
6738		remove       : '> .label > .delete.icon',
6739		siblingLabel : '.label',
6740		menu         : '.menu',
6741		message      : '.message',
6742		menuIcon     : '.dropdown.icon',
6743		search       : 'input.search, .menu > .search > input, .menu input.search',
6744		sizer        : '> input.sizer',
6745		text         : '> .text:not(.icon)',
6746		unselectable : '.disabled, .filtered'
6747	  },
6748	
6749	  className : {
6750		active      : 'active',
6751		addition    : 'addition',
6752		animating   : 'animating',
6753		clear       : 'clear',
6754		disabled    : 'disabled',
6755		empty       : 'empty',
6756		dropdown    : 'ui dropdown',
6757		filtered    : 'filtered',
6758		hidden      : 'hidden transition',
6759		item        : 'item',
6760		label       : 'ui label',
6761		loading     : 'loading',
6762		menu        : 'menu',
6763		message     : 'message',
6764		multiple    : 'multiple',
6765		placeholder : 'default',
6766		sizer       : 'sizer',
6767		search      : 'search',
6768		selected    : 'selected',
6769		selection   : 'selection',
6770		upward      : 'upward',
6771		leftward    : 'left',
6772		visible     : 'visible'
6773	  }
6774	
6775	};
6776	
6777	/* Templates */
6778	$.fn.dropdown.settings.templates = {
6779	
6780	  // generates dropdown from select values
6781	  dropdown: function(select) {
6782		var
6783		  placeholder = select.placeholder || false,
6784		  values      = select.values || {},
6785		  html        = ''
6786		;
6787		html +=  '<i class="dropdown icon"></i>';
6788		if(select.placeholder) {
6789		  html += '<div class="default text">' + placeholder + '</div>';
6790		}
6791		else {
6792		  html += '<div class="text"></div>';
6793		}
6794		html += '<div class="menu">';
6795		$.each(select.values, function(index, option) {
6796		  html += (option.disabled)
6797			? '<div class="disabled item" data-value="' + option.value + '">' + option.name + '</div>'
6798			: '<div class="item" data-value="' + option.value + '">' + option.name + '</div>'
6799		  ;
6800		});
6801		html += '</div>';
6802		return html;
6803	  },
6804	
6805	  // generates just menu from select
6806	  menu: function(response, fields) {
6807		var
6808		  values = response[fields.values] || {},
6809		  html   = ''
6810		;
6811		$.each(values, function(index, option) {
6812		  var
6813			maybeText = (option[fields.text])
6814			  ? 'data-text="' + option[fields.text] + '"'
6815			  : '',
6816			maybeDisabled = (option[fields.disabled])
6817			  ? 'disabled '
6818			  : ''
6819		  ;
6820		  html += '<div class="'+ maybeDisabled +'item" data-value="' + option[fields.value] + '"' + maybeText + '>';
6821		  html +=   option[fields.name];
6822		  html += '</div>';
6823		});
6824		return html;
6825	  },
6826	
6827	  // generates label for multiselect
6828	  label: function(value, text) {
vendor: 4,352 bytes, lines 6829-7017
6829		return text + '<i class="delete icon"></i>';
6830	  },
6831	
6832	
6833	  // generates messages like "No results"
6834	  message: function(message) {
6835		return message;
6836	  },
6837	
6838	  // generates user addition to selection menu
6839	  addition: function(choice) {
6840		return choice;
6841	  }
6842	
6843	};
6844	
6845	})( jQuery, window, document );
6846	/*!
6847 * # Semantic UI 2.4.1 - Transition
6848 * http://github.com/semantic-org/semantic-ui/
6849 *
6850 *
6851 * Released under the MIT license
6852 * http://opensource.org/licenses/MIT
6853 *
6854 */
6855
6856;(function ($, window, document, undefined) {
6857
6858	'use strict';
6859	
6860	window = (typeof window != 'undefined' && window.Math == Math)
6861	  ? window
6862	  : (typeof self != 'undefined' && self.Math == Math)
6863		? self
6864		: Function('return this')()
6865	;
6866	
6867	$.fn.transition = function() {
6868	  var
6869		$allModules     = $(this),
6870		moduleSelector  = $allModules.selector || '',
6871	
6872		time            = new Date().getTime(),
6873		performance     = [],
6874	
6875		moduleArguments = arguments,
6876		query           = moduleArguments[0],
6877		queryArguments  = [].slice.call(arguments, 1),
6878		methodInvoked   = (typeof query === 'string'),
6879	
6880		requestAnimationFrame = window.requestAnimationFrame
6881		  || window.mozRequestAnimationFrame
6882		  || window.webkitRequestAnimationFrame
6883		  || window.msRequestAnimationFrame
6884		  || function(callback) { setTimeout(callback, 0); },
6885	
6886		returnedValue
6887	  ;
6888	  $allModules
6889		.each(function(index) {
6890		  var
6891			$module  = $(this),
6892			element  = this,
6893	
6894			// set at run time
6895			settings,
6896			instance,
6897	
6898			error,
6899			className,
6900			metadata,
6901			animationEnd,
6902			animationName,
6903	
6904			namespace,
6905			moduleNamespace,
6906			eventNamespace,
6907			module
6908		  ;
6909	
6910		  module = {
6911	
6912			initialize: function() {
6913	
6914			  // get full settings
6915			  settings        = module.get.settings.apply(element, moduleArguments);
6916	
6917			  // shorthand
6918			  className       = settings.className;
6919			  error           = settings.error;
6920			  metadata        = settings.metadata;
6921	
6922			  // define namespace
6923			  eventNamespace  = '.' + settings.namespace;
6924			  moduleNamespace = 'module-' + settings.namespace;
6925			  instance        = $module.data(moduleNamespace) || module;
6926	
6927			  // get vendor specific events
6928			  animationEnd    = module.get.animationEndEvent();
6929	
6930			  if(methodInvoked) {
6931				methodInvoked = module.invoke(query);
6932			  }
6933	
6934			  // method not invoked, lets run an animation
6935			  if(methodInvoked === false) {
6936				module.verbose('Converted arguments into settings object', settings);
6937				if(settings.interval) {
6938				  module.delay(settings.animate);
6939				}
6940				else  {
6941				  module.animate();
6942				}
6943				module.instantiate();
6944			  }
6945			},
6946	
6947			instantiate: function() {
6948			  module.verbose('Storing instance of module', module);
6949			  instance = module;
6950			  $module
6951				.data(moduleNamespace, instance)
6952			  ;
6953			},
6954	
6955			destroy: function() {
6956			  module.verbose('Destroying previous module for', element);
6957			  $module
6958				.removeData(moduleNamespace)
6959			  ;
6960			},
6961	
6962			refresh: function() {
6963			  module.verbose('Refreshing display type on next animation');
6964			  delete module.displayType;
6965			},
6966	
6967			forceRepaint: function() {
6968			  module.verbose('Forcing element repaint');
6969			  var
6970				$parentElement = $module.parent(),
6971				$nextElement = $module.next()
6972			  ;
6973			  if($nextElement.length === 0) {
6974				$module.detach().appendTo($parentElement);
6975			  }
6976			  else {
6977				$module.detach().insertBefore($nextElement);
6978			  }
6979			},
6980	
6981			repaint: function() {
6982			  module.verbose('Repainting element');
6983			  var
6984				fakeAssignment = element.offsetWidth
6985			  ;
6986			},
6987	
6988			delay: function(interval) {
6989			  var
6990				direction = module.get.animationDirection(),
6991				shouldReverse,
6992				delay
6993			  ;
6994			  if(!direction) {
6995				direction = module.can.transition()
6996				  ? module.get.direction()
6997				  : 'static'
6998				;
6999			  }
7000			  interval = (interval !== undefined)
7001				? interval
7002				: settings.interval
7003			  ;
7004			  shouldReverse = (settings.reverse == 'auto' && direction == className.outward);
7005			  delay = (shouldReverse || settings.reverse == true)
7006				? ($allModules.length - index) * settings.interval
7007				: index * settings.interval
7008			  ;
7009			  module.debug('Delaying animation by', delay);
7010			  setTimeout(module.animate, delay);
7011			},
7012	
7013			animate: function(overrideSettings) {
7014			  settings = overrideSettings || settings;
7015			  if(!module.is.supported()) {
7016				module.error(error.support);
7017				return false;
vendor: 19,967 bytes, lines 7018-7764
7018			  }
7019			  module.debug('Preparing animation', settings.animation);
7020			  if(module.is.animating()) {
7021				if(settings.queue) {
7022				  if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {
7023					module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);
7024				  }
7025				  else {
7026					module.queue(settings.animation);
7027				  }
7028				  return false;
7029				}
7030				else if(!settings.allowRepeats && module.is.occurring()) {
7031				  module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);
7032				  return false;
7033				}
7034				else {
7035				  module.debug('New animation started, completing previous early', settings.animation);
7036				  instance.complete();
7037				}
7038			  }
7039			  if( module.can.animate() ) {
7040				module.set.animating(settings.animation);
7041			  }
7042			  else {
7043				module.error(error.noAnimation, settings.animation, element);
7044			  }
7045			},
7046	
7047			reset: function() {
7048			  module.debug('Resetting animation to beginning conditions');
7049			  module.remove.animationCallbacks();
7050			  module.restore.conditions();
7051			  module.remove.animating();
7052			},
7053	
7054			queue: function(animation) {
7055			  module.debug('Queueing animation of', animation);
7056			  module.queuing = true;
7057			  $module
7058				.one(animationEnd + '.queue' + eventNamespace, function() {
7059				  module.queuing = false;
7060				  module.repaint();
7061				  module.animate.apply(this, settings);
7062				})
7063			  ;
7064			},
7065	
7066			complete: function (event) {
7067			  module.debug('Animation complete', settings.animation);
7068			  module.remove.completeCallback();
7069			  module.remove.failSafe();
7070			  if(!module.is.looping()) {
7071				if( module.is.outward() ) {
7072				  module.verbose('Animation is outward, hiding element');
7073				  module.restore.conditions();
7074				  module.hide();
7075				}
7076				else if( module.is.inward() ) {
7077				  module.verbose('Animation is outward, showing element');
7078				  module.restore.conditions();
7079				  module.show();
7080				}
7081				else {
7082				  module.verbose('Static animation completed');
7083				  module.restore.conditions();
7084				  settings.onComplete.call(element);
7085				}
7086			  }
7087			},
7088	
7089			force: {
7090			  visible: function() {
7091				var
7092				  style          = $module.attr('style'),
7093				  userStyle      = module.get.userStyle(),
7094				  displayType    = module.get.displayType(),
7095				  overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',
7096				  currentDisplay = $module.css('display'),
7097				  emptyStyle     = (style === undefined || style === '')
7098				;
7099				if(currentDisplay !== displayType) {
7100				  module.verbose('Overriding default display to show element', displayType);
7101				  $module
7102					.attr('style', overrideStyle)
7103				  ;
7104				}
7105				else if(emptyStyle) {
7106				  $module.removeAttr('style');
7107				}
7108			  },
7109			  hidden: function() {
7110				var
7111				  style          = $module.attr('style'),
7112				  currentDisplay = $module.css('display'),
7113				  emptyStyle     = (style === undefined || style === '')
7114				;
7115				if(currentDisplay !== 'none' && !module.is.hidden()) {
7116				  module.verbose('Overriding default display to hide element');
7117				  $module
7118					.css('display', 'none')
7119				  ;
7120				}
7121				else if(emptyStyle) {
7122				  $module
7123					.removeAttr('style')
7124				  ;
7125				}
7126			  }
7127			},
7128	
7129			has: {
7130			  direction: function(animation) {
7131				var
7132				  hasDirection = false
7133				;
7134				animation = animation || settings.animation;
7135				if(typeof animation === 'string') {
7136				  animation = animation.split(' ');
7137				  $.each(animation, function(index, word){
7138					if(word === className.inward || word === className.outward) {
7139					  hasDirection = true;
7140					}
7141				  });
7142				}
7143				return hasDirection;
7144			  },
7145			  inlineDisplay: function() {
7146				var
7147				  style = $module.attr('style') || ''
7148				;
7149				return $.isArray(style.match(/display.*?;/, ''));
7150			  }
7151			},
7152	
7153			set: {
7154			  animating: function(animation) {
7155				var
7156				  animationClass,
7157				  direction
7158				;
7159				// remove previous callbacks
7160				module.remove.completeCallback();
7161	
7162				// determine exact animation
7163				animation      = animation || settings.animation;
7164				animationClass = module.get.animationClass(animation);
7165	
7166				// save animation class in cache to restore class names
7167				module.save.animation(animationClass);
7168	
7169				// override display if necessary so animation appears visibly
7170				module.force.visible();
7171	
7172				module.remove.hidden();
7173				module.remove.direction();
7174	
7175				module.start.animation(animationClass);
7176	
7177			  },
7178			  duration: function(animationName, duration) {
7179				duration = duration || settings.duration;
7180				duration = (typeof duration == 'number')
7181				  ? duration + 'ms'
7182				  : duration
7183				;
7184				if(duration || duration === 0) {
7185				  module.verbose('Setting animation duration', duration);
7186				  $module
7187					.css({
7188					  'animation-duration':  duration
7189					})
7190				  ;
7191				}
7192			  },
7193			  direction: function(direction) {
7194				direction = direction || module.get.direction();
7195				if(direction == className.inward) {
7196				  module.set.inward();
7197				}
7198				else {
7199				  module.set.outward();
7200				}
7201			  },
7202			  looping: function() {
7203				module.debug('Transition set to loop');
7204				$module
7205				  .addClass(className.looping)
7206				;
7207			  },
7208			  hidden: function() {
7209				$module
7210				  .addClass(className.transition)
7211				  .addClass(className.hidden)
7212				;
7213			  },
7214			  inward: function() {
7215				module.debug('Setting direction to inward');
7216				$module
7217				  .removeClass(className.outward)
7218				  .addClass(className.inward)
7219				;
7220			  },
7221			  outward: function() {
7222				module.debug('Setting direction to outward');
7223				$module
7224				  .removeClass(className.inward)
7225				  .addClass(className.outward)
7226				;
7227			  },
7228			  visible: function() {
7229				$module
7230				  .addClass(className.transition)
7231				  .addClass(className.visible)
7232				;
7233			  }
7234			},
7235	
7236			start: {
7237			  animation: function(animationClass) {
7238				animationClass = animationClass || module.get.animationClass();
7239				module.debug('Starting tween', animationClass);
7240				$module
7241				  .addClass(animationClass)
7242				  .one(animationEnd + '.complete' + eventNamespace, module.complete)
7243				;
7244				if(settings.useFailSafe) {
7245				  module.add.failSafe();
7246				}
7247				module.set.duration(settings.duration);
7248				settings.onStart.call(element);
7249			  }
7250			},
7251	
7252			save: {
7253			  animation: function(animation) {
7254				if(!module.cache) {
7255				  module.cache = {};
7256				}
7257				module.cache.animation = animation;
7258			  },
7259			  displayType: function(displayType) {
7260				if(displayType !== 'none') {
7261				  $module.data(metadata.displayType, displayType);
7262				}
7263			  },
7264			  transitionExists: function(animation, exists) {
7265				$.fn.transition.exists[animation] = exists;
7266				module.verbose('Saving existence of transition', animation, exists);
7267			  }
7268			},
7269	
7270			restore: {
7271			  conditions: function() {
7272				var
7273				  animation = module.get.currentAnimation()
7274				;
7275				if(animation) {
7276				  $module
7277					.removeClass(animation)
7278				  ;
7279				  module.verbose('Removing animation class', module.cache);
7280				}
7281				module.remove.duration();
7282			  }
7283			},
7284	
7285			add: {
7286			  failSafe: function() {
7287				var
7288				  duration = module.get.duration()
7289				;
7290				module.timer = setTimeout(function() {
7291				  $module.triggerHandler(animationEnd);
7292				}, duration + settings.failSafeDelay);
7293				module.verbose('Adding fail safe timer', module.timer);
7294			  }
7295			},
7296	
7297			remove: {
7298			  animating: function() {
7299				$module.removeClass(className.animating);
7300			  },
7301			  animationCallbacks: function() {
7302				module.remove.queueCallback();
7303				module.remove.completeCallback();
7304			  },
7305			  queueCallback: function() {
7306				$module.off('.queue' + eventNamespace);
7307			  },
7308			  completeCallback: function() {
7309				$module.off('.complete' + eventNamespace);
7310			  },
7311			  display: function() {
7312				$module.css('display', '');
7313			  },
7314			  direction: function() {
7315				$module
7316				  .removeClass(className.inward)
7317				  .removeClass(className.outward)
7318				;
7319			  },
7320			  duration: function() {
7321				$module
7322				  .css('animation-duration', '')
7323				;
7324			  },
7325			  failSafe: function() {
7326				module.verbose('Removing fail safe timer', module.timer);
7327				if(module.timer) {
7328				  clearTimeout(module.timer);
7329				}
7330			  },
7331			  hidden: function() {
7332				$module.removeClass(className.hidden);
7333			  },
7334			  visible: function() {
7335				$module.removeClass(className.visible);
7336			  },
7337			  looping: function() {
7338				module.debug('Transitions are no longer looping');
7339				if( module.is.looping() ) {
7340				  module.reset();
7341				  $module
7342					.removeClass(className.looping)
7343				  ;
7344				}
7345			  },
7346			  transition: function() {
7347				$module
7348				  .removeClass(className.visible)
7349				  .removeClass(className.hidden)
7350				;
7351			  }
7352			},
7353			get: {
7354			  settings: function(animation, duration, onComplete) {
7355				// single settings object
7356				if(typeof animation == 'object') {
7357				  return $.extend(true, {}, $.fn.transition.settings, animation);
7358				}
7359				// all arguments provided
7360				else if(typeof onComplete == 'function') {
7361				  return $.extend({}, $.fn.transition.settings, {
7362					animation  : animation,
7363					onComplete : onComplete,
7364					duration   : duration
7365				  });
7366				}
7367				// only duration provided
7368				else if(typeof duration == 'string' || typeof duration == 'number') {
7369				  return $.extend({}, $.fn.transition.settings, {
7370					animation : animation,
7371					duration  : duration
7372				  });
7373				}
7374				// duration is actually settings object
7375				else if(typeof duration == 'object') {
7376				  return $.extend({}, $.fn.transition.settings, duration, {
7377					animation : animation
7378				  });
7379				}
7380				// duration is actually callback
7381				else if(typeof duration == 'function') {
7382				  return $.extend({}, $.fn.transition.settings, {
7383					animation  : animation,
7384					onComplete : duration
7385				  });
7386				}
7387				// only animation provided
7388				else {
7389				  return $.extend({}, $.fn.transition.settings, {
7390					animation : animation
7391				  });
7392				}
7393			  },
7394			  animationClass: function(animation) {
7395				var
7396				  animationClass = animation || settings.animation,
7397				  directionClass = (module.can.transition() && !module.has.direction())
7398					? module.get.direction() + ' '
7399					: ''
7400				;
7401				return className.animating + ' '
7402				  + className.transition + ' '
7403				  + directionClass
7404				  + animationClass
7405				;
7406			  },
7407			  currentAnimation: function() {
7408				return (module.cache && module.cache.animation !== undefined)
7409				  ? module.cache.animation
7410				  : false
7411				;
7412			  },
7413			  currentDirection: function() {
7414				return module.is.inward()
7415				  ? className.inward
7416				  : className.outward
7417				;
7418			  },
7419			  direction: function() {
7420				return module.is.hidden() || !module.is.visible()
7421				  ? className.inward
7422				  : className.outward
7423				;
7424			  },
7425			  animationDirection: function(animation) {
7426				var
7427				  direction
7428				;
7429				animation = animation || settings.animation;
7430				if(typeof animation === 'string') {
7431				  animation = animation.split(' ');
7432				  // search animation name for out/in class
7433				  $.each(animation, function(index, word){
7434					if(word === className.inward) {
7435					  direction = className.inward;
7436					}
7437					else if(word === className.outward) {
7438					  direction = className.outward;
7439					}
7440				  });
7441				}
7442				// return found direction
7443				if(direction) {
7444				  return direction;
7445				}
7446				return false;
7447			  },
7448			  duration: function(duration) {
7449				duration = duration || settings.duration;
7450				if(duration === false) {
7451				  duration = $module.css('animation-duration') || 0;
7452				}
7453				return (typeof duration === 'string')
7454				  ? (duration.indexOf('ms') > -1)
7455					? parseFloat(duration)
7456					: parseFloat(duration) * 1000
7457				  : duration
7458				;
7459			  },
7460			  displayType: function(shouldDetermine) {
7461				shouldDetermine = (shouldDetermine !== undefined)
7462				  ? shouldDetermine
7463				  : true
7464				;
7465				if(settings.displayType) {
7466				  return settings.displayType;
7467				}
7468				if(shouldDetermine && $module.data(metadata.displayType) === undefined) {
7469				  // create fake element to determine display state
7470				  module.can.transition(true);
7471				}
7472				return $module.data(metadata.displayType);
7473			  },
7474			  userStyle: function(style) {
7475				style = style || $module.attr('style') || '';
7476				return style.replace(/display.*?;/, '');
7477			  },
7478			  transitionExists: function(animation) {
7479				return $.fn.transition.exists[animation];
7480			  },
7481			  animationStartEvent: function() {
7482				var
7483				  element     = document.createElement('div'),
7484				  animations  = {
7485					'animation'       :'animationstart',
7486					'OAnimation'      :'oAnimationStart',
7487					'MozAnimation'    :'mozAnimationStart',
7488					'WebkitAnimation' :'webkitAnimationStart'
7489				  },
7490				  animation
7491				;
7492				for(animation in animations){
7493				  if( element.style[animation] !== undefined ){
7494					return animations[animation];
7495				  }
7496				}
7497				return false;
7498			  },
7499			  animationEndEvent: function() {
7500				var
7501				  element     = document.createElement('div'),
7502				  animations  = {
7503					'animation'       :'animationend',
7504					'OAnimation'      :'oAnimationEnd',
7505					'MozAnimation'    :'mozAnimationEnd',
7506					'WebkitAnimation' :'webkitAnimationEnd'
7507				  },
7508				  animation
7509				;
7510				for(animation in animations){
7511				  if( element.style[animation] !== undefined ){
7512					return animations[animation];
7513				  }
7514				}
7515				return false;
7516			  }
7517	
7518			},
7519	
7520			can: {
7521			  transition: function(forced) {
7522				var
7523				  animation         = settings.animation,
7524				  transitionExists  = module.get.transitionExists(animation),
7525				  displayType       = module.get.displayType(false),
7526				  elementClass,
7527				  tagName,
7528				  $clone,
7529				  currentAnimation,
7530				  inAnimation,
7531				  directionExists
7532				;
7533				if( transitionExists === undefined || forced) {
7534				  module.verbose('Determining whether animation exists');
7535				  elementClass = $module.attr('class');
7536				  tagName      = $module.prop('tagName');
7537	
7538				  $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);
7539				  currentAnimation = $clone
7540					.addClass(animation)
7541					.removeClass(className.inward)
7542					.removeClass(className.outward)
7543					.addClass(className.animating)
7544					.addClass(className.transition)
7545					.css('animationName')
7546				  ;
7547				  inAnimation = $clone
7548					.addClass(className.inward)
7549					.css('animationName')
7550				  ;
7551				  if(!displayType) {
7552					displayType = $clone
7553					  .attr('class', elementClass)
7554					  .removeAttr('style')
7555					  .removeClass(className.hidden)
7556					  .removeClass(className.visible)
7557					  .show()
7558					  .css('display')
7559					;
7560					module.verbose('Determining final display state', displayType);
7561					module.save.displayType(displayType);
7562				  }
7563	
7564				  $clone.remove();
7565				  if(currentAnimation != inAnimation) {
7566					module.debug('Direction exists for animation', animation);
7567					directionExists = true;
7568				  }
7569				  else if(currentAnimation == 'none' || !currentAnimation) {
7570					module.debug('No animation defined in css', animation);
7571					return;
7572				  }
7573				  else {
7574					module.debug('Static animation found', animation, displayType);
7575					directionExists = false;
7576				  }
7577				  module.save.transitionExists(animation, directionExists);
7578				}
7579				return (transitionExists !== undefined)
7580				  ? transitionExists
7581				  : directionExists
7582				;
7583			  },
7584			  animate: function() {
7585				// can transition does not return a value if animation does not exist
7586				return (module.can.transition() !== undefined);
7587			  }
7588			},
7589	
7590			is: {
7591			  animating: function() {
7592				return $module.hasClass(className.animating);
7593			  },
7594			  inward: function() {
7595				return $module.hasClass(className.inward);
7596			  },
7597			  outward: function() {
7598				return $module.hasClass(className.outward);
7599			  },
7600			  looping: function() {
7601				return $module.hasClass(className.looping);
7602			  },
7603			  occurring: function(animation) {
7604				animation = animation || settings.animation;
7605				animation = '.' + animation.replace(' ', '.');
7606				return ( $module.filter(animation).length > 0 );
7607			  },
7608			  visible: function() {
7609				return $module.is(':visible');
7610			  },
7611			  hidden: function() {
7612				return $module.css('visibility') === 'hidden';
7613			  },
7614			  supported: function() {
7615				return(animationEnd !== false);
7616			  }
7617			},
7618	
7619			hide: function() {
7620			  module.verbose('Hiding element');
7621			  if( module.is.animating() ) {
7622				module.reset();
7623			  }
7624			  element.blur(); // IE will trigger focus change if element is not blurred before hiding
7625			  module.remove.display();
7626			  module.remove.visible();
7627			  module.set.hidden();
7628			  module.force.hidden();
7629			  settings.onHide.call(element);
7630			  settings.onComplete.call(element);
7631			  // module.repaint();
7632			},
7633	
7634			show: function(display) {
7635			  module.verbose('Showing element', display);
7636			  module.remove.hidden();
7637			  module.set.visible();
7638			  module.force.visible();
7639			  settings.onShow.call(element);
7640			  settings.onComplete.call(element);
7641			  // module.repaint();
7642			},
7643	
7644			toggle: function() {
7645			  if( module.is.visible() ) {
7646				module.hide();
7647			  }
7648			  else {
7649				module.show();
7650			  }
7651			},
7652	
7653			stop: function() {
7654			  module.debug('Stopping current animation');
7655			  $module.triggerHandler(animationEnd);
7656			},
7657	
7658			stopAll: function() {
7659			  module.debug('Stopping all animation');
7660			  module.remove.queueCallback();
7661			  $module.triggerHandler(animationEnd);
7662			},
7663	
7664			clear: {
7665			  queue: function() {
7666				module.debug('Clearing animation queue');
7667				module.remove.queueCallback();
7668			  }
7669			},
7670	
7671			enable: function() {
7672			  module.verbose('Starting animation');
7673			  $module.removeClass(className.disabled);
7674			},
7675	
7676			disable: function() {
7677			  module.debug('Stopping animation');
7678			  $module.addClass(className.disabled);
7679			},
7680	
7681			setting: function(name, value) {
7682			  module.debug('Changing setting', name, value);
7683			  if( $.isPlainObject(name) ) {
7684				$.extend(true, settings, name);
7685			  }
7686			  else if(value !== undefined) {
7687				if($.isPlainObject(settings[name])) {
7688				  $.extend(true, settings[name], value);
7689				}
7690				else {
7691				  settings[name] = value;
7692				}
7693			  }
7694			  else {
7695				return settings[name];
7696			  }
7697			},
7698			internal: function(name, value) {
7699			  if( $.isPlainObject(name) ) {
7700				$.extend(true, module, name);
7701			  }
7702			  else if(value !== undefined) {
7703				module[name] = value;
7704			  }
7705			  else {
7706				return module[name];
7707			  }
7708			},
7709			debug: function() {
7710			  if(!settings.silent && settings.debug) {
7711				if(settings.performance) {
7712				  module.performance.log(arguments);
7713				}
7714				else {
7715				  module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
7716				  module.debug.apply(console, arguments);
7717				}
7718			  }
7719			},
7720			verbose: function() {
7721			  if(!settings.silent && settings.verbose && settings.debug) {
7722				if(settings.performance) {
7723				  module.performance.log(arguments);
7724				}
7725				else {
7726				  module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
7727				  module.verbose.apply(console, arguments);
7728				}
7729			  }
7730			},
7731			error: function() {
7732			  if(!settings.silent) {
7733				module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
7734				module.error.apply(console, arguments);
7735			  }
7736			},
7737			performance: {
7738			  log: function(message) {
7739				var
7740				  currentTime,
7741				  executionTime,
7742				  previousTime
7743				;
7744				if(settings.performance) {
7745				  currentTime   = new Date().getTime();
7746				  previousTime  = time || currentTime;
7747				  executionTime = currentTime - previousTime;
7748				  time          = currentTime;
7749				  performance.push({
7750					'Name'           : message[0],
7751					'Arguments'      : [].slice.call(message, 1) || '',
7752					'Element'        : element,
7753					'Execution Time' : executionTime
7754				  });
7755				}
7756				clearTimeout(module.performance.timer);
7757				module.performance.timer = setTimeout(module.performance.display, 500);
7758			  },
7759			  display: function() {
7760				var
7761				  title = settings.name + ':',
7762				  totalTime = 0
7763				;
7764				time = false;
7765				clearTimeout(module.performance.timer);
7766				$.each(performance, function(index, data) {
7767				  totalTime += data['Execution Time'];
7768				});
7769				title += ' ' + totalTime + 'ms';
7770				if(moduleSelector) {
7771				  title += ' \'' + moduleSelector + '\'';
7772				}
7773				if($allModules.length > 1) {
7774				  title += ' ' + '(' + $allModules.length + ')';
7775				}
7776				if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
7777				  console.groupCollapsed(title);
7778				  if(console.table) {
7779					console.table(performance);
7780				  }
7781				  else {
7782					$.each(performance, function(index, data) {
7783					  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
7784					});
7785				  }
7786				  console.groupEnd();
7787				}
7788				performance = [];
7789			  }
7790			},
7791			// modified for transition to return invoke success
7792			invoke: function(query, passedArguments, context) {
7793			  var
7794				object = instance,
7795				maxDepth,
7796				found,
7797				response
7798			  ;
7799			  passedArguments = passedArguments || queryArguments;
7800			  context         = element         || context;
7801			  if(typeof query == 'string' && object !== undefined) {
7802				query    = query.split(/[\. ]/);
7803				maxDepth = query.length - 1;
7804				$.each(query, function(depth, value) {
7805				  var camelCaseValue = (depth != maxDepth)
7806					? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
7807					: query
7808				  ;
7809				  if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
7810					object = object[camelCaseValue];
7811				  }
7812				  else if( object[camelCaseValue] !== undefined ) {
7813					found = object[camelCaseValue];
7814					return false;
7815				  }
7816				  else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
7817					object = object[value];
7818				  }
7819				  else if( object[value] !== undefined ) {
7820					found = object[value];
7821					return false;
7822				  }
7823				  else {
7824					return false;
7825				  }
7826				});
7827			  }
7828			  if ( $.isFunction( found ) ) {
7829				response = found.apply(context, passedArguments);
7830			  }
7831			  else if(found !== undefined) {
7832				response = found;
7833			  }
7834	
7835			  if($.isArray(returnedValue)) {
7836				returnedValue.push(response);
7837			  }
7838			  else if(returnedValue !== undefined) {
7839				returnedValue = [returnedValue, response];
7840			  }
7841			  else if(response !== undefined) {
7842				returnedValue = response;
7843			  }
7844			  return (found !== undefined)
7845				? found
7846				: false
7847			  ;
7848			}
7849		  };
7850		  module.initialize();
7851		})
7852	  ;
7853	  return (returnedValue !== undefined)
7854		? returnedValue
7855		: this
7856	  ;
7857	};
7858	
7859	// Records if CSS transition is available
7860	$.fn.transition.exists = {};
7861	
7862	$.fn.transition.settings = {
7863	
7864	  // module info
7865	  name          : 'Transition',
7866	
7867	  // hide all output from this component regardless of other settings
7868	  silent        : false,
7869	
7870	  // debug content outputted to console
7871	  debug         : false,
7872	
7873	  // verbose debug output
7874	  verbose       : false,
7875	
7876	  // performance data output
7877	  performance   : true,
7878	
7879	  // event namespace
7880	  namespace     : 'transition',
7881	
7882	  // delay between animations in group
7883	  interval      : 0,
7884	
7885	  // whether group animations should be reversed
7886	  reverse       : 'auto',
7887	
7888	  // animation callback event
7889	  onStart       : function() {},
7890	  onComplete    : function() {},
7891	  onShow        : function() {},
7892	  onHide        : function() {},
7893	
7894	  // whether timeout should be used to ensure callback fires in cases animationend does not
7895	  useFailSafe   : true,
7896	
7897	  // delay in ms for fail safe
7898	  failSafeDelay : 100,
7899	
7900	  // whether EXACT animation can occur twice in a row
7901	  allowRepeats  : false,
7902	
7903	  // Override final display type on visible
7904	  displayType   : false,
7905	
7906	  // animation duration
7907	  animation     : 'fade',
7908	  duration      : false,
7909	
7910	  // new animations will occur after previous ones
7911	  queue         : true,
7912	
7913	  metadata : {
7914		displayType: 'display'
7915	  },
7916	
7917	  className   : {
7918		animating  : 'animating',
7919		disabled   : 'disabled',
7920		hidden     : 'hidden',
7921		inward     : 'in',
7922		loading    : 'loading',
7923		looping    : 'looping',
7924		outward    : 'out',
7925		transition : 'transition',
7926		visible    : 'visible'
7927	  },
7928	
7929	  // possible errors
7930	  error: {
7931		noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',
7932		repeated    : 'That animation is already occurring, cancelling repeated animation',
7933		method      : 'The method you called is not defined',
7934		support     : 'This browser does not support CSS animations'
7935	  }
7936	
7937	};
7938	
7939	
7940	})( jQuery, window, document );
7941	var DMS = DMS || {};
7942
7943(function(global) {
7944
7945    /* =========================================================
7946    
7947     BoxHeightAlign
7948     heightが決められないけれど横並びのときに美しく配置するための処理
7949     
7950    ========================================================= */
7951    var BoxHeightAlign = (function() {
7952        BoxHeightAlign.LAYOUT_CHANGE = "boxHeightLayoutChange";
7953        BoxHeightAlign.LAYOUT_INIT = "boxHeightLayoutInit";
7954
7955        function BoxHeightAlign(dom,options) {
7956            var that = this;
7957            this.dom = dom;
7958            this.alignItems = this.dom.find(".boxheight-align-item");
7959            that._boxItems = [];
7960            this.dom.find(".boxheight-align-item").each(function(index, el) {
7961                that._boxItems.push(new BoxItem($(el),that));
7962            });
7963            this.prevAlignNum = undefined;
7964            var defaultOptions = {
7965                isAll:false
7966            }
7967            this.options = $.extend(defaultOptions, options);
7968        }
7969
7970        BoxHeightAlign.prototype.init = function() {
7971            var that = this;
7972            this.update();
7973            this._checkImgLoad(this.update.bind(this));
7974        };
7975
7976        BoxHeightAlign.prototype._checkImgLoad = function(callback){
7977            var that = this;
7978            var numImage = this.dom.find(".boxheight-align-item img").length;
7979            var count = 0;
7980
7981            if(numImage == 0){
7982                $(that).trigger(BoxHeightAlign.LAYOUT_INIT);
7983            }
7984
7985            this.dom.find(".boxheight-align-item img").each(function(index, el) {
7986                var src = $(el).attr("src");
7987                var image = new Image();
7988                image.onload = function(){
7989                    checkComplete();
7990                }
7991                image.onerror = function(){
7992                    checkComplete();
7993                }
7994                image.src = src;
7995            });
7996
7997            function checkComplete(){
7998                count++;
7999                if(count == numImage){
8000                    $(that).trigger(BoxHeightAlign.LAYOUT_INIT);
8001                    callback();
8002                }
8003            }
8004        }
8005
8006        BoxHeightAlign.prototype.update = function() {
8007            var alignNum = this._getAlignNum();
8008            if(this.prevAlignNum != alignNum){
8009                $(this).trigger(BoxHeightAlign.LAYOUT_CHANGE,[alignNum]);
8010
8011                
8012            }
8013            this.prevAlignNum = alignNum;
8014            
8015            if(this.options.isAll){
8016                alignNum = this.alignItems.length;
8017            }
8018            var boxSet = [];
8019            for (var i = 0; i < this._boxItems.length; i++) {
8020                var boxIndex = Math.floor(i/(alignNum));
8021                if(!boxSet[boxIndex]){
8022                    boxSet[boxIndex] = [];
8023                }
8024                boxSet[boxIndex].push(this._boxItems[i]);
8025            }
8026            
8027            for (var i = 0; i < boxSet.length; i++) {
8028                this._alignHeight(boxSet[i]);
8029            };
8030
8031        }
8032
8033        BoxHeightAlign.prototype._getMaxHeight = function(heights){
8034            var maxHeights = [];
8035            for (var i = 0; i < heights.length; i++) {
8036                maxHeights[i] = 0;
8037            }
8038            
8039            for (var i = 0; i < heights.length; i++) {
8040                for (var j = 0; j < heights[i].length; j++) {
8041                    maxHeights[j] = heights[i][j] > maxHeights[j] ? heights[i][j] : maxHeights[j];
8042                }
8043            }
8044            return maxHeights;
8045        }      
8046
8047        BoxHeightAlign.prototype._alignHeight = function(boxSet){
8048            var heights = [];
8049            for (var i = 0; i < boxSet.length; i++) {
8050                var boxItem = boxSet[i];
8051                boxItem.boxInit();
8052                heights.push(boxItem.elementsHeight);
8053            }
8054            var maxHeights = this._getMaxHeight(heights);
8055
8056            for (var i = 0; i < boxSet.length; i++) {
8057                var boxItem = boxSet[i];
8058                boxItem.update(maxHeights);
8059                
8060            }
8061        }
8062
8063         BoxHeightAlign.prototype._resetHeight = function(boxSet){
8064            var heights = [];
8065            for (var i = 0; i < boxSet.length; i++) {
8066                var boxItem = boxSet[i];
8067                boxItem.update(undefined);
8068            }
8069          
8070        }
8071        
8072        BoxHeightAlign.prototype._getAlignNum = function() {
8073            var count = 0;
8074            var prevElementPos = undefined;
8075            this.alignItems.each(function(index, el) {
8076				if($(el).css("display").indexOf("none") <0){
8077	                if(prevElementPos !== undefined){
8078	                    if($(el).offset().top != prevElementPos){
8079	                        return false;
8080	                    }
8081	                }
8082	                count++;
8083	                prevElementPos = $(el).offset().top;
8084                }
8085            });
8086            return count;
8087        }
8088
8089        global.BoxHeightAlign = BoxHeightAlign;
8090        return BoxHeightAlign;
8091    }());
8092
8093
8094    var BoxItem = (function() {
8095
8096        function BoxItem(dom,delegate) {
8097            var that = this;
8098            this.dom = dom;
8099            this.elements = [];
8100            this.elementsHeight = [];
8101            this.dom.find(".boxheight-align-item-element").each(function(index, el) {
8102                that.elements.push($(el));
8103            });
8104
8105            $(delegate).on(BoxHeightAlign.LAYOUT_CHANGE,function(e,numAlign){
8106                
8107                if(numAlign == 1){
8108                    that.isAlign = false;
8109                }else{
8110                    that.isAlign = true;
8111                }
8112            });
8113
8114
8115        }
8116
8117        BoxItem.prototype.init = function() {
8118            var that = this;
8119        };
8120        BoxItem.prototype.boxInit = function() {
8121            this._boxInit();
8122        }
8123        BoxItem.prototype.update = function(maxHeights) {
8124
8125            if(this.elements.length == 0){
8126                if(!this.isAlign){
8127                    this.dom.css('height','auto');    
8128                }else{
8129                    this.elementsHeight[0] = this.dom.height(maxHeights[0]);    
8130                }
8131
8132                
8133                return;
8134            }
8135
8136            for (var i = 0; i < this.elements.length; i++) {
8137                if(!this.isAlign){
8138                    this.elements[i].css('height','auto');
8139                }else{
8140                   this.elements[i].height(maxHeights[i]);    
8141                }
8142                
8143            }
8144        }
8145        BoxItem.prototype._boxInit = function(){
8146            this.elementsHeight = [];
8147            if(this.elements.length == 0){
8148                this.dom.css('height','auto');
8149                this.elementsHeight[0] = this.dom.height();
8150                return;
8151            }
8152            for (var i = 0; i < this.elements.length; i++) {
8153                this.elements[i].css('height','auto');
8154                this.elementsHeight[i] = this.elements[i].height();
8155            }
8156
8157        };
8158
8159        
8160        global.BoxItem = BoxItem;
8161
8162        return BoxItem;
8163    }());
8164
8165
8166    var boxAligns = [];
8167
8168    BoxHeightAlign.init = function(options){
8169        var defaultOptions = {
8170            isAll:false
8171        }
8172        var initOption = $.extend(defaultOptions, options);
8173        
8174        if($('.boxheight-align-item-container').length == 0) return;
8175
8176        $('.boxheight-align-item-container').each(function(index, el) {
8177            var boxalignItem = new BoxHeightAlign($(el),initOption);
8178            boxalignItem.init();
8179            boxAligns.push(boxalignItem);
8180        });
8181    }
8182
8183    BoxHeightAlign.update = function(){
8184        if(boxAligns.length == 0) return;
8185        for (var i = 0; i < boxAligns.length; i++) {
8186            boxAligns[i].update();
8187        }
8188    }
8189
8190}(DMS));
8191
8192$(function () {
8193	$(".hover-button").hover(function(){
8194		if($(this)[0].tagName == 'A' && $(this).attr('href') == undefined) return
8195			
8196			$(this).addClass("hover-effect-on");
8197		}, function(){
8198			$(this).removeClass("hover-effect-on");
8199	});
8200});
8201
8202var _mark_noimage_ary = [];
8203var _mark_noimage_flg = true;
8204function markNoimage(_this) {
8205	if (_mark_noimage_flg) {
8206		_mark_noimage_ary.push(_this);
8207	}
8208}
8209
8210var DMS = DMS || {};
8211$(function (global) {
8212
8213	function setNoImage(_target, _img) {
8214		var sizeDetect = $("#size-detect").css("font-family").replace('"', "").replace("'", "");
8215		var _size = "pc";
8216		if (sizeDetect.indexOf("sp") >= 0) {
8217			_size = "sp";
8218		}
8219		_target.attr({
8220			src: _img,
8221			alt: 'no image'
8222		}).addClass("set-noimage-" + _size);
8223	}
8224
8225	function setNoImageEvent(_target_3_2, _target_1_1, _target_16_9, _target_4_1, _target_8_3,_target_2_3,_target_3_1) {
8226		var _dir_base = "/assets/a/";
8227		if (!$("html").hasClass("theme-all")) {
8228			_dir_base = "assets/";
8229		}
8230
8231		_target_3_2.on("error", () => {
8232			setNoImage($(this), _dir_base + 'images/common/noimage-3-2.png');
8233		});
8234		_target_1_1.on("error", () => {
8235			setNoImage($(this), _dir_base + 'images/common/noimage-1-1.png');
8236		});
8237		_target_16_9.on("error", () => {
8238			setNoImage($(this), _dir_base + 'images/common/noimage-16-9.png');
8239		});
8240		_target_4_1.on("error", () => {
8241			setNoImage($(this), _dir_base + 'images/common/noimage-4-1.png');
8242		});
8243		_target_8_3.on("error", () => {
8244			setNoImage($(this), _dir_base + 'images/common/noimage-8-3.png');
8245		});
8246		_target_2_3.on("error", () => {
8247			setNoImage($(this), _dir_base + 'images/common/noimage-8-3.png');
8248		});
8249		_target_3_1.on("error", () => {
8250			setNoImage($(this), _dir_base + 'images/common/noimage-8-3.png');
8251		});
8252
8253
8254	}
8255
8256	function checkAndSetNoImage(_target) {
8257		var _dir_base = "/assets/a/";
8258		if (!$("html").hasClass("theme-all")) {
8259			_dir_base = "assets/";
8260		}
8261
8262		if (_target.hasClass("auto-noimage-3-2")) {
8263			setNoImage(_target, _dir_base + 'images/common/noimage-3-2.png');
8264		} else if (_target.hasClass("auto-noimage-1-1")) {
8265			setNoImage(_target, _dir_base + 'mages/common/noimage-1-1.png');
8266		} else if (_target.hasClass("auto-noimage-16-9")) {
8267			setNoImage(_target, _dir_base + 'images/common/noimage-16-9.png');
8268		} else if (_target.hasClass("auto-noimage-4-1")) {
8269			setNoImage(_target, _dir_base + 'images/common/noimage-4-1.png');
8270		} else if (_target.hasClass("auto-noimage-8-3")) {
8271			setNoImage(_target, _dir_base + 'images/common/noimage-8-3.png');
8272		} else if (_target.hasClass("auto-noimage-2-3")) {
8273			setNoImage(_target, _dir_base + 'images/common/noimage-8-3.png');
8274		} else if (_target.hasClass("auto-noimage-3-1")) {
8275			setNoImage(_target, _dir_base + 'images/common/noimage-8-3.png');
8276		}
8277	}
8278
8279	function checkImage(_target) {
8280		setNoImageEvent(
8281			$(_target).find('.auto-noimage-3-2'),
8282			$(_target).find('.auto-noimage-1-1'),
8283			$(_target).find('.auto-noimage-16-9'),
8284			$(_target).find('.auto-noimage-4-1'),
8285			$(_target).find('.auto-noimage-8-3'),
8286			$(_target).find('.auto-noimage-2-3'),
8287			$(_target).find('.auto-noimage-3-1')
8288		);
8289	}
8290
8291	function replaceSrc(_o) {
8292		var _target = _o.target;
8293		var _dataname;
8294		var _dataaltname;
8295		if (_o.dataname) {
8296			_dataname = _o.dataname;
8297			_dataaltname = _o.dataname + "-alt";
8298		}
8299		var _datasrc;
8300		var _dataalt;
8301		if (_o.datasrc) {
8302			_datasrc = _o.datasrc;
8303			_dataalt = "";
8304		}
8305
8306		var _html = $(_target.prop('outerHTML'));
8307		var _dummy_png_flag = false;
8308		if (_dataname) {
8309			_html.attr("src", _html.data(_dataname));
8310			_html.attr("alt", _html.data(_dataaltname));
8311			if (_html.data(_dataname).indexOf("/dummy.png") >= 0) _dummy_png_flag = true;
8312		} else if (_datasrc) {
8313			_html.attr("src", _datasrc);
8314			_html.attr("alt", _dataalt);
8315			if (_datasrc.indexOf("/dummy.png") >= 0) _dummy_png_flag = true;
8316		}
8317		_target.replaceWith(_html);
8318		if (_html.hasClass("delayload")) {
8319			_html.fadeTo(0, 0).delay(200).fadeTo(300, 1);
8320		}
8321		if (_html.hasClass("none-dummy")) {
8322			if (_html.hasClass("none-dummy-parent")) {
8323				if (_dummy_png_flag) {
8324					_html.parent().hide();
8325				} else {
8326					_html.parent().show();
8327				}
8328			} else {
8329				if (_dummy_png_flag) {
8330					_html.hide();
8331				} else {
8332					_html.show();
8333				}
8334			}
8335		}
8336		_html.data("loaded", "true");
8337		if (_html.hasClass("auto-noimage-3-2") || _html.hasClass("auto-noimage-1-1") || _html.hasClass("auto-noimage-16-9") || _html.hasClass("auto-noimage-4-1") || _html.hasClass("auto-noimage-8-3") || _html.hasClass("auto-noimage-2-3") || _html.hasClass("auto-noimage-3-1")) {
8338			DMS.checkImage(_html.parent());
8339		}
8340
8341	}
8342
8343
8344
8345	(function (global) {
8346		global.checkImage = checkImage;
8347	}(DMS));
8348
8349	$(function () {
8350		_mark_noimage_flg = false;
8351		for (var i = 0; i < _mark_noimage_ary.length; i++) {
8352			checkAndSetNoImage($(_mark_noimage_ary[i]));
8353		}
8354		setNoImageEvent(
8355			$('.auto-noimage-3-2'),
8356			$('.auto-noimage-1-1'),
8357			$('.auto-noimage-16-9'),
8358			$('.auto-noimage-4-1'),
8359			$('.auto-noimage-8-3'),
8360			$('.auto-noimage-2-3'),
8361			$('.auto-noimage-3-1')
8362		);
8363	});
8364
8365
8366	$(function () {
8367
8368		var sizeDetect;
8369		var breakSize;
8370		var _last_breakSize = "none";
8371		var setSizeDetect = function () {
8372
8373			sizeDetect = $("#size-detect").css("font-family").replace('"', "").replace("'", "");
8374			breakSize = "pc";
8375			if (sizeDetect.indexOf("sp") >= 0) {
8376				breakSize = "sp";
8377			}
8378		}
8379		var checkAndShow = function () {
8380			var _top = $(window).scrollTop();
8381			var _height = $(window).height();
8382			var _img_list = $("img.delayload");
8383			for (var i = 0; i < _img_list.length; i++) {
8384				var _target = $(_img_list[i]);
8385				if (_target && _target.data("loaded") != "true") {
8386					var _my_top = _target.offset().top;
8387					var _my_height = _target.height();
8388
8389					if (!_target.is(':hidden') && _top <= _my_top + _my_height && _my_top < _top + _height) {
8390						if (breakSize != "sp") {
8391							// pc , tab
8392							if (_target.data("pc")) {
8393								replaceSrc({ target: _target, dataname: "pc" });
8394								_last_breakSize = breakSize;
8395
8396							} else {
8397								if (_target.data("delayload")) {
8398									replaceSrc({ target: _target, dataname: "delayload" });
8399									_last_breakSize = breakSize;
8400								} else {
8401									// none
8402									if (_target.hasClass("check-empty-data")) {
8403										checkAndSetNoImage(_target);
8404									} else {
8405										if ($("html").hasClass("theme-all")) {
8406											replaceSrc({ target: _target, datasrc: "/assets/a/images/image-0001/dummy.png" });
8407										} else {
8408											replaceSrc({ target: _target, datasrc: "assets/images/dummy.png" });
8409										}
8410									}
8411								}
8412							}
8413						} else {
8414							// sp
8415							if (_target.data("sp")) {
8416								replaceSrc({ target: _target, dataname: "sp" });
8417								_last_breakSize = breakSize;
8418							} else {
8419								if (_target.data("delayload")) {
8420									replaceSrc({ target: _target, dataname: "delayload" });
8421									_last_breakSize = breakSize;
8422								} else {
8423									// none
8424									if (_target.data("pc")) {
8425										replaceSrc({ target: _target, dataname: "pc" });
8426									} else {
8427										// none
8428										if (_target.hasClass("check-empty-data")) {
8429											checkAndSetNoImage(_target);
8430										} else {
8431											if ($("html").hasClass("theme-all")) {
8432												replaceSrc({ target: _target, datasrc: "/assets/a/images/image-0001/dummy.png" });
8433											} else {
8434												replaceSrc({ target: _target, datasrc: "assets/images/dummy.png" });
8435											}
8436										}
8437									}
8438								}
8439							}
8440						}
8441					}
8442
8443				}
8444			}
8445		}
8446
8447		setSizeDetect();
8448
8449
8450		$(window).scroll(function () {
8451			checkAndShow();
8452		});
8453		$(window).resize(function () {
8454			setSizeDetect();
8455			checkAndShow();
8456		});
8457		$("#content").mouseup(function () {
8458			checkAndShow();
8459			setTimeout(function () {
8460				checkAndShow();
8461			}, 100);
8462		});
8463		checkAndShow();
8464
8465		global.checkDelayLoad = function (_target) {
8466			setSizeDetect();
8467			checkAndShow();
8468		}
8469
8470
8471
8472		var _last_breakSize2;
8473		var checkAndChangeImage = function (_target) {
8474			var _top = $(window).scrollTop();
8475			var _height = $(window).height();
8476			_target.data("loaded", "false");
8477			if (_target) {
8478				if (breakSize != "sp") {
8479					// pc , tab
8480					if (_target.hasClass("delayload")) {
8481						// delayload function
8482						checkAndShow();
8483					} else {
8484						// non delayload
8485						if (_target.data("pc")) {
8486							replaceSrc({ target: _target, dataname: "pc" });
8487						} else {
8488							// none
8489							if (_target.hasClass("check-empty-data")) {
8490								checkAndSetNoImage(_target);
8491							} else {
8492								if ($("html").hasClass("theme-all")) {
8493									replaceSrc({ target: _target, datasrc: "/assets/a/images/image-0001/dummy.png" });
8494								} else {
8495									replaceSrc({ target: _target, datasrc: "/assets/images/dummy.png" });
8496								}
8497							}
8498						}
8499					}
8500				} else {
8501					// sp
8502					if (_target.hasClass("delayload")) {
8503						// delayload function
8504						checkAndShow();
8505					} else {
8506						// non delayload
8507						if (_target.data("sp")) {
8508							replaceSrc({ target: _target, dataname: "sp" });
8509						} else {
8510							// none
8511							if (_target.data("pc")) {
8512								replaceSrc({ target: _target, dataname: "pc" });
8513							} else {
8514								// none
8515								if (_target.hasClass("check-empty-data")) {
8516									checkAndSetNoImage(_target);
8517								} else {
8518									if ($("html").hasClass("theme-all")) {
8519										replaceSrc({ target: _target, datasrc: "/assets/a/images/image-0001/dummy.png" });
8520									} else {
8521										replaceSrc({ target: _target, datasrc: "/assets/images/dummy.png" });
8522									}
8523								}
8524							}
8525						}
8526					}
8527				}
8528			}
8529		}
8530
8531		var _image_array = $("img.device-image");
8532		var checkAllImage = function () {
8533			setSizeDetect();
8534			if (_last_breakSize2 != breakSize) {
8535				_image_array = $("img.device-image");
8536				for (var i = 0; i < _image_array.length; i++) {
8537					checkAndChangeImage($(_image_array[i]));
8538				}
8539			}
8540			_last_breakSize2 = breakSize;
8541		}
8542		if (_image_array.length > 0) {
8543			var _timeout_id;
8544			$(window).resize(function () {
8545				clearTimeout(_timeout_id);
8546				_timeout_id = setTimeout(function () {
8547					checkAllImage();
8548				}, 50);
8549			});
8550		}
8551		checkAllImage();
8552
8553	});
8554
8555
8556}(DMS));
8557
8558
8559
8560var DMS = DMS || {};
8561(function(global){
8562
8563	var getQueryList = function(){
8564		var _url = window.location.search.split("?");
8565		if(_url.length > 1){
8566			var _paras = _url[1].split("&");
8567			var _ret = {};
8568			for(var i=0;i<_paras.length;i++){
8569				var _obj = _paras[i].split("=");
8570				if(_obj[0] && _obj[0].length >= 1){
8571					_ret[_obj[0]] = _obj[1];
8572				}
8573			}
8574		}else{
8575			_ret = {};
8576		}
8577		return _ret;
8578	}
8579	var getQuery = function(_key){
8580		var _kv = getQueryList();
8581		return _kv[_key];
8582	}
8583	var getRegExpQuery = function(_regexp){
8584		var _myregex = new RegExp(_regexp);
8585		var _kv = getQueryList();
8586		var _obj_ary = [];
8587		for(var i in _kv){
8588			if(i.match(_myregex)){
8589				_obj_ary.push( {key:i, value:decodeURI(_kv[i])} );
8590			}
8591		}
8592		return _obj_ary;
8593	}
8594	var setQuery = function(_key, _value){
8595		var _kv = getQueryList();
8596		_kv[_key] = _value;
8597		replaceURL(_kv);
8598	}
8599	var openQuery = function(_url , _key , _value, _target){
8600		
8601	}
8602	var removeQuery = function(_key){
8603		var _kv = getQueryList();
8604		delete _kv[_key];
8605		replaceURL(_kv);
8606	}
8607	
8608	var replaceURL = function(_kv){
8609		var _url = "?";
8610		if(_kv){
8611			for(var i in _kv){
8612				if(_url.length > 1) _url +="&";
8613				_url += i+"="+_kv[i];
8614			}
8615			history.replaceState(null,null,window.location.origin+window.location.pathname+_url);
8616		}
8617	}
8618
8619
8620	global.getQueryList = getQueryList;
8621	global.getQuery = getQuery;
8622	global.setQuery = setQuery;
8623	global.openQuery = openQuery;
8624	global.removeQuery = removeQuery;
8625	global.getRegExpQuery = getRegExpQuery;
8626
8627})(DMS);
8628var DMS = DMS || {};
8629(function(global){
8630
8631	var initModalImage = function(){
8632		$(".modal-image").click(function(){
8633			var _href = $(this).attr("src");
8634			if(!_href){
8635				var _href = $(this).find("img").attr("src");
8636			}
8637			$.fancybox.open({
8638				width:"100%",
8639				height:"100%",
8640				padding:1,
8641				margin:20,
8642				closeBtn:false,
8643				closeClick:true,
8644				wrapCSS:"fancybox-radius",
8645				href:_href
8646				});
8647			$(".fancybox-radius").append("<div class='fancybox-radius-close'><img src='/assets/a/images/modalImage/icon-close.png'></div>");
8648			$(".fancybox-radius .fancybox-radius-close").click(function(){
8649				$.fancybox.close();
8650			});
8651		});
8652	}
8653	initModalImage();
8654	global.initModalImage = initModalImage
8655})(DMS);
8656
8657$(function () {
8658	$('.fancybox').fancybox();
8659	DMS.initModalImage();
8660});
8661var DMS = DMS || {};
8662$(function () {
8663  function setClick(_target) {
8664    _target.click(function () {
8665      var _element = $(this);
8666      var _para;
8667      var _myunit = _element.parents(".unit-wrapper");
8668      var _para1 = _myunit.data("unitname");
8669      var _para2;
8670      var _para_event_category;
8671      var _myid = _myunit.attr("id");
8672      var _sep = "";
8673      var _category = "dms";
8674      if (_para1 == undefined) {
8675        _para1 = "";
8676        _sep = "";
8677      } else {
8678        _sep = ":";
8679        _category = _para1;
8680      }
8681      _para1 = "id" + _para1;
8682      var _preview_flag = false;
8683      if (!_myid) {
8684        _myid = "";
8685      } else {
8686        _category = _myid + "_" + _para1;
8687        _para1 = _myid + "_" + _para1;
8688      }
8689      /* ONETAG AA */
8690      if (_element.hasClass("clicktag")) {
8691        _para = _element.data("clicktag");
8692        if (!_para) _para = "";
8693        if ((typeof sc).indexOf("undefined") < 0) {
8694          if ((typeof s_sc_cd).indexOf("undefined") < 0) {
8695            sc(_para1 + _sep + _para);
8696          } else {
8697            _preview_flag = true;
8698            console.log("preview click tag(sc -> s_sc_cd) " + _para1 + _sep + _para);
8699          }
8700        } else {
8701          _preview_flag = true;
8702          console.log("preview click tag(sc) " + _para1 + _sep + _para);
8703        }
8704      }
8705      if (_element.hasClass("asynctag")) {
8706        _para = _element.data("asynctag");
8707        if (!_para) _para = "";
8708        if ((typeof SCoutput_bc_aj).indexOf("undefined") < 0) {
8709          SCoutput_bc_aj(_para1 + _sep + _para);
8710        } else {
8711          _preview_flag = true;
8712          console.log("preview click tag(SCoutput_bc_aj) " + _para1 + _sep + _para);
8713        }
8714      }
8715      if (!_para) {
8716        _para = "";
8717      }
8718
8719      /* GA */
8720      if (_element.hasClass("clicktag")) {
8721        _para2 = _element.data("clicktagaction");
8722        _para_event_category = _element.data("clicktagcategory");
8723      }
8724      if (!_para2) {
8725        _para2 = "click";
8726      }
8727
8728      if ((typeof gtag).indexOf("undefined") < 0) {
8729        if (_para) {
8730          gtag("event", _para2, { event_category: _para_event_category, event_label: _para });
8731        } else {
8732          gtag("event", _para2, { event_category: _para_event_category });
8733        }
8734      }
8735
8736      if($("body").hasClass("sim-content")){
8737        if(_para){
8738          console.log("preview click ga action="+_para2+" event_label="+_para+" event_category="+_para_event_category);
8739        }else{
8740          console.log("preview click ga action="+_para2+" event_category="+_para_event_category);
8741        }
8742      }
8743
8744    });
8745  }
8746  function gaSending() {
8747    if ((typeof gtag).indexOf("undefined") < 0) {
8748      var $ga_send = $("a[href^='tel:']");
8749      $ga_send.on("click", function () {
8750        var $this = $(this);
8751        var $label = $this.attr("data-galabel");
8752        if ($label) {
8753          gtag("event", "click", { event_category: "tel", event_label: $label, non_interaction: true });
8754        }
8755      });
8756    }
8757  }
8758
8759  function setGaLabel() {
8760    var _title = $("title").html();
8761    $('a[href^="tel:"]').each(function () {
8762      if ($(this).hasClass("ga-page-title")) {
8763        var _galabel = $(this).data("galabel");
8764        if (_galabel) {
8765          $(this).attr("data-galabel", _galabel + "(" + _title + ")");
8766          $(this).removeClass("ga-page-title").addClass("ga-fin-page-title");
8767        }
8768      }
8769    });
8770  }
8771
8772  $(".clicktag,.asynctag").each(function () {
8773    setClick($(this));
8774  });
8775  setGaLabel();
8776  gaSending();
8777
8778  (function (global) {
8779    function setClickTagListener(_target) {
8780      $(_target).off("click");
8781      setClick($(_target));
8782    }
8783    global.setClickTagListener = setClickTagListener;
8784  })(DMS);
8785});
8786var DMS = DMS || {};
8787
8788(function(global) {
8789
8790	$(function(){
8791	
8792		function panelHeightAlign(_obj){
8793			var _panels = $(_obj["base_class"]);
8794			var _target_panels = [];
8795			
8796			// check column
8797			var _top = undefined;
8798			var _column = 0;
8799			var _column_check_flag = true;
8800			for(var i=0;i<_panels.length;i++){
8801				var _panel = $(_panels[i]);
8802				if(_panel.css("display").indexOf("none") >= 0) continue;
8803				_target_panels.push(_panel);
8804				if(_column_check_flag){
8805					if(_panel.position().top == _top){
8806						_column++;
8807					}else if(_top == undefined){
8808						_top = _panel.position().top;
8809						_column++;
8810					}else{
8811						_column_check_flag = false;
8812					}
8813				}
8814			}
8815			// set height
8816			for(var i=0;i<_target_panels.length;i+=_column){
8817				for(var k=0;k<_obj["sub_class"].length;k++){
8818					var _max_height =0;
8819					for(var j=i;j<i+_column;j++){
8820						var _panel = $(_target_panels[j]).find(_obj["sub_class"][k]);
8821						_panel.css("height","auto");
8822						if(_max_height < _panel.height()) _max_height = _panel.height();
8823					}
8824					for(var j=i;j<i+_column;j++){
8825						var _panel = $(_target_panels[j]).find(_obj["sub_class"][k]);
8826						_panel.css("height",_max_height+1); // ("+1" is for IE)
8827					}
8828				}
8829			}
8830		}
8831	
8832		global.panelHeightAlign = panelHeightAlign;
8833	});
8834
8835
8836}(DMS));
8837
8838$(function(){
8839
8840	$("a.set-anchor-id").each(function(){
8841		var _target_a = $(this);
8842		var _href = $(this).attr("href");
8843		if(_href.substr(0,1) == "#"){
8844			var _target_id = _href.substr(1);
8845			var _myunit = $(this).parents(".unit-wrapper");
8846			var _myid = _myunit.attr("id");
8847			_myunit.find(_href).each(function(){
8848				$(this).attr("id" , _target_id+"_"+_myid);
8849				_target_a.attr("href", _href+"_"+_myid);
8850			});
8851		}
8852	});
8853
8854  function scrollAjust() {
8855    var _pathname = $(location).attr('pathname');
8856
8857    $("a[href]").each(function(){
8858      var $this = $(this);
8859      var _href = $this.attr("href");
8860
8861      function getPathFromUrl(_url) {
8862        return _url.split(/[?#]/)[0];
8863      }
8864      var _removeParmPathname = getPathFromUrl(_href);
8865
8866      //ドメイン以下のパスネームがhrefのパスネームと同じかつ
8867      //hrefに#が含まれている場合、hrefを#以下の文字列に置換
8868      if (_pathname === _removeParmPathname && _href.indexOf("#") != -1) {
8869        var _pathArry = _href.split("#");
8870        var _ancId = "#" + _pathArry.slice(-1)[0];
8871      $this.attr("href", _ancId);
8872      }
8873    });
8874    
8875    $('.conversion-0001 .conversion-0001-snav-item a[href^="#"] , a[href^="#"]').click(function() {
8876        var _sizeDetect = $('#size-detect').css('font-family');
8877        var $head_pc = $(".conversion-0001 .conversion-0001-head");
8878        var $head_sp = $(".conversion-0001 .conversion-0001-sp-head-menu");
8879        var headHeight;
8880
8881        if (_sizeDetect != "sp") {
8882            headHeight = $head_pc.height();
8883        } else {
8884            headHeight = $head_sp.height();
8885        }
8886        var href = $(this).attr("href").split("?")[0];
8887        var target = $(href == "#" || href == "" ? "html" : href);
8888        var position = target.offset().top;
8889        $("body,html").animate({ scrollTop: position - headHeight }, 200);
8890        return false;
8891    });
8892}
8893
8894if ($(".conversion-0001").length > 0) {
8895  scrollAjust();
8896}else{
8897  $('a[href^="#"]').click(function(){
8898    var href= $(this).attr("href").split("?")[0];
8899    var target = $(href == "#" || href == "" ? "html" : href);
8900    var position = target.offset().top;
8901    $("body,html").animate({scrollTop:position}, 300, "swing");
8902    return false;
8903  });
8904}
8905
8906});
8907
8908
8909var DMS = DMS || {};
8910
8911(function(global) {
8912
8913	$(function(){
8914		function setTabColor(_target){
8915			var _tabdata = $(_target["target_color"]).data("tabcolor").split(" ");
8916			var _tabcolor = [];
8917			for(var i=0;i<_tabdata.length;i++){
8918				if(_tabdata[i].length > 1){
8919					_tabcolor.push(_tabdata[i]);
8920				}
8921			}
8922			var _bg_data = _tabcolor[0].split("-");
8923			var _txt_data = _tabcolor[1].split("-");
8924			var _bg_color = parseInt(_bg_data[_bg_data.length-1],10);
8925			var _txt_color = parseInt(_txt_data[_txt_data.length-1],10);
8926
8927			function setActive(_clicktarget){
8928				var _ret;
8929				$(_target["target_tab"]).each(function(i){
8930					if($(this).is(_clicktarget)){
8931						$(this).removeClass("bg-color-"+_txt_color+" txt-color-"+_bg_color);
8932						$(this).addClass("bg-color-"+_bg_color+" txt-color-"+_txt_color);
8933						_ret = i;
8934					}else{
8935						$(this).removeClass("bg-color-"+_bg_color+" txt-color-"+_txt_color);
8936						$(this).addClass("bg-color-"+_txt_color+" txt-color-"+_bg_color);
8937					}
8938					
8939				});
8940				if(_target["call"]){
8941					_target["call"].call(window,_ret);
8942				}
8943			}
8944			$(_target["target_tab"]).click(function(){
8945				setActive($(this));
8946			});
8947			setActive($(_target["target_tab"])[0]);
8948		}
8949	
8950		global.setTabColor = setTabColor;
8951	});
8952
8953
8954}(DMS));
8955
8956
8957var DMS = DMS || {};
8958
8959(function(global) {
8960
8961  $(function(){
8962
8963    function overFlowText() {
8964      var overFlowTexts = $(document).find(".overflow--txt");
8965
8966      if(overFlowTexts) {
8967        $(overFlowTexts).each(function(index, element) {
8968          var orgText = $(element).attr("data-orgtext");
8969          
8970          if(typeof(orgText) == "string") {
8971          var textNum = orgText.length;
8972
8973            if(textNum >= 50) {
8974              //テキストが50文字を超えたときの処理
8975              orgText = orgText.substr(0, 47);
8976              $(element).text(orgText + "…");
8977              $(element).css("visibility", "visible");
8978              DMS.checkDelayLoad();
8979            }
8980          }
8981
8982        });
8983      }
8984    }
8985
8986    global.overFlowText = overFlowText;
8987    overFlowText();
8988    });
8989
8990}(DMS));
8991
8992var DMS = DMS || {};
8993
8994(function(global) {
8995
8996	global.customEvent = new Object();
8997	global.customEvent.eventlist = {};
8998	global.customEvent.INIT_UNIT = "init_unit";
8999	global.customEvent.INIT_YOUTUBE = "init_youtube";
9000	global.customEvent.INIT_TAB = "init_tab";
9001	global.customEvent.addEventListner = function(_event, _function){
9002		var _eventlist = global.customEvent.eventlist;
9003		if(!_eventlist[_event]){
9004			_eventlist[_event] = [];
9005		}
9006		var _flag = false;
9007		for(var i=0;i<_eventlist[_event].length;i++){
9008				if(_eventlist[_event][i] === _function){
9009					_flag = true;
9010					break;
9011				}
9012		}
9013		if(!_flag){
9014			_eventlist[_event].push(_function);
9015		}
9016	}
9017	global.customEvent.dispatchEvent = function(_event){
9018console.log("dispatchEvent "+_event);
9019		var _eventlist = global.customEvent.eventlist;
9020		if(_eventlist[_event]){
9021			for(var i=0;i<_eventlist[_event].length;i++){
9022					_eventlist[_event][i].call();
9023			}
9024		}
9025	}
9026
9027}(DMS));
9028
9029$(function() {
9030	var removeLinks = $("a");
9031
9032	removeLinks.each(function(index, element) {
9033		removeLink($(element));
9034	});
9035	function removeLink(elm) {
9036		if(elm.attr('href') == '') {
9037			elm.removeAttr('href');
9038		}
9039	}
9040});var DMS = DMS || {};
9041DMS.youtube_ready_flg = false;
9042function onYouTubeIframeAPIReady() {
9043	if(!DMS.youtube_ready_flg ){
9044		clearInterval(DMS.youtube_check_id);
9045		DMS.youtube_ready_flg = true;
9046console.log("youtube init (normal event type)");
9047		DMS.customEvent.dispatchEvent(DMS.customEvent.INIT_YOUTUBE);
9048	}
9049}
9050
9051DMS.youtube_check_count = 0;
9052DMS.youtube_check_id = setInterval(function(){
9053	if(DMS.youtube_ready_flg == true){
9054		clearInterval(DMS.youtube_check_id);
9055	}else{
9056		if(DMS.youtube_check_count > 10){
9057			if(window.YT && window.YT.loaded == 1){
9058console.log("youtube init (time check type)");
9059				DMS.youtube_ready_flg = true;
9060				DMS.customEvent.dispatchEvent(DMS.customEvent.INIT_YOUTUBE);
9061				clearInterval(DMS.youtube_check_id);
9062			}
9063		}
9064		DMS.youtube_check_count++;
9065	}
9066},100);
9067
9068$( function() {
9069	var tag = document.createElement('script');
9070	tag.src = "https://www.youtube.com/iframe_api";
9071	var firstScriptTag = document.getElementsByTagName('script')[0];
9072	firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
9073
9074});
9075$( function() {
9076	var _default_arrow_file = "/assets/a/images/solo-button/returnTopButton.png";
9077	var _arrow_file = _default_arrow_file;
9078
9079	var display_flg = true;
9080	if($("body").data("backtotop") && $("body").data("backtotopfile")){
9081		var _bt_data = $("body").data("backtotop").split(":");
9082		var _bt_file = $("body").data("backtotopfile").split(":");
9083	
9084		if(!_bt_data[0]){ /* ページ未設定 */
9085			if(!_bt_data[1]){ /* サイト未設定 */
9086				// 非表示
9087				display_flg = true;
9088			}else{
9089				if(_bt_data[1] == 1){
9090					// デフォルト画像
9091					
9092				}else if(_bt_data[1] == 2){ /* サイト指定オリジナル画像設定 */
9093					if(_bt_file[1]){ /* ファイルあり */
9094						// サイト指定オリジナル画像
9095						_arrow_file = _bt_file[1];
9096					}else{
9097						// 非表示
9098						display_flg = false;
9099					}
9100				}else {
9101					// 非表示
9102					display_flg = false;
9103				}
9104			}
9105		}else{
9106			/* ページ設定 */
9107			if(_bt_data[0] == 1){ /* デフォルト画像 */
9108				// デフォルト画像
9109			}else if(_bt_data[0] == 2){ /* ページ指定オリジナル画像設定 */
9110				if(_bt_file[0]){ /* ファイルあり */
9111					// ページ指定オリジナル画像
9112					_arrow_file = _bt_file[0]
9113				}else{
9114					// 非表示
9115					display_flg = false;
9116				}
9117			}else if(_bt_data[0] == 3){ /* サイト基本情報に合わせる */
9118				if(_bt_data[1] == 1){
9119					// デフォルト画像
9120				}else if(_bt_data[1] == 2){ /* サイト指定オリジナル画像設定 */
9121					if(_bt_file[1]){ /* ファイルあり */
9122						// サイト指定オリジナル画像
9123						_arrow_file = _bt_file[1];
9124					}else{
9125						// 非表示
9126						display_flg = false;
9127					}
9128				}else {
9129					// 非表示
9130					display_flg = false;
9131				}
9132			}else{
9133				// 非表示
9134				display_flg = false;
9135			}
9136		}
9137	}
9138
9139
9140	function checkAndAnimation(){
9141		var _st = $(window).scrollTop();
9142		if(_st <= 0){
9143			if($(".return-top-button").hasClass("show-button")){
9144				$(".return-top-button").removeClass("show-button").stop(false,true).fadeTo(300,0, function(){
9145					$(this).hide();
9146				});
9147			}else{
9148				$(".return-top-button").hide();
9149			}
9150		}else{
9151			if(!$(".return-top-button").hasClass("show-button")){
9152				$(".return-top-button").addClass("show-button").stop(false,true).fadeTo(0,0).show().fadeTo(300,1);
9153			}
9154		}
9155	
9156	}
9157
9158	function checkPosition(){
9159		var _p = $("footer").position();
9160		if(!_p){
9161			var _content_obj = $("#content").position();
9162			var _content_h = $("#content").height();
9163			_p = {top:_content_obj.top + _content_h, left:0};
9164		}
9165
9166		var _wh = window.innerHeight; //$(window).height();
9167		var _st = $(window).scrollTop();
9168
9169		/*
9170		console.log(_p);
9171		console.log(_wh)
9172		console.log(_st);
9173		*/
9174
9175		var _cvo = $(".conversion-wrapper").offset();
9176		var _cvp = $(".conversion-wrapper").position();
9177		var _cvo2 = $(".conversion-wrapper .conversion-0002").offset();
9178		var _cvp2 = $(".conversion-wrapper .conversion-0002").position();
9179		var _cvw = $(".conversion-wrapper .button-list").width();
9180		var _cvh = $(".conversion-wrapper .button-list").height();
9181		var _cvbo = $(".conversion-wrapper .button-list .button-wrapper").offset();
9182		 $(".conversion-wrapper .button-list .button-wrapper").each(function(n,_el){
9183			if($(_el).is(":visible")){
9184				_cvbo = $(_el).offset();
9185				return false;
9186			}
9187		});
9188		var _cvbp = $(".conversion-wrapper .button-list .button-wrapper").position();
9189
9190
9191		_cvp = _cvp2;
9192		if($(".conversion-wrapper").hasClass("conversion-pos-side")){
9193			$(".return-top-button img").css("bottom","0px");
9194			if(_wh+_st > _p.top){
9195				$(".return-top-button").removeClass("return-top-button-fixed");
9196				$(".return-top-button img").css("left","auto").css("right","10px");
9197				if($(".conversion-0002").length > 0){
9198					var limit_margin = ($(window).height() -  (_cvp2.top + _cvh));
9199					var _footer_h2 = _st + _wh - ($("#content").position().top+ $("#content").height());
9200					if(limit_margin - _footer_h2 < 49){
9201						$(".return-top-button img").css("right",($(".conversion-wrapper .button-list").width() + 2) +"px");
9202					}else{
9203						$(".return-top-button img").css("right","10px");
9204					}
9205				}
9206			}else{
9207				$(".return-top-button").addClass("return-top-button-fixed");
9208				if($(".conversion-0002").length > 0){
9209					var limit_margin = ($(window).height() -  (_cvp2.top + _cvh));
9210					if(limit_margin < (10+49)){
9211						$(".return-top-button img").css("right",($(".conversion-wrapper .button-list").width() + 2) +"px");
9212					}else{
9213						$(".return-top-button img").css("right","10px");
9214					}
9215				}
9216			}
9217		}else{
9218			if(_wh+_st > _p.top){
9219				$(".return-top-button").removeClass("return-top-button-fixed");
9220				$(".return-top-button img").css("left","auto").css("right","10px");
9221				if($(".conversion-0002").length > 0){
9222					var limit_margin = $(window).width() - _cvbo.left - _cvw;
9223					if(limit_margin < (10+49)){
9224						$(".return-top-button img").css("bottom",($(".conversion-wrapper .button-list").height() + 2) +"px");
9225					}else{
9226						$(".return-top-button img").css("bottom","0px");
9227					}
9228				}
9229			}else{
9230				$(".return-top-button").addClass("return-top-button-fixed");
9231				if($(".conversion-0002").length > 0){
9232					var limit_margin = $(window).width() - _cvbo.left - _cvw;
9233					if(limit_margin < (10+49)){
9234						$(".return-top-button img").css("bottom",($(".conversion-wrapper .button-list").height() + 2) +"px");
9235					}else{
9236						$(".return-top-button img").css("bottom","0px");
9237					}
9238				}
9239			}
9240		}
9241	}
9242
9243
9244	if($(".unit-base[data-mode='iframe']").length){
9245		display_flg = false;
9246	}
9247
9248	if(display_flg){
9249		$(".return-top-button").click(function(){
9250			 $('body, html').animate({ scrollTop: 0 }, 300);
9251		});
9252
9253		$(".return-top-button img").attr("src", _arrow_file);
9254
9255
9256		$(window).scroll(function(){
9257			checkAndAnimation();
9258			checkPosition();
9259		});
9260		$(window).resize(function(){
9261			checkAndAnimation();
9262			checkPosition();
9263		});
9264		
9265		var _check_id = setInterval(function(){
9266
9267			if($(".conversion-wrapper").width() > 0){
9268				$(".return-top-button").show();
9269				clearInterval(_check_id);
9270				checkAndAnimation();
9271				checkPosition();
9272			}
9273		},30);
9274	}else{
9275		$(".return-top-button").hide();
9276	}
9277
9278
9279
9280});
9281var DMS = DMS || {};
9282$(function(global){
9283
9284	var onlineRsvUi = function(_data, _el, _obj){
9285		/*
9286		_data - テンプレート関数getReservedCarList()の戻りを全てJSON化したデータ
9287		_el - カレンダーUIを挿入してほしいエレメント
9288		_obj - カレンダーUIによって日時と時間が設定された場合に、このオブジェクト内関数を使って、年月と時分を設定する。
9289
9290		       _obj.setDate(dateString)
9291		       日時を6桁で設定する。
9292		       例:setDate("20200103") 2003年1月3日の場合
9293
9294		       _obj.setTime(timeString)
9295		       時間を4桁で設定する。
9296		       例:setTime("1030") 10時30分の場合
9297
9298	           _obj.defaultData.date
9299	           確認画面から入力画面に戻ってきた場合などの以前の設定値を格納。
9300	           値が入っている場合はこれを初期選択状態とする。
9301
9302	           _obj.defaultData.time
9303	           確認画面から入力画面に戻ってきた場合などの以前の設定値を格納。
9304	           値が入っている場合はこれを初期選択状態とする。
9305	           
9306	           _obj.image_path
9307	           車種画像のパスを格納。試乗車展示車ユニットからパラメータで渡された物がそのまま入っている。
9308		*/
9309
9310		
9311		function init() {
9312			generateWrapperHtml();
9313			loadOnlineRsv(_data,_obj);
9314		}
9315		init();
9316
9317
9318		function generateWrapperHtml(){
9319			var wrapperHtml = '';
9320			wrapperHtml += '<div id="reserved-car-list" class="reserved-car-list clearfix">';
9321			wrapperHtml += '<div id="l-wrapper" class="l-wrapper clearfix"></div>';
9322			wrapperHtml += '<div id="r-wrapper" class="r-wrapper"><div id="reservation" class="reservation"></div></div>';
9323			wrapperHtml += '</div>';
9324			_el.append(wrapperHtml)
9325		}
9326	
9327	
9328		////////////////////
9329		//html生成用jsonデータ
9330		////////////////////
9331
9332		function loadOnlineRsv(_data,_obj) {
9333			// 各ブロックに必要な情報
9334
9335
9336			// var carInfo = _data["car_info"];
9337			// nora判定し渡す車種情報を切り替える
9338			var carInfo;
9339			if(document.URL.match("outmst=1")){
9340				carInfo = _data["outmst"];
9341			}else {
9342				carInfo = _data["car_info"];
9343			}
9344
9345
9346			var shopInfo = _data["shop_info"];
9347			var reserve_list = _data["reserve_list"];
9348
9349
9350
9351					
9352			l_wrap_innerHtml(carInfo, shopInfo);
9353			r_wrap_innerHtml(reserve_list);
9354			checkAvailableDates();
9355
9356			setDefaultData(_obj);
9357
9358			displayPeriodSwitching();
9359			calendarSetDisable();
9360			switchCalendar();
9361			getCalendarCurrentDay();
9362			periodCalendarDisplay();
9363			addCurrentClass();
9364			switchPcReserveList();
9365			switchSpReserveList();
9366			spCalendarModal();
9367			selectReserveTime();
9368			addHolidayClass();
9369	
9370		}
9371	
9372		function l_wrap_innerHtml(carInfo, shopInfo) {
9373
9374			var c2bg_num = $(".form-0001 .form-cmn-process .form-cmn-process__container").data("active");
9375			var c2bgClass="key-color-2-bg-" + c2bg_num;
9376			var c2txtClass = $(".form-0001 .form-cmn-process .form-cmn-process__container").data("active-text");
9377	
9378			var infoWrapHtml = '';
9379			// var car_pic_path = _obj.image_path;
9380			var car_pic_path = _obj.image_path;
9381
9382
9383			// var CAR_NAME = carInfo["CAR_NAME"] ? carInfo["CAR_NAME"] : "-";
9384			// var CAR_GRADE_NAME = carInfo["CAR_GRADE_NAME"] ? carInfo["CAR_GRADE_NAME"] : "-";
9385			// nora判定し渡す車種情報を切り替える
9386			var CAR_NAME;
9387			var CAR_GRADE_NAME;
9388			var backToSelectCarUrlPath;
9389			if (document.URL.match("outmst=1")) {
9390				CAR_NAME = carInfo["car_name"] ? carInfo["car_name"] : "-";
9391				CAR_GRADE_NAME = carInfo["grade_name"] ? carInfo["grade_name"] : "-";
9392				backToSelectCarUrlPath = "onlinersvoutmstlist"
9393			} else {
9394				CAR_NAME = carInfo["CAR_NAME"] ? carInfo["CAR_NAME"] : "-";
9395				CAR_GRADE_NAME = carInfo["CAR_GRADE_NAME"] ? carInfo["CAR_GRADE_NAME"] : "-";
9396				backToSelectCarUrlPath = "onlinersvlist"
9397			}
9398			var shopName = shopInfo["shop_name"] ? shopInfo["shop_name"] : "-";
9399			var shopTel = shopInfo["shop_tel"] && shopInfo["shop_tel"][0]["tel_num"] != null ? shopInfo["shop_tel"][0]["tel_num"] : "-";
9400	
9401			//info_wrap
9402			infoWrapHtml += '<div class="info_wrap clearfix">';
9403			infoWrapHtml += '<div class="car_info clearfix">';
9404			infoWrapHtml += '<div class="car_info__pic">';
9405			infoWrapHtml += '<img src="' + car_pic_path + '" alt=""></div>';
9406			infoWrapHtml += '<div class="car_info_txt">';
9407			infoWrapHtml += '<div class="car_info_txt__name">' + CAR_NAME + '</div>';
9408			infoWrapHtml += '<div class="car_info_txt__detail">' + CAR_GRADE_NAME + '</div>';
9409			infoWrapHtml += '<div class="car_info_txt__btn '+c2txtClass+' '+c2bgClass+'"><a href="/form/'+backToSelectCarUrlPath+'">車種選択に戻る</a></div></div></div>';
9410			infoWrapHtml += '<div class="shop_info clearfix">';
9411			infoWrapHtml += '<p class="shop_info__name">' + shopName + '</p>';
9412			infoWrapHtml += '<p class="shop_info__tel"><a href="tel:' + shopTel + '">' + shopTel + '</a></p>';
9413			infoWrapHtml += '</div></div></div><!-- /.info_wrap -->';
9414	
9415			// calendar_wrap
9416			infoWrapHtml += '<div id="calendar-modal-overlay"></div>';
9417			infoWrapHtml += '<div id="calendar_wrap" class="calendar_wrap">';
9418			infoWrapHtml += '<div id="sp_modal_close" class="sp_modal_close"><img src="/assets/a/images/form-online-rsv/modal_close.png" alt=""></div>';
9419			infoWrapHtml += '<div class="calender_inner">';
9420			infoWrapHtml += '<div id="calendar" class="calendar"><!-- カレンダー挿入位置 --></div>';
9421			infoWrapHtml += '<div class="btn_wrap">';
9422			infoWrapHtml += '<div class="btn btn_prev_month"><a href="#"></a></div>';
9423			infoWrapHtml += '<div class="btn btn_next_month"><a href="#"></a></div>';
9424			infoWrapHtml += '</div></div><!-- /.calender_inner -->';
9425			infoWrapHtml += '</div><!-- /.calendar_wrap -->';
9426	
9427			$("#l-wrapper").append(infoWrapHtml);
9428	
9429			setCalendar();
9430	
9431		}
9432	
9433	
9434		function r_wrap_innerHtml(reserve_list) {
9435			//色設定用情報取得
9436			var c2bg_num = $(".form-0001 .form-cmn-process .form-cmn-process__container").data("active");
9437			var c2bgClass="key-color-2-bg-" + c2bg_num;
9438	
9439			////////////////////////////////
9440			// reservation_title_wrap用HTML
9441			var titleWrapHtml = '';
9442	
9443			titleWrapHtml += '<div class="reservation_title_wrap">';
9444			titleWrapHtml += '<div class="reservation_title_inner clearfix">';
9445			titleWrapHtml += '<div class="reservation_title_inner__text clearfix">';
9446			titleWrapHtml += '<div class="copy">予約したい時間をクリックしてください</div><div class="copy_sp"><span>予約したい時間をタップしてください</span></div>';
9447			titleWrapHtml += '<div class="period_display_sp"><span class="first_year"></span>年<span class="first_month"></span>月<span class="first_day"></span>日〜<span class="last_year"></span>年<span class="last_month"></span>月<span class="last_day"></span>日<a href="#" class="icon_calendar"><img src="/assets/a/images/form-online-rsv/icon_calendar.png" alt=""></a></div>';
9448			titleWrapHtml += '<div class="description"><span class="tip ' + c2bgClass + '"></span>予約可能な試乗開始時間</div></div>';
9449			
9450			// 2404 注意書きの追加
9451			titleWrapHtml += '<p class="note">※直近のWEB予約可能な日から表示しています</p>';
9452	
9453			//period_display_wrap
9454			titleWrapHtml += '<div class="period_display_wrap clearfix">';
9455			titleWrapHtml += '<div class="prev"><a href="#"></a></div>';
9456			titleWrapHtml += '<div class="day">';
9457			titleWrapHtml += '<span class="first_year"></span>年<span class="first_month"></span>月<span class="first_day"></span>日〜<span class="last_year"></span>年<span class="last_month"></span>月<span class="last_day"></span>日</div>';
9458			titleWrapHtml += '<div class="next"><a href="#"></a></div></div>';
9459			titleWrapHtml += '</div></div>';
9460	
9461			$("#reservation").append(titleWrapHtml);
9462	
9463	
9464			////////////////////////////////
9465			// reserve_wrap用HTML
9466			var reserveWrapHtml = '';
9467	
9468			reserveWrapHtml += '<div class="reserve_wrap">';
9469			reserveWrapHtml += '<div class="reserve_inner clearfix">';
9470	
9471			/////////////////
9472			// 時間軸の生成 //
9473			/////////////////
9474	
9475			//予約時間のブロック最大数取得
9476			var day_arr = Object.keys(reserve_list);
9477			var len = day_arr.length;
9478			var time_array = [];
9479			for (var i = 0; i < len; i++) {
9480				var _day_time = Object.keys(reserve_list[day_arr[i]]);
9481				time_array.push(_day_time);
9482			}
9483			var time_axis_array = [];
9484			var _pushFlg = true;
9485			for (var j = 0; j < time_array.length; j++) {
9486				if (_pushFlg && time_array[j].length >= 1) {
9487					time_axis_array = time_array[j];
9488					_pushFlg = false;
9489				}
9490			}
9491	
9492			reserveWrapHtml += '<div class="time_axis">';
9493			reserveWrapHtml += '<div class="time_block blank prev_btn"><a href="#"></a></div>';
9494	
9495			for (var k = 0; k < time_axis_array.length; k++) {
9496				if (k % 2 === 0) {
9497					reserveWrapHtml += '<div class="time_block"><span class="time">' + time_axis_array[k] + '</span></div>';
9498				} else {
9499					//             html_1 += '<div class="time_block"><span class="time"></span></div>';
9500				}
9501			}
9502			reserveWrapHtml += '</div>';
9503	
9504	
9505			/////////////////////
9506			// 予約リストの生成 //
9507			/////////////////////
9508	
9509			// reserve-day_wrap
9510			reserveWrapHtml += '<div class="reserve-day_wrap clearfix">';
9511	
9512			Object.keys(reserve_list).forEach(function (date, idx) {
9513	
9514				var list_num = idx + 1;
9515				// console.log(list_num)
9516				var time_length = Object.keys(reserve_list[date]).length;
9517				//         console.log(time_length)
9518	
9519				var _day_array = date.split("-"); //例:['2025','01','31']
9520				var _day = _day_array[_day_array.length - 1];
9521				var display_day = Number(_day);
9522				// 曜日取得
9523				var _date = new Date(date);
9524				var weekday_list = ['日', '月', '火', '水', '木', '金', '土'];
9525				var weekday_list_en = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
9526				var weekday = weekday_list[_date.getDay()];
9527				var weekday_en = weekday_list_en[_date.getDay()];
9528				var holiday_class = time_length == 0 ? "is-holiday" : "";
9529
9530
9531
9532				////////////////////////////////////////
9533				// リストを当月含む4か月分表示する為の処理
9534				////////////////////////////////////////
9535				var _today = new Date(); //今日
9536				// var _today = new Date(2025, 9, 31); //不具合発生時の日付を設定
9537
9538				var _thisMonth = _today.getMonth() + 1; //当日の月
9539				var _thisYear = _today.getFullYear(); //当日の年
9540				
9541				var _list_year = _day_array[0]; //取得したリストの年を取得
9542				var _list_month = _day_array[1]; //取得したリストの月を取得
9543				var _list_yearMonth = Number(_list_year + _list_month); //取得したリストの年と月を連結 例:202501
9544				
9545				var _list_last_year = _thisYear; //当月含む4カ月目の年は当日の年とし、年をまたぐ場合はプラス1する処理に流れる
9546				var _list_last_month = _thisMonth + 3; //当月含む4カ月目の月(最後に表示する月) 数値
9547
9548				if(_list_last_month > 12){ //上記処理で月が12以上だったら1月~へ振りなおし、年をまたぐので年にプラス1
9549					_list_last_month = _list_last_month - 12;
9550					_list_last_year = _thisYear + 1;
9551				}
9552		
9553				/*
9554				 年、月の数値を文字列へ変換して月をゼロパディングして文字列を連結後に数値へ変換する
9555				 2025 + 01 → 202501へ連結しparseIntで数値へ変換
9556				*/
9557				var _list_last_yearMonth = parseInt(_list_last_year.toString() + String(_list_last_month).padStart(2, '0')); 
9558
9559			if(_list_last_yearMonth >= _list_yearMonth){
9560					//reserve-day__title
9561					reserveWrapHtml += '<div class="reserve-day__list ' + holiday_class + ' " data-reserve-date="' + date + '">';
9562		
9563					reserveWrapHtml += '<div class="reserve-day__title">';
9564					reserveWrapHtml += '<div class="day '+weekday_en+'">' + display_day + '(' + weekday + ')</div>';
9565					if (time_length == 0) {
9566						reserveWrapHtml += '<div class="txt_holiday">
9566定休日</div>';
9567					}
9568					reserveWrapHtml += '</div>';
9569		
9570		
9571		
9572					////////////////////////////////////////////////
9573					//////日付の時間リスト生成
9574					////////////////////////////////////////////////
9575		
9576					//休みの日に空のブロックを入れる
9577					if (time_length == 0) {
9578						for (var j = 0; j < time_axis_array.length; j++) {
9579							//                 console.log(j)
9580							if (j % 2 === 0) {
9581								reserveWrapHtml += '<div class="reserve-time__block">';
9582							}
9583							reserveWrapHtml += '<div class="reserve-time__item" data-time=""></div>';
9584							if (j % 2 === 1 || j === time_axis_array.length - 1) {
9585								reserveWrapHtml += '</div>';
9586							}
9587						}
9588					}
9589		
9590		
9591					var n = 0;
9592					var hopedate = date.replace(/-/g, "");
9593					// console.log(hopedate)
9594					Object.keys(reserve_list[date]).forEach(function (time, index) {
9595						var data_time = time.replace(":", "") + "00";
9596						var time_len = index + 1;
9597		
9598						var _status = "full";
9599						var _bgClass = "";
9600						if (reserve_list[date][time] == 1) {
9601							_status = "empty";
9602							_bgClass = c2bgClass;
9603						}
9604						if (n % 2 === 0) {
9605							reserveWrapHtml += '<div class="reserve-time__block">';
9606						}
9607						
9608						reserveWrapHtml += '<div class="reserve-time__item ' + _status + ' '+_bgClass+' key-color-2-text-'+c2bg_num+' icon-color-'+c2bg_num+'" data-hopedate="' + hopedate + '" data-hopetime="' + data_time + '"></div>';
9609						if (n % 2 === 1 || time_len == time_axis_array.length) {
9610							reserveWrapHtml += '</div>';
9611						}
9612						n++;
9613						// console.log(n)
9614					});
9615						reserveWrapHtml += '</div>';
9616				} //5カ月目のリストはhtml生成しない処理の終了
9617			});
9618	
9619			reserveWrapHtml += '</div>';
9620	
9621	
9622			//SP用空の時間軸
9623			reserveWrapHtml += '<div class="time_axis sp">';
9624			reserveWrapHtml += '<div class="time_block blank next_btn"><a href="#"></a></div>';
9625	
9626			for (var k = 0; k < time_axis_array.length; k++) {
9627				if (k % 2 === 0) {
9628					reserveWrapHtml += '<div class="time_block"><span class="time"></span></div>';
9629				} else {
9630					//             html_1 += '<div class="time_block"><span class="time"></span></div>';
9631				}
9632			}
9633			reserveWrapHtml += '</div>';
9634	
9635	
9636			$("#reservation").append(reserveWrapHtml);
9637		}
9638		// END-r_wrap_innerHtml
9639	
9640	
9641	
9642	
9643		/**
9644			* 予約可能な最初の日付を取得する関数
9645			* @return {string} - [yyyy-mm-dd]という形式で戻る。
9646			*/		
9647
9648			function checkAvailableDates() {
9649				let _reserveDayItem = $(".reserve-time__item");
9650				let _reserveDayList = $(".reserve-day__list");
9651				let _firstDayIndex;
9652				const _emptyFlg = $(".reserve-time__item.empty").length ? false : true;
9653
9654
9655				if (_emptyFlg) {
9656					showUnavailableText();
9657					_firstDayIndex = 0;
9658				} else {
9659					for (var i = 0; i < _reserveDayItem.length; i++){
9660						var _item = $(_reserveDayItem)[i];
9661						if ($(_item).hasClass("empty")) {
9662							_firstDayIndex = $(_item).parents(".reserve-day__list").index();
9663							break;
9664						}
9665					}
9666				}
9667
9668				for (var k = _firstDayIndex; k < _firstDayIndex+7; k++){
9669					let _addClassElm = $(_reserveDayList)[k];
9670					$(_addClassElm).addClass("show-7days")
9671				}
9672				for (var l = _firstDayIndex; l < _firstDayIndex+3; l++){
9673					let _addClassElm = $(_reserveDayList)[l];
9674					$(_addClassElm).addClass("show-3days")
9675				}
9676			}
9677
9678		/**
9679			* 予約日が無かった時の独自テキストを表示する処理
9680			*/
9681		function showUnavailableText() {
9682			const _unavailableText = "WEB予約可能な日がありません";
9683			$(".reservation_title_wrap").addClass("is-unavailable")
9684			$(".reservation_title_inner__text .copy").remove();
9685			$(".reservation_title_inner__text .description").remove();
9686			$(".reservation_title_inner__text .copy_sp").html("");
9687			$(".reservation_title_inner .note").text(_unavailableText);
9688		}
9689	
9690	
9691		/////////////////////////////////////////////////
9692		// カレンダー生成
9693		/////////////////////////////////////////////////
9694		function setCalendar() {
9695			const weeks = ['月', '火', '水', '木', '金', '土', '日'];
9696			const date = new Date();
9697			// const date = new Date(2019, 6, 1);  //test用
9698			let year = date.getFullYear();
9699			let month = date.getMonth() + 1;
9700			const today = date.getDate();
9701			// const showNum = today === 1 ? 5 : 6; //表示月数
9702			const showNum = 4; //表示月数
9703	
9704	
9705			/////////////////////////////////////////////////
9706			// カレンダー生成
9707			/////////////////////////////////////////////////
9708			function showCalendar(year, month, date) {
9709				for (i = 0; i < showNum; i++) {
9710	
9711					const calendarHtml = createCalendar(year, month, date);
9712					const sec = document.createElement('div');
9713					sec.className = 'month_wrap';
9714					if (i === 0) {
9715						sec.className = 'month_wrap is-show';
9716					}
9717
9718					sec.innerHTML = calendarHtml;
9719					document.querySelector('#calendar').appendChild(sec);
9720	
9721					month++;
9722					if (month > 12) {
9723						year++;
9724						month = 1;
9725					}
9726				}
9727			}
9728	
9729			function createCalendar(year, month, date) {
9730				const todayYMFlag = date.getFullYear() === year && date.getMonth() + 1 === month ? true : false;
9731				const startDate = new Date(year, month - 1, 1); // 月の最初の日を取得
9732				const endDate = new Date(year, month, 0); // 月の最後の日を取得
9733				const endDayCount = endDate.getDate(); // 月の末日
9734				const lastMonthEndDate = new Date(year, month - 1, 0); // 前月の最後の日の情報
9735				const lastMonthendDayCount = lastMonthEndDate.getDate(); // 前月の末日
9736	
9737				//月曜始まりの対応
9738				let startDay = startDate.getDay() // 月の最初の日の曜日を取得
9739				if (startDay == 0) {
9740					startDay = 6;
9741				} else {
9742					startDay = startDay - 1;
9743				}
9744	
9745				let dayCount = 1 // 日にちのカウント
9746				let calendarHtml = '' // html
9747	
9748				calendarHtml += '<div class="month_inner_wrap"><div class="month_inner">'
9749				calendarHtml += '<div class="monthly-day-title-wrap">'
9750	
9751				// 曜日の行を作成
9752				for (let i = 0; i < weeks.length; i++) {
9753					calendarHtml += '<div class="week">' + weeks[i] + '</div>'
9754				}
9755				calendarHtml += '</div>'
9756	
9757	
9758				for (let w = 0; w < 6; w++) {
9759					calendarHtml += '<div class="monthly-day-wrap">'
9760	
9761					for (let d = 0; d < 7; d++) {
9762						if (w == 0 && d < startDay) {
9763							// 1行目で1日の曜日の前
9764							let num = lastMonthendDayCount - startDay + d + 1
9765							calendarHtml += '<div class="monthly-day is-disabled"><span class="day">' + num + '</span></div>'
9766						} else if (dayCount > endDayCount) {
9767							// 末尾の日数を超えた
9768							let num = dayCount - endDayCount;
9769							calendarHtml += '<div class="monthly-day is-disabled"><span class="day">' + num + '</span></div>'
9770							dayCount++
9771						} else {
9772							var add_class = todayYMFlag && dayCount === today ? "is-current" : "";
9773							var data_year = year;
9774							var data_month = ('00' + month).slice(-2);
9775							var data_dayCount = ('00' + dayCount).slice(-2);
9776	
9777							calendarHtml += '<div class="monthly-day ' + add_class + '" data-date="' + data_year + "-" + data_month + "-" + data_dayCount + '"><span class="day">' + dayCount + '</span>'
9778							calendarHtml += '<span class="cover"></span></div>'
9779	
9780							dayCount++
9781	
9782						}
9783					}
9784					calendarHtml += '</div>'
9785				}
9786				calendarHtml += '</div></div>'
9787				calendarHtml += '<p class="year-month">' + year + '年' + month + '月</p>'
9788	
9789				return calendarHtml
9790			}
9791			showCalendar(year, month, date);
9792		}
9793
9794
9795		/////////////////////////////////////////////////
9796		// カレンダー日付へ休業日用クラス付与
9797		/////////////////////////////////////////////////
9798		function addHolidayClass() {
9799			var _listItem = $(".reserve_wrap .reserve-day__list");
9800			var _calendarDayItem = $(".calendar .month_inner_wrap .monthly-day:not(.is-disabled)");
9801
9802			// 予約リスト日数とカレンダーのアクティブ日数をチェック
9803			var _list_len = _listItem.length;
9804			var _day_len = _calendarDayItem.length;
9805
9806			if (_list_len == _day_len) {
9807				_listItem.each(function (index) {
9808					var $this = $(this);
9809					if ($this.hasClass("is-holiday")) {
9810						$(_calendarDayItem[index]).addClass("is-holiday");
9811					}
9812				});
9813			}
9814		}
9815
9816
9817		/////////////////////////////////////////////////
9818		// カレンダー表示切り替え
9819		/////////////////////////////////////////////////
9820		function switchCalendar() {
9821			
9822			function toggleChangeBtn() {
9823				var monthIndex = $('.calendar_wrap .month_wrap').index($('.is-show'));
9824				$('.calendar_wrap .btn').show();
9825				if (monthIndex == 0) {
9826					$('.calendar_wrap .btn_prev_month').hide();
9827				} else if (monthIndex == $('.month_wrap').length - 1) {
9828					$('.calendar_wrap .btn_next_month').hide();
9829				}
9830			}
9831			toggleChangeBtn();
9832	
9833			$('.calendar_wrap .btn_next_month').click(function (e) {
9834				e.preventDefault();
9835				var $displaySlide = $('.is-show');
9836				$displaySlide.removeClass('is-show');
9837				$displaySlide.next().addClass('is-show');
9838				toggleChangeBtn();
9839			});
9840	
9841			$('.calendar_wrap .btn_prev_month').click(function (e) {
9842				e.preventDefault();
9843				var $displaySlide = $('.is-show');
9844				$displaySlide.removeClass('is-show');
9845				$displaySlide.prev().addClass('is-show');
9846				toggleChangeBtn();
9847			});
9848	
9849		}
9850		// switchCalendar();
9851	
9852	
9853		/////////////////////////////////////////////////
9854		// カレンダー日付クリック時のリスト表示制御
9855		/////////////////////////////////////////////////
9856		function getCalendarCurrentDay() {
9857			$(".monthly-day-wrap .monthly-day:not(.is-disabled)").click(function (e) {
9858				// console.log("click")
9859				var current_day = $(this).data("date");
9860				var curent_index = $(this).index('.month_inner .monthly-day:not(.is-disabled)');
9861				listShoeControl(current_day);
9862				calendarCurrentWeek(curent_index);
9863				displayPeriodSwitching();
9864				addCurrentClass();
9865			});
9866		}
9867		// getCalendarCurrentDay();
9868	
9869		function listShoeControl(current_day) {
9870			var _index;
9871			var _pc_show_range = 7;
9872			var _sp_show_range = 3;
9873			var reserve_day_list = $(".reserve-day_wrap .reserve-day__list");
9874	
9875			reserve_day_list.each(function () {
9876				var data_reserve_date = $(this).data("reserve-date");
9877				if (current_day === data_reserve_date) {
9878					return _index = $(this).index();
9879				}
9880			});
9881	
9882			var _pc_current_index = _index / _pc_show_range;
9883			var _sp_current_index = _index / _sp_show_range;
9884			if (_index >= 0) {
9885				reserve_day_list.removeClass('show-7days');
9886				reserve_day_list.removeClass('show-3days');
9887				reserve_day_list.filter(':eq(' + (Math.round(_pc_current_index * _pc_show_range)) + '),:gt(' + (Math.round(_pc_current_index * _pc_show_range)) + '):lt(' + (_pc_show_range - 1) + ')').addClass('show-7days');
9888				reserve_day_list.filter(':eq(' + (_sp_current_index * _sp_show_range) + '),:gt(' + (_sp_current_index * _sp_show_range) + '):lt(' + (_sp_show_range - 1) + ')').addClass('show-3days');
9889			}
9890		}
9891	
9892		/////////////////////////////////////////////////
9893		// カレンダー日付クリック時のcurrent表示制御
9894		/////////////////////////////////////////////////
9895		function calendarCurrentWeek(curent_index) {
9896			var pc_range = 7;
9897			var sp_range = 3;
9898			var _index = curent_index;
9899			if (_index != -1) {
9900				$(".monthly-day").removeClass("is-pc_current");
9901				$(".monthly-day").removeClass("is-sp_current");
9902				$(".monthly-day:not(.is-disabled)").filter(':eq(' + (_index) + '),:gt(' + (_index) + '):lt(' + (pc_range - 1) + ')').addClass('is-pc_current');
9903				$(".monthly-day:not(.is-disabled)").filter(':eq(' + (_index) + '),:gt(' + (_index) + '):lt(' + (sp_range - 1) + ')').addClass('is-sp_current');
9904			}
9905		}
9906		// calendarCurrentWeek();
9907	
9908	
9909		/////////////////////////////////////////////////
9910		// 予約のリストが無い日付をis-disabledへ設定
9911		/////////////////////////////////////////////////
9912		function calendarSetDisable() {
9913	
9914			var reserve_list = $(".reserve-day__list");
9915			var _a = reserve_list.length;
9916			var first_index = 0;
9917			var last_index = _a - 1;
9918			var _b = reserve_list[first_index];
9919			var _c = reserve_list[last_index];
9920			var reserve_first_day = $(_b).data("reserve-date");
9921			var reserve_last_day = $(_c).data("reserve-date");
9922			var calendar_day = $(".calendar .month_wrap .monthly-day:not(.is-disabled)");
9923	
9924			//予約リストの最初と最後がカレンダーの何番目か取得(index番号)
9925			var calendar_first_index;
9926			var calendar_last_index;
9927	
9928			calendar_day.each(function (index) {
9929				var calendar_day_date = $(this).data("date");
9930	
9931				if (calendar_day_date == reserve_first_day) {
9932					calendar_first_index = index;
9933				}
9934				if (calendar_day_date == reserve_last_day) {
9935					calendar_last_index = index;
9936				}
9937			});
9938	
9939			calendar_day.each(function (index) {
9940				if (index < calendar_first_index || index > calendar_last_index) {
9941					$(this).addClass("is-disabled");
9942				}
9943			});
9944		}
9945		// calendarSetDisable();
9946	
9947	
9948		/////////////////////////////////////////////////
9949		// 予約リストが表示されている期間をカレンダーへ反映
9950		/////////////////////////////////////////////////
9951		function periodCalendarDisplay() {
9952			var reserve_list = $(".reserve-day__list");
9953			var calendar_day = $(".calendar .month_wrap .monthly-day:not(.is-disabled)");
9954			var _pc_show_reserve_first_index = reserve_list.index($('.reserve-day__list.show-7days:first'));
9955			var _pc_show_reserve_last_index = reserve_list.index($('.reserve-day__list.show-7days:last'));
9956			var _sp_show_reserve_first_index = reserve_list.index($('.reserve-day__list.show-3days:first'));
9957			var _sp_show_reserve_last_index = reserve_list.index($('.reserve-day__list.show-3days:last'));
9958			calendar_day.removeClass("is-pc_current");
9959			calendar_day.removeClass("is-sp_current");
9960	
9961			calendar_day.each(function (index) {
9962				if (index >= _pc_show_reserve_first_index && index <= _pc_show_reserve_last_index) {
9963					$(this).addClass("is-pc_current");
9964				}
9965				if (index >= _sp_show_reserve_first_index && index <= _sp_show_reserve_last_index) {
9966					$(this).addClass("is-sp_current");
9967				}
9968			});
9969		}
9970		// periodCalendarDisplay();
9971	
9972		/////////////////////////////////////////
9973		// 表示期間prev,nextのリスト表示制御
9974		/////////////////////////////////////////
9975		function switchPcReserveList() {
9976			var pc_range = 7;
9977			var reserve_day_list = $(".reserve-day__list");
9978			var reserve_day_list_length = reserve_day_list.length;
9979	
9980			$(".period_display_wrap .next a").on('click', function (e) {
9981				e.preventDefault();
9982				var pc_current_last_index = reserve_day_list.index($('.reserve-day__list.show-7days:last'));
9983				var pc_next_first_index = pc_current_last_index + 1;
9984				var pc_next_last_index = pc_next_first_index + pc_range - 1;
9985	
9986				if (pc_next_first_index <= reserve_day_list_length && pc_next_last_index < reserve_day_list_length + 6) {
9987					reserve_day_list.removeClass('show-7days');
9988					reserve_day_list.filter(':eq(' + (pc_next_first_index) + '),:gt(' + pc_next_first_index + '):lt(' + (pc_range - 1) + ')').addClass('show-7days');
9989				}
9990				displayPeriodSwitching();
9991				periodCalendarDisplay();
9992				addCurrentClass();
9993			});
9994	
9995			$(".period_display_wrap .prev a").on('click', function (e) {
9996				e.preventDefault();
9997				var pc_current_first_index = reserve_day_list.index($('.reserve-day__list.show-7days:first'));
9998				var pc_prev_first_index = pc_current_first_index - pc_range;
9999	
10000				if (pc_prev_first_index >= 1) {
10001					reserve_day_list.removeClass('show-7days');
10002					reserve_day_list.filter(':eq(' + pc_prev_first_index + '),:gt(' + pc_prev_first_index + '):lt(' + (pc_range - 1) + ')').addClass('show-7days');
10003				} else if (pc_prev_first_index < 1) {
10004					reserve_day_list.removeClass('show-7days');
10005					reserve_day_list.filter(':eq(0),:gt(0):lt(' + (pc_range - 1) + ')').addClass('show-7days');
10006				}
10007				displayPeriodSwitching();
10008				periodCalendarDisplay();
10009				addCurrentClass();
10010			});
10011		}
10012		// switchPcReserveList();
10013	
10014	
10015		function switchSpReserveList() {
10016			var sp_range = 3;
10017			var reserve_day_list = $(".reserve-day__list");
10018			var reserve_day_list_length = reserve_day_list.length;
10019	
10020			$(".time_block.next_btn a").on('click', function (e) {
10021				e.preventDefault();
10022				var sp_current_last_index = reserve_day_list.index($('.reserve-day__list.show-3days:last'));
10023				var sp_next_first_index = sp_current_last_index + 1;
10024				var sp_next_last_index = sp_next_first_index + sp_range - 1;
10025	
10026				if (sp_next_first_index <= reserve_day_list_length && sp_next_last_index < reserve_day_list_length + 2) {
10027					reserve_day_list.removeClass('show-3days');
10028					reserve_day_list.filter(':eq(' + (sp_next_first_index) + '),:gt(' + sp_next_first_index + '):lt(' + (sp_range - 1) + ')').addClass('show-3days');
10029				}
10030				displayPeriodSwitching();
10031				periodCalendarDisplay();
10032				addCurrentClass();
10033			});
10034	
10035			$(".time_block.prev_btn a").on('click', function (e) {
10036				e.preventDefault();
10037				var sp_current_first_index = reserve_day_list.index($('.reserve-day__list.show-3days:first'));
10038				var sp_prev_first_index = sp_current_first_index - sp_range;
10039	
10040				if (sp_prev_first_index >= 1) {
10041					reserve_day_list.removeClass('show-3days');
10042					reserve_day_list.filter(':eq(' + sp_prev_first_index + '),:gt(' + sp_prev_first_index + '):lt(' + (sp_range - 1) + ')').addClass('show-3days');
10043				} else if (sp_prev_first_index < 1) {
10044					reserve_day_list.removeClass('show-3days');
10045					reserve_day_list.filter(':eq(0),:gt(0):lt(' + (sp_range - 1) + ')').addClass('show-3days');
10046				}
10047				displayPeriodSwitching();
10048				periodCalendarDisplay();
10049				addCurrentClass();
10050			});
10051	
10052		}
10053		// switchSpReserveList();
10054	
10055	
10056		/////////////////////////////////////////
10057		// 表示期間の日付切り替とarrow調整
10058		/////////////////////////////////////////
10059	
10060		function displayPeriodSwitching() {
10061			var reserve_day_list = $(".reserve-day__list");
10062	
10063			//表示された期間の最初と最後のデータ属性(日付)を取得
10064			var index = {
10065				pc_first: reserve_day_list.index($('.reserve-day__list.show-7days:first')),
10066				pc_last: reserve_day_list.index($('.reserve-day__list.show-7days:last')),
10067				sp_first: reserve_day_list.index($('.reserve-day__list.show-3days:first')),
10068				sp_last: reserve_day_list.index($('.reserve-day__list.show-3days:last'))
10069			}
10070	
10071			var current_date = {
10072				pc_first: $(reserve_day_list[index.pc_first]).data("reserve-date"),
10073				pc_last: $(reserve_day_list[index.pc_last]).data("reserve-date"),
10074				sp_first: $(reserve_day_list[index.sp_first]).data("reserve-date"),
10075				sp_last: $(reserve_day_list[index.sp_last]).data("reserve-date")
10076			}
10077			//年月日の分割
10078			var first_reserve_date = {
10079				pc_year: current_date.pc_first.split("-")[0],
10080				pc_month: current_date.pc_first.split("-")[1],
10081				pc_day: current_date.pc_first.split("-")[2],
10082				sp_year: current_date.sp_first.split("-")[0],
10083				sp_month: current_date.sp_first.split("-")[1],
10084				sp_day: current_date.sp_first.split("-")[2]
10085			}
10086			var last_reserve_date = {
10087				pc_year: current_date.pc_last.split("-")[0],
10088				pc_month: current_date.pc_last.split("-")[1],
10089				pc_day: current_date.pc_last.split("-")[2],
10090				sp_year: current_date.sp_last.split("-")[0],
10091				sp_month: current_date.sp_last.split("-")[1],
10092				sp_day: current_date.sp_last.split("-")[2]
10093			}
10094	
10095			//pc表示切り替え
10096			$(".period_display_wrap .day .first_year").text(first_reserve_date.pc_year);
10097			$(".period_display_wrap .day .first_month").text(first_reserve_date.pc_month);
10098			$(".period_display_wrap .day .first_day").text(first_reserve_date.pc_day);
10099			$(".period_display_wrap .day .last_year").text(last_reserve_date.pc_year);
10100			$(".period_display_wrap .day .last_month").text(last_reserve_date.pc_month);
10101			$(".period_display_wrap .day .last_day").text(last_reserve_date.pc_day);
10102	
10103			//sp表示切り替え
10104			$(".period_display_sp .first_year").text(first_reserve_date.sp_year);
10105			$(".period_display_sp .first_month").text(first_reserve_date.sp_month);
10106			$(".period_display_sp .first_day").text(first_reserve_date.sp_day);
10107			$(".period_display_sp .last_year").text(last_reserve_date.sp_year);
10108			$(".period_display_sp .last_month").text(last_reserve_date.sp_month);
10109			$(".period_display_sp .last_day").text(last_reserve_date.sp_day);
10110	
10111	
10112			//prev,nextにリストがない場合、arrowをdisabled
10113			var list_length = reserve_day_list.length - 1;
10114	
10115			if (index.pc_first == 0) {
10116				$(".period_display_wrap .prev").addClass("disabled");
10117			} else {
10118				$(".period_display_wrap .prev").removeClass("disabled");
10119			}
10120			if (index.pc_last == list_length) {
10121				$(".period_display_wrap .next").addClass("disabled");
10122			} else {
10123				$(".period_display_wrap .next").removeClass("disabled");
10124			}
10125	
10126			if (index.sp_first == 0) {
10127				$(".reserve_wrap .time_block.prev_btn").addClass("disabled");
10128			} else {
10129				$(".reserve_wrap .time_block.prev_btn").removeClass("disabled");
10130			}
10131			if (index.sp_last == list_length) {
10132				$(".reserve_wrap .time_block.next_btn").addClass("disabled");
10133			} else {
10134				$(".reserve_wrap .time_block.next_btn").removeClass("disabled");
10135			}
10136	
10137		}
10138		// displayPeriodSwitching();
10139
10140
10141		//////////////////////////////////////////////////////////////////////
10142		// カレンダーcurrent日の最初、最後へクラスを付与 デザイン設定で必要なため
10143		//////////////////////////////////////////////////////////////////////
10144		function addCurrentClass() {
10145			$(".calendar .monthly-day").removeClass("pc_current_first");
10146			$(".calendar .monthly-day").removeClass("pc_current_last");
10147			$(".calendar .monthly-day").removeClass("sp_current_first");
10148			$(".calendar .monthly-day").removeClass("sp_current_last");
10149			var _tar_1 = $(".calendar .monthly-day.is-pc_current");
10150			var _len_1 = _tar_1.length;
10151
10152			_tar_1.each(function (index) { 
10153				var $this = $(this);
10154				// var last_index = index - 1;
10155				if (index == 0) {
10156					$this.addClass("pc_current_first");
10157				} else if (index == _len_1-1) {
10158					$this.addClass("pc_current_last");
10159				}
10160			});
10161
10162			var _tar_2 = $(".calendar .monthly-day.is-sp_current");
10163			var _len_2 = _tar_2.length;
10164			_tar_2.each(function (index) { 
10165				var $this = $(this);
10166				// var last_index = index - 1;
10167				if (index == 0) {
10168					$this.addClass("sp_current_first");
10169				} else if (index == _len_2-1) {
10170					$this.addClass("sp_current_last");
10171				}
10172			});
10173
10174			
10175		}
10176		// addCurrentClass();
10177
10178
10179	
10180	
10181		function spCalendarModal() {
10182	
10183			var modalOpen = $(".period_display_sp .icon_calendar");
10184			modalOpen.on('click', function (e) {
10185				e.preventDefault();
10186				sizeDetect = $("#size-detect").css("font-family");
10187				$('#calendar-modal-overlay, #calendar_wrap').fadeIn();
10188			});
10189	
10190			// 「Close」ボタンをクリック時に、fadeOutメソッドでHTML要素を非表示にする
10191			$('#sp_modal_close,.monthly-day:not(.is-disabled)').on('click', function () {
10192				$('#calendar-modal-overlay, #calendar_wrap').fadeOut();
10193				sizeDetect = $("#size-detect").css("font-family");
10194			});
10195	
10196			locateCenter();  // => モーダルウィンドウを中央配置するための初期値を設定する
10197			$(window).resize(locateCenter);  // => ウィンドウのリサイズに合わせて、モーダルウィンドウの配置を変える
10198	
10199			// モーダルウィンドウを中央配置するための配置場所を計算する関数
10200			function locateCenter() {
10201				var w = $(window).width();
10202				var h = $(window).height();
10203	
10204				var cw = $('#calendar_wrap').outerWidth();
10205				var ch = $('#calendar_wrap').outerHeight();
10206	
10207				$('#calendar_wrap').css({
10208					'left': ((w - cw) / 2) + 'px',
10209					'top': ((h - ch) / 2) + 'px'
10210				});
10211			}
10212	
10213		}
10214		// spCalendarModal();
10215	
10216		//予約リストクリック時の挙動
10217		function selectReserveTime() {
10218			var reserve_time_empty_itme = $(".reserve-day__list .reserve-time__item.empty");
10219			reserve_time_empty_itme.on("click", function () {
10220				$(".reserve-day__list .reserve-time__item").removeClass("is-select");
10221				$(this).addClass("is-select");
10222				var hopedate = String($(this).data("hopedate"));
10223				var hopetime = String($(this).data("hopetime"));
10224				
10225				_obj.setDate(hopedate);
10226				_obj.setTime(hopetime);
10227
10228			});
10229		}
10230		// selectReserveTime();
10231
10232
10233
10234
10235		
10236		function setDefaultData(_obj) {
10237			var _obj_defaultData_date = _obj.defaultData.date;
10238			var _obj_defaultData_time = _obj.defaultData.time;
10239			// var _obj_defaultData_date = "20200115"
10240			// var _obj_defaultData_time = "120000"
10241			// console.log(_obj_defaultData_date)
10242			// console.log(_obj_defaultData_time)
10243			
10244			var _obj_defaultData_date_year = _obj_defaultData_date.substr(0, 4);
10245			var _obj_defaultData_date_month = _obj_defaultData_date.substr(4, 2);
10246			var _obj_defaultData_date_day = _obj_defaultData_date.substr(6, 2);
10247			var defaultData_date = _obj_defaultData_date_year + '-' + _obj_defaultData_date_month + '-' + _obj_defaultData_date_day;
10248			// var _obj_defaultData_time_hour = _obj_defaultData_time.substr(0, 2);
10249			// var _obj_defaultData_time_minute = _obj_defaultData_time.substr(2, 2);
10250
10251			// リストを選択済みにする
10252			$(".reserve-time__item").each(function () { 
10253				var $this = $(this);
10254				var data_hopedate = String($this.data("hopedate"));
10255				var data_hopetime = String($this.data("hopetime"));
10256				// console.log(data_hopetime)
10257				if (_obj_defaultData_date === data_hopedate && _obj_defaultData_time === data_hopetime) {
10258					console.log($($this))
10259					if($($this).hasClass("empty")){
10260						setShowReserveList();
10261						// console.log("PASS1PASS1PASS1")
10262						$(this).addClass("is-select");
10263						//予約日時をセット
10264						_obj.setDate(_obj_defaultData_date);
10265						_obj.setTime(_obj_defaultData_time);
10266					} else {
10267						// console.log("PASS2PASS2PASS2")
10268						//予約日時をセット
10269						_obj.setDate("");
10270						_obj.setTime("");
10271					}
10272
10273				}
10274			});
10275	
10276			function setShowReserveList(){
10277				var _index;
10278				var _pc_show_range = 7;
10279				var _sp_show_range = 3;
10280				var reserve_day_list = $(".reserve-day_wrap .reserve-day__list");
10281		
10282				reserve_day_list.each(function () {
10283					var data_reserve_date = $(this).data("reserve-date");
10284					if (defaultData_date === data_reserve_date) {
10285						return _index = $(this).index();
10286					}
10287				});
10288		
10289				var _pc_current_index = _index / _pc_show_range;
10290				var _sp_current_index = _index / _sp_show_range;
10291				if (_index >= 0) {
10292					reserve_day_list.removeClass('show-7days');
10293					reserve_day_list.removeClass('show-3days');
10294					reserve_day_list.filter(':eq(' + (Math.round(_pc_current_index * _pc_show_range)) + '),:gt(' + (Math.round(_pc_current_index * _pc_show_range)) + '):lt(' + (_pc_show_range - 1) + ')').addClass('show-7days');
10295					reserve_day_list.filter(':eq(' + (_sp_current_index * _sp_show_range) + '),:gt(' + (_sp_current_index * _sp_show_range) + '):lt(' + (_sp_show_range - 1) + ')').addClass('show-3days');
10296				}
10297
10298			}
10299		}
10300
10301		//時間未選択時のエラークラス制御
10302		_obj.errorListener(function(){
10303			var _addErrorClassElm = $("#reservation .reservation_title_inner__text");
10304			_addErrorClassElm.addClass("unselected_error");
10305			$("#reservation .reserve-day__list .reserve-time__block .reserve-time__item.empty").on("click",function(){
10306				_addErrorClassElm.removeClass("unselected_error");
10307			});
10308		});
10309
10310
10311////////////////////////////////////////////////////////////////////////////////////
10312////////////////////////////////////////////////////////////////////////////////////
10313
10314	}
10315
10316	global.onlineRsvUi = onlineRsvUi;
10317
10318
10319
10320}(DMS));
10321
10322// qrcode.min.js
10323(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
10324write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
10325for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}
vendor: 15,759 bytes, lines 10325-10458
10325this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
103267,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
103270<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
10328setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
10329j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
10330b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
10331c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
103320,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
10333(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
1033478,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
10335j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
10336a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
10337a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
103382)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
10339LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
10340this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
10341[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
10342116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
1034343,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
103443,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
1034555,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
1034645,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
10347(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
10348correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
10349j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
10350d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);
10351/*!
10352 * jQuery Cookie Plugin v1.4.1
10353 * https://github.com/carhartl/jquery-cookie
10354 *
10355 * Copyright 2006, 2014 Klaus Hartl
10356 * Released under the MIT license
10357 */
10358(function (factory) {
10359	if (typeof define === 'function' && define.amd) {
10360		// AMD (Register as an anonymous module)
10361		define(['jquery'], factory);
10362	} else if (typeof exports === 'object') {
10363		// Node/CommonJS
10364		module.exports = factory(require('jquery'));
10365	} else {
10366		// Browser globals
10367		factory(jQuery);
10368	}
10369}(function ($) {
10370
10371	var pluses = /\+/g;
10372
10373	function encode(s) {
10374		return config.raw ? s : encodeURIComponent(s);
10375	}
10376
10377	function decode(s) {
10378		return config.raw ? s : decodeURIComponent(s);
10379	}
10380
10381	function stringifyCookieValue(value) {
10382		return encode(config.json ? JSON.stringify(value) : String(value));
10383	}
10384
10385	function parseCookieValue(s) {
10386		if (s.indexOf('"') === 0) {
10387			// This is a quoted cookie as according to RFC2068, unescape...
10388			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
10389		}
10390
10391		try {
10392			// Replace server-side written pluses with spaces.
10393			// If we can't decode the cookie, ignore it, it's unusable.
10394			// If we can't parse the cookie, ignore it, it's unusable.
10395			s = decodeURIComponent(s.replace(pluses, ' '));
10396			return config.json ? JSON.parse(s) : s;
10397		} catch(e) {}
10398	}
10399
10400	function read(s, converter) {
10401		var value = config.raw ? s : parseCookieValue(s);
10402		return $.isFunction(converter) ? converter(value) : value;
10403	}
10404
10405	var config = $.cookie = function (key, value, options) {
10406
10407		// Write
10408
10409		if (arguments.length > 1 && !$.isFunction(value)) {
10410			options = $.extend({}, config.defaults, options);
10411
10412			if (typeof options.expires === 'number') {
10413				var days = options.expires, t = options.expires = new Date();
10414				t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
10415			}
10416
10417			return (document.cookie = [
10418				encode(key), '=', stringifyCookieValue(value),
10419				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
10420				options.path    ? '; path=' + options.path : '',
10421				options.domain  ? '; domain=' + options.domain : '',
10422				options.secure  ? '; secure' : ''
10423			].join(''));
10424		}
10425
10426		// Read
10427
10428		var result = key ? undefined : {},
10429			// To prevent the for loop in the first place assign an empty array
10430			// in case there are no cookies at all. Also prevents odd result when
10431			// calling $.cookie().
10432			cookies = document.cookie ? document.cookie.split('; ') : [],
10433			i = 0,
10434			l = cookies.length;
10435
10436		for (; i < l; i++) {
10437			var parts = cookies[i].split('='),
10438				name = decode(parts.shift()),
10439				cookie = parts.join('=');
10440
10441			if (key === name) {
10442				// If second argument (value) is a function it's a converter...
10443				result = read(cookie, value);
10444				break;
10445			}
10446
10447			// Prevent storing a cookie that we couldn't decode.
10448			if (!key && (cookie = read(cookie)) !== undefined) {
10449				result[name] = cookie;
10450			}
10451		}
10452
10453		return result;
10454	};
10455
10456	config.defaults = {};
10457
10458	$.removeCookie = function (key, options) {
10459		// Must not alter options, thus extending a fresh object...
10460		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
10461		return !$.cookie(key);
10462	};
10463
10464}));
vendor: 29,142 bytes, lines 10465-11205
10465(function() {
10466
10467    var debug = false;
10468
10469    var root = this;
10470
10471    var EXIF = function(obj) {
10472        if (obj instanceof EXIF) return obj;
10473        if (!(this instanceof EXIF)) return new EXIF(obj);
10474        this.EXIFwrapped = obj;
10475    };
10476
10477    if (typeof exports !== 'undefined') {
10478        if (typeof module !== 'undefined' && module.exports) {
10479            exports = module.exports = EXIF;
10480        }
10481        exports.EXIF = EXIF;
10482    } else {
10483        root.EXIF = EXIF;
10484    }
10485
10486    var ExifTags = EXIF.Tags = {
10487
10488        // version tags
10489        0x9000 : "ExifVersion",             // EXIF version
10490        0xA000 : "FlashpixVersion",         // Flashpix format version
10491
10492        // colorspace tags
10493        0xA001 : "ColorSpace",              // Color space information tag
10494
10495        // image configuration
10496        0xA002 : "PixelXDimension",         // Valid width of meaningful image
10497        0xA003 : "PixelYDimension",         // Valid height of meaningful image
10498        0x9101 : "ComponentsConfiguration", // Information about channels
10499        0x9102 : "CompressedBitsPerPixel",  // Compressed bits per pixel
10500
10501        // user information
10502        0x927C : "MakerNote",               // Any desired information written by the manufacturer
10503        0x9286 : "UserComment",             // Comments by user
10504
10505        // related file
10506        0xA004 : "RelatedSoundFile",        // Name of related sound file
10507
10508        // date and time
10509        0x9003 : "DateTimeOriginal",        // Date and time when the original image was generated
10510        0x9004 : "DateTimeDigitized",       // Date and time when the image was stored digitally
10511        0x9290 : "SubsecTime",              // Fractions of seconds for DateTime
10512        0x9291 : "SubsecTimeOriginal",      // Fractions of seconds for DateTimeOriginal
10513        0x9292 : "SubsecTimeDigitized",     // Fractions of seconds for DateTimeDigitized
10514
10515        // picture-taking conditions
10516        0x829A : "ExposureTime",            // Exposure time (in seconds)
10517        0x829D : "FNumber",                 // F number
10518        0x8822 : "ExposureProgram",         // Exposure program
10519        0x8824 : "SpectralSensitivity",     // Spectral sensitivity
10520        0x8827 : "ISOSpeedRatings",         // ISO speed rating
10521        0x8828 : "OECF",                    // Optoelectric conversion factor
10522        0x9201 : "ShutterSpeedValue",       // Shutter speed
10523        0x9202 : "ApertureValue",           // Lens aperture
10524        0x9203 : "BrightnessValue",         // Value of brightness
10525        0x9204 : "ExposureBias",            // Exposure bias
10526        0x9205 : "MaxApertureValue",        // Smallest F number of lens
10527        0x9206 : "SubjectDistance",         // Distance to subject in meters
10528        0x9207 : "MeteringMode",            // Metering mode
10529        0x9208 : "LightSource",             // Kind of light source
10530        0x9209 : "Flash",                   // Flash status
10531        0x9214 : "SubjectArea",             // Location and area of main subject
10532        0x920A : "FocalLength",             // Focal length of the lens in mm
10533        0xA20B : "FlashEnergy",             // Strobe energy in BCPS
10534        0xA20C : "SpatialFrequencyResponse",    //
10535        0xA20E : "FocalPlaneXResolution",   // Number of pixels in width direction per FocalPlaneResolutionUnit
10536        0xA20F : "FocalPlaneYResolution",   // Number of pixels in height direction per FocalPlaneResolutionUnit
10537        0xA210 : "FocalPlaneResolutionUnit",    // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution
10538        0xA214 : "SubjectLocation",         // Location of subject in image
10539        0xA215 : "ExposureIndex",           // Exposure index selected on camera
10540        0xA217 : "SensingMethod",           // Image sensor type
10541        0xA300 : "FileSource",              // Image source (3 == DSC)
10542        0xA301 : "SceneType",               // Scene type (1 == directly photographed)
10543        0xA302 : "CFAPattern",              // Color filter array geometric pattern
10544        0xA401 : "CustomRendered",          // Special processing
10545        0xA402 : "ExposureMode",            // Exposure mode
10546        0xA403 : "WhiteBalance",            // 1 = auto white balance, 2 = manual
10547        0xA404 : "DigitalZoomRation",       // Digital zoom ratio
10548        0xA405 : "FocalLengthIn35mmFilm",   // Equivalent foacl length assuming 35mm film camera (in mm)
10549        0xA406 : "SceneCaptureType",        // Type of scene
10550        0xA407 : "GainControl",             // Degree of overall image gain adjustment
10551        0xA408 : "Contrast",                // Direction of contrast processing applied by camera
10552        0xA409 : "Saturation",              // Direction of saturation processing applied by camera
10553        0xA40A : "Sharpness",               // Direction of sharpness processing applied by camera
10554        0xA40B : "DeviceSettingDescription",    //
10555        0xA40C : "SubjectDistanceRange",    // Distance to subject
10556
10557        // other tags
10558        0xA005 : "InteroperabilityIFDPointer",
10559        0xA420 : "ImageUniqueID"            // Identifier assigned uniquely to each image
10560    };
10561
10562    var TiffTags = EXIF.TiffTags = {
10563        0x0100 : "ImageWidth",
10564        0x0101 : "ImageHeight",
10565        0x8769 : "ExifIFDPointer",
10566        0x8825 : "GPSInfoIFDPointer",
10567        0xA005 : "InteroperabilityIFDPointer",
10568        0x0102 : "BitsPerSample",
10569        0x0103 : "Compression",
10570        0x0106 : "PhotometricInterpretation",
10571        0x0112 : "Orientation",
10572        0x0115 : "SamplesPerPixel",
10573        0x011C : "PlanarConfiguration",
10574        0x0212 : "YCbCrSubSampling",
10575        0x0213 : "YCbCrPositioning",
10576        0x011A : "XResolution",
10577        0x011B : "YResolution",
10578        0x0128 : "ResolutionUnit",
10579        0x0111 : "StripOffsets",
10580        0x0116 : "RowsPerStrip",
10581        0x0117 : "StripByteCounts",
10582        0x0201 : "JPEGInterchangeFormat",
10583        0x0202 : "JPEGInterchangeFormatLength",
10584        0x012D : "TransferFunction",
10585        0x013E : "WhitePoint",
10586        0x013F : "PrimaryChromaticities",
10587        0x0211 : "YCbCrCoefficients",
10588        0x0214 : "ReferenceBlackWhite",
10589        0x0132 : "DateTime",
10590        0x010E : "ImageDescription",
10591        0x010F : "Make",
10592        0x0110 : "Model",
10593        0x0131 : "Software",
10594        0x013B : "Artist",
10595        0x8298 : "Copyright"
10596    };
10597
10598    var GPSTags = EXIF.GPSTags = {
10599        0x0000 : "GPSVersionID",
10600        0x0001 : "GPSLatitudeRef",
10601        0x0002 : "GPSLatitude",
10602        0x0003 : "GPSLongitudeRef",
10603        0x0004 : "GPSLongitude",
10604        0x0005 : "GPSAltitudeRef",
10605        0x0006 : "GPSAltitude",
10606        0x0007 : "GPSTimeStamp",
10607        0x0008 : "GPSSatellites",
10608        0x0009 : "GPSStatus",
10609        0x000A : "GPSMeasureMode",
10610        0x000B : "GPSDOP",
10611        0x000C : "GPSSpeedRef",
10612        0x000D : "GPSSpeed",
10613        0x000E : "GPSTrackRef",
10614        0x000F : "GPSTrack",
10615        0x0010 : "GPSImgDirectionRef",
10616        0x0011 : "GPSImgDirection",
10617        0x0012 : "GPSMapDatum",
10618        0x0013 : "GPSDestLatitudeRef",
10619        0x0014 : "GPSDestLatitude",
10620        0x0015 : "GPSDestLongitudeRef",
10621        0x0016 : "GPSDestLongitude",
10622        0x0017 : "GPSDestBearingRef",
10623        0x0018 : "GPSDestBearing",
10624        0x0019 : "GPSDestDistanceRef",
10625        0x001A : "GPSDestDistance",
10626        0x001B : "GPSProcessingMethod",
10627        0x001C : "GPSAreaInformation",
10628        0x001D : "GPSDateStamp",
10629        0x001E : "GPSDifferential"
10630    };
10631
10632     // EXIF 2.3 Spec
10633    var IFD1Tags = EXIF.IFD1Tags = {
10634        0x0100: "ImageWidth",
10635        0x0101: "ImageHeight",
10636        0x0102: "BitsPerSample",
10637        0x0103: "Compression",
10638        0x0106: "PhotometricInterpretation",
10639        0x0111: "StripOffsets",
10640        0x0112: "Orientation",
10641        0x0115: "SamplesPerPixel",
10642        0x0116: "RowsPerStrip",
10643        0x0117: "StripByteCounts",
10644        0x011A: "XResolution",
10645        0x011B: "YResolution",
10646        0x011C: "PlanarConfiguration",
10647        0x0128: "ResolutionUnit",
10648        0x0201: "JpegIFOffset",    // When image format is JPEG, this value show offset to JPEG data stored.(aka "ThumbnailOffset" or "JPEGInterchangeFormat")
10649        0x0202: "JpegIFByteCount", // When image format is JPEG, this value shows data size of JPEG image (aka "ThumbnailLength" or "JPEGInterchangeFormatLength")
10650        0x0211: "YCbCrCoefficients",
10651        0x0212: "YCbCrSubSampling",
10652        0x0213: "YCbCrPositioning",
10653        0x0214: "ReferenceBlackWhite"
10654    };
10655
10656    var StringValues = EXIF.StringValues = {
10657        ExposureProgram : {
10658            0 : "Not defined",
10659            1 : "Manual",
10660            2 : "Normal program",
10661            3 : "Aperture priority",
10662            4 : "Shutter priority",
10663            5 : "Creative program",
10664            6 : "Action program",
10665            7 : "Portrait mode",
10666            8 : "Landscape mode"
10667        },
10668        MeteringMode : {
10669            0 : "Unknown",
10670            1 : "Average",
10671            2 : "CenterWeightedAverage",
10672            3 : "Spot",
10673            4 : "MultiSpot",
10674            5 : "Pattern",
10675            6 : "Partial",
10676            255 : "Other"
10677        },
10678        LightSource : {
10679            0 : "Unknown",
10680            1 : "Daylight",
10681            2 : "Fluorescent",
10682            3 : "Tungsten (incandescent light)",
10683            4 : "Flash",
10684            9 : "Fine weather",
10685            10 : "Cloudy weather",
10686            11 : "Shade",
10687            12 : "Daylight fluorescent (D 5700 - 7100K)",
10688            13 : "Day white fluorescent (N 4600 - 5400K)",
10689            14 : "Cool white fluorescent (W 3900 - 4500K)",
10690            15 : "White fluorescent (WW 3200 - 3700K)",
10691            17 : "Standard light A",
10692            18 : "Standard light B",
10693            19 : "Standard light C",
10694            20 : "D55",
10695            21 : "D65",
10696            22 : "D75",
10697            23 : "D50",
10698            24 : "ISO studio tungsten",
10699            255 : "Other"
10700        },
10701        Flash : {
10702            0x0000 : "Flash did not fire",
10703            0x0001 : "Flash fired",
10704            0x0005 : "Strobe return light not detected",
10705            0x0007 : "Strobe return light detected",
10706            0x0009 : "Flash fired, compulsory flash mode",
10707            0x000D : "Flash fired, compulsory flash mode, return light not detected",
10708            0x000F : "Flash fired, compulsory flash mode, return light detected",
10709            0x0010 : "Flash did not fire, compulsory flash mode",
10710            0x0018 : "Flash did not fire, auto mode",
10711            0x0019 : "Flash fired, auto mode",
10712            0x001D : "Flash fired, auto mode, return light not detected",
10713            0x001F : "Flash fired, auto mode, return light detected",
10714            0x0020 : "No flash function",
10715            0x0041 : "Flash fired, red-eye reduction mode",
10716            0x0045 : "Flash fired, red-eye reduction mode, return light not detected",
10717            0x0047 : "Flash fired, red-eye reduction mode, return light detected",
10718            0x0049 : "Flash fired, compulsory flash mode, red-eye reduction mode",
10719            0x004D : "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
10720            0x004F : "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
10721            0x0059 : "Flash fired, auto mode, red-eye reduction mode",
10722            0x005D : "Flash fired, auto mode, return light not detected, red-eye reduction mode",
10723            0x005F : "Flash fired, auto mode, return light detected, red-eye reduction mode"
10724        },
10725        SensingMethod : {
10726            1 : "Not defined",
10727            2 : "One-chip color area sensor",
10728            3 : "Two-chip color area sensor",
10729            4 : "Three-chip color area sensor",
10730            5 : "Color sequential area sensor",
10731            7 : "Trilinear sensor",
10732            8 : "Color sequential linear sensor"
10733        },
10734        SceneCaptureType : {
10735            0 : "Standard",
10736            1 : "Landscape",
10737            2 : "Portrait",
10738            3 : "Night scene"
10739        },
10740        SceneType : {
10741            1 : "Directly photographed"
10742        },
10743        CustomRendered : {
10744            0 : "Normal process",
10745            1 : "Custom process"
10746        },
10747        WhiteBalance : {
10748            0 : "Auto white balance",
10749            1 : "Manual white balance"
10750        },
10751        GainControl : {
10752            0 : "None",
10753            1 : "Low gain up",
10754            2 : "High gain up",
10755            3 : "Low gain down",
10756            4 : "High gain down"
10757        },
10758        Contrast : {
10759            0 : "Normal",
10760            1 : "Soft",
10761            2 : "Hard"
10762        },
10763        Saturation : {
10764            0 : "Normal",
10765            1 : "Low saturation",
10766            2 : "High saturation"
10767        },
10768        Sharpness : {
10769            0 : "Normal",
10770            1 : "Soft",
10771            2 : "Hard"
10772        },
10773        SubjectDistanceRange : {
10774            0 : "Unknown",
10775            1 : "Macro",
10776            2 : "Close view",
10777            3 : "Distant view"
10778        },
10779        FileSource : {
10780            3 : "DSC"
10781        },
10782
10783        Components : {
10784            0 : "",
10785            1 : "Y",
10786            2 : "Cb",
10787            3 : "Cr",
10788            4 : "R",
10789            5 : "G",
10790            6 : "B"
10791        }
10792    };
10793
10794    function addEvent(element, event, handler) {
10795        if (element.addEventListener) {
10796            element.addEventListener(event, handler, false);
10797        } else if (element.attachEvent) {
10798            element.attachEvent("on" + event, handler);
10799        }
10800    }
10801
10802    function imageHasData(img) {
10803        return !!(img.exifdata);
10804    }
10805
10806
10807    function base64ToArrayBuffer(base64, contentType) {
10808        contentType = contentType || base64.match(/^data\:([^\;]+)\;base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg'
10809        base64 = base64.replace(/^data\:([^\;]+)\;base64,/gmi, '');
10810        var binary = atob(base64);
10811        var len = binary.length;
10812        var buffer = new ArrayBuffer(len);
10813        var view = new Uint8Array(buffer);
10814        for (var i = 0; i < len; i++) {
10815            view[i] = binary.charCodeAt(i);
10816        }
10817        return buffer;
10818    }
10819
10820    function objectURLToBlob(url, callback) {
10821        var http = new XMLHttpRequest();
10822        http.open("GET", url, true);
10823        http.responseType = "blob";
10824        http.onload = function(e) {
10825            if (this.status == 200 || this.status === 0) {
10826                callback(this.response);
10827            }
10828        };
10829        http.send();
10830    }
10831
10832    function getImageData(img, callback) {
10833        function handleBinaryFile(binFile) {
10834            var data = findEXIFinJPEG(binFile);
10835            img.exifdata = data || {};
10836            var iptcdata = findIPTCinJPEG(binFile);
10837            img.iptcdata = iptcdata || {};
10838            if (EXIF.isXmpEnabled) {
10839               var xmpdata= findXMPinJPEG(binFile);
10840               img.xmpdata = xmpdata || {};               
10841            }
10842            if (callback) {
10843                callback.call(img);
10844            }
10845        }
10846
10847        if (img.src) {
10848            if (/^data\:/i.test(img.src)) { // Data URI
10849                var arrayBuffer = base64ToArrayBuffer(img.src);
10850                handleBinaryFile(arrayBuffer);
10851
10852            } else if (/^blob\:/i.test(img.src)) { // Object URL
10853                var fileReader = new FileReader();
10854                fileReader.onload = function(e) {
10855                    handleBinaryFile(e.target.result);
10856                };
10857                objectURLToBlob(img.src, function (blob) {
10858                    fileReader.readAsArrayBuffer(blob);
10859                });
10860            } else {
10861                var http = new XMLHttpRequest();
10862                http.onload = function() {
10863                    if (this.status == 200 || this.status === 0) {
10864                        handleBinaryFile(http.response);
10865                    } else {
10866                        throw "Could not load image";
10867                    }
10868                    http = null;
10869                };
10870                http.open("GET", img.src, true);
10871                http.responseType = "arraybuffer";
10872                http.send(null);
10873            }
10874        } else if (self.FileReader && (img instanceof self.Blob || img instanceof self.File)) {
10875            var fileReader = new FileReader();
10876            fileReader.onload = function(e) {
10877                if (debug) console.log("Got file of length " + e.target.result.byteLength);
10878                handleBinaryFile(e.target.result);
10879            };
10880
10881            fileReader.readAsArrayBuffer(img);
10882        }
10883    }
10884
10885    function findEXIFinJPEG(file) {
10886        var dataView = new DataView(file);
10887
10888        if (debug) console.log("Got file of length " + file.byteLength);
10889        if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {
10890            if (debug) console.log("Not a valid JPEG");
10891            return false; // not a valid jpeg
10892        }
10893
10894        var offset = 2,
10895            length = file.byteLength,
10896            marker;
10897
10898        while (offset < length) {
10899            if (dataView.getUint8(offset) != 0xFF) {
10900                if (debug) console.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8(offset));
10901                return false; // not a valid marker, something is wrong
10902            }
10903
10904            marker = dataView.getUint8(offset + 1);
10905            if (debug) console.log(marker);
10906
10907            // we could implement handling for other markers here,
10908            // but we're only looking for 0xFFE1 for EXIF data
10909
10910            if (marker == 225) {
10911                if (debug) console.log("Found 0xFFE1 marker");
10912
10913                return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2);
10914
10915                // offset += 2 + file.getShortAt(offset+2, true);
10916
10917            } else {
10918                offset += 2 + dataView.getUint16(offset+2);
10919            }
10920
10921        }
10922
10923    }
10924
10925    function findIPTCinJPEG(file) {
10926        var dataView = new DataView(file);
10927
10928        if (debug) console.log("Got file of length " + file.byteLength);
10929        if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {
10930            if (debug) console.log("Not a valid JPEG");
10931            return false; // not a valid jpeg
10932        }
10933
10934        var offset = 2,
10935            length = file.byteLength;
10936
10937
10938        var isFieldSegmentStart = function(dataView, offset){
10939            return (
10940                dataView.getUint8(offset) === 0x38 &&
10941                dataView.getUint8(offset+1) === 0x42 &&
10942                dataView.getUint8(offset+2) === 0x49 &&
10943                dataView.getUint8(offset+3) === 0x4D &&
10944                dataView.getUint8(offset+4) === 0x04 &&
10945                dataView.getUint8(offset+5) === 0x04
10946            );
10947        };
10948
10949        while (offset < length) {
10950
10951            if ( isFieldSegmentStart(dataView, offset )){
10952
10953                // Get the length of the name header (which is padded to an even number of bytes)
10954                var nameHeaderLength = dataView.getUint8(offset+7);
10955                if(nameHeaderLength % 2 !== 0) nameHeaderLength += 1;
10956                // Check for pre photoshop 6 format
10957                if(nameHeaderLength === 0) {
10958                    // Always 4
10959                    nameHeaderLength = 4;
10960                }
10961
10962                var startOffset = offset + 8 + nameHeaderLength;
10963                var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength);
10964
10965                return readIPTCData(file, startOffset, sectionLength);
10966
10967                break;
10968
10969            }
10970
10971
10972            // Not the marker, continue searching
10973            offset++;
10974
10975        }
10976
10977    }
10978    var IptcFieldMap = {
10979        0x78 : 'caption',
10980        0x6E : 'credit',
10981        0x19 : 'keywords',
10982        0x37 : 'dateCreated',
10983        0x50 : 'byline',
10984        0x55 : 'bylineTitle',
10985        0x7A : 'captionWriter',
10986        0x69 : 'headline',
10987        0x74 : 'copyright',
10988        0x0F : 'category'
10989    };
10990    function readIPTCData(file, startOffset, sectionLength){
10991        var dataView = new DataView(file);
10992        var data = {};
10993        var fieldValue, fieldName, dataSize, segmentType, segmentSize;
10994        var segmentStartPos = startOffset;
10995        while(segmentStartPos < startOffset+sectionLength) {
10996            if(dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos+1) === 0x02){
10997                segmentType = dataView.getUint8(segmentStartPos+2);
10998                if(segmentType in IptcFieldMap) {
10999                    dataSize = dataView.getInt16(segmentStartPos+3);
11000                    segmentSize = dataSize + 5;
11001                    fieldName = IptcFieldMap[segmentType];
11002                    fieldValue = getStringFromDB(dataView, segmentStartPos+5, dataSize);
11003                    // Check if we already stored a value with this name
11004                    if(data.hasOwnProperty(fieldName)) {
11005                        // Value already stored with this name, create multivalue field
11006                        if(data[fieldName] instanceof Array) {
11007                            data[fieldName].push(fieldValue);
11008                        }
11009                        else {
11010                            data[fieldName] = [data[fieldName], fieldValue];
11011                        }
11012                    }
11013                    else {
11014                        data[fieldName] = fieldValue;
11015                    }
11016                }
11017
11018            }
11019            segmentStartPos++;
11020        }
11021        return data;
11022    }
11023
11024
11025
11026    function readTags(file, tiffStart, dirStart, strings, bigEnd) {
11027        var entries = file.getUint16(dirStart, !bigEnd),
11028            tags = {},
11029            entryOffset, tag,
11030            i;
11031
11032        for (i=0;i<entries;i++) {
11033            entryOffset = dirStart + i*12 + 2;
11034            tag = strings[file.getUint16(entryOffset, !bigEnd)];
11035            if (!tag && debug) console.log("Unknown tag: " + file.getUint16(entryOffset, !bigEnd));
11036            tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);
11037        }
11038        return tags;
11039    }
11040
11041
11042    function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) {
11043        var type = file.getUint16(entryOffset+2, !bigEnd),
11044            numValues = file.getUint32(entryOffset+4, !bigEnd),
11045            valueOffset = file.getUint32(entryOffset+8, !bigEnd) + tiffStart,
11046            offset,
11047            vals, val, n,
11048            numerator, denominator;
11049
11050        switch (type) {
11051            case 1: // byte, 8-bit unsigned int
11052            case 7: // undefined, 8-bit byte, value depending on field
11053                if (numValues == 1) {
11054                    return file.getUint8(entryOffset + 8, !bigEnd);
11055                } else {
11056                    offset = numValues > 4 ? valueOffset : (entryOffset + 8);
11057                    vals = [];
11058                    for (n=0;n<numValues;n++) {
11059                        vals[n] = file.getUint8(offset + n);
11060                    }
11061                    return vals;
11062                }
11063
11064            case 2: // ascii, 8-bit byte
11065                offset = numValues > 4 ? valueOffset : (entryOffset + 8);
11066                return getStringFromDB(file, offset, numValues-1);
11067
11068            case 3: // short, 16 bit int
11069                if (numValues == 1) {
11070                    return file.getUint16(entryOffset + 8, !bigEnd);
11071                } else {
11072                    offset = numValues > 2 ? valueOffset : (entryOffset + 8);
11073                    vals = [];
11074                    for (n=0;n<numValues;n++) {
11075                        vals[n] = file.getUint16(offset + 2*n, !bigEnd);
11076                    }
11077                    return vals;
11078                }
11079
11080            case 4: // long, 32 bit int
11081                if (numValues == 1) {
11082                    return file.getUint32(entryOffset + 8, !bigEnd);
11083                } else {
11084                    vals = [];
11085                    for (n=0;n<numValues;n++) {
11086                        vals[n] = file.getUint32(valueOffset + 4*n, !bigEnd);
11087                    }
11088                    return vals;
11089                }
11090
11091            case 5:    // rational = two long values, first is numerator, second is denominator
11092                if (numValues == 1) {
11093                    numerator = file.getUint32(valueOffset, !bigEnd);
11094                    denominator = file.getUint32(valueOffset+4, !bigEnd);
11095                    val = new Number(numerator / denominator);
11096                    val.numerator = numerator;
11097                    val.denominator = denominator;
11098                    return val;
11099                } else {
11100                    vals = [];
11101                    for (n=0;n<numValues;n++) {
11102                        numerator = file.getUint32(valueOffset + 8*n, !bigEnd);
11103                        denominator = file.getUint32(valueOffset+4 + 8*n, !bigEnd);
11104                        vals[n] = new Number(numerator / denominator);
11105                        vals[n].numerator = numerator;
11106                        vals[n].denominator = denominator;
11107                    }
11108                    return vals;
11109                }
11110
11111            case 9: // slong, 32 bit signed int
11112                if (numValues == 1) {
11113                    return file.getInt32(entryOffset + 8, !bigEnd);
11114                } else {
11115                    vals = [];
11116                    for (n=0;n<numValues;n++) {
11117                        vals[n] = file.getInt32(valueOffset + 4*n, !bigEnd);
11118                    }
11119                    return vals;
11120                }
11121
11122            case 10: // signed rational, two slongs, first is numerator, second is denominator
11123                if (numValues == 1) {
11124                    return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset+4, !bigEnd);
11125                } else {
11126                    vals = [];
11127                    for (n=0;n<numValues;n++) {
11128                        vals[n] = file.getInt32(valueOffset + 8*n, !bigEnd) / file.getInt32(valueOffset+4 + 8*n, !bigEnd);
11129                    }
11130                    return vals;
11131                }
11132        }
11133    }
11134
11135    /**
11136    * Given an IFD (Image File Directory) start offset
11137    * returns an offset to next IFD or 0 if it's the last IFD.
11138    */
11139    function getNextIFDOffset(dataView, dirStart, bigEnd){
11140        //the first 2bytes means the number of directory entries contains in this IFD
11141        var entries = dataView.getUint16(dirStart, !bigEnd);
11142
11143        // After last directory entry, there is a 4bytes of data,
11144        // it means an offset to next IFD.
11145        // If its value is '0x00000000', it means this is the last IFD and there is no linked IFD.
11146
11147        return dataView.getUint32(dirStart + 2 + entries * 12, !bigEnd); // each entry is 12 bytes long
11148    }
11149
11150    function readThumbnailImage(dataView, tiffStart, firstIFDOffset, bigEnd){
11151        // get the IFD1 offset
11152        var IFD1OffsetPointer = getNextIFDOffset(dataView, tiffStart+firstIFDOffset, bigEnd);
11153
11154        if (!IFD1OffsetPointer) {
11155            // console.log('******** IFD1Offset is empty, image thumb not found ********');
11156            return {};
11157        }
11158        else if (IFD1OffsetPointer > dataView.byteLength) { // this should not happen
11159            // console.log('******** IFD1Offset is outside the bounds of the DataView ********');
11160            return {};
11161        }
11162        // console.log('*******  thumbnail IFD offset (IFD1) is: %s', IFD1OffsetPointer);
11163
11164        var thumbTags = readTags(dataView, tiffStart, tiffStart + IFD1OffsetPointer, IFD1Tags, bigEnd)
11165
11166        // EXIF 2.3 specification for JPEG format thumbnail
11167
11168        // If the value of Compression(0x0103) Tag in IFD1 is '6', thumbnail image format is JPEG.
11169        // Most of Exif image uses JPEG format for thumbnail. In that case, you can get offset of thumbnail
11170        // by JpegIFOffset(0x0201) Tag in IFD1, size of thumbnail by JpegIFByteCount(0x0202) Tag.
11171        // Data format is ordinary JPEG format, starts from 0xFFD8 and ends by 0xFFD9. It seems that
11172        // JPEG format and 160x120pixels of size are recommended thumbnail format for Exif2.1 or later.
11173
11174        if (thumbTags['Compression']) {
11175            // console.log('Thumbnail image found!');
11176
11177            switch (thumbTags['Compression']) {
11178                case 6:
11179                    // console.log('Thumbnail image format is JPEG');
11180                    if (thumbTags.JpegIFOffset && thumbTags.JpegIFByteCount) {
11181                    // extract the thumbnail
11182                        var tOffset = tiffStart + thumbTags.JpegIFOffset;
11183                        var tLength = thumbTags.JpegIFByteCount;
11184                        thumbTags['blob'] = new Blob([new Uint8Array(dataView.buffer, tOffset, tLength)], {
11185                            type: 'image/jpeg'
11186                        });
11187                    }
11188                break;
11189
11190            case 1:
11191                console.log("Thumbnail image format is TIFF, which is not implemented.");
11192                break;
11193            default:
11194                console.log("Unknown thumbnail image format '%s'", thumbTags['Compression']);
11195            }
11196        }
11197        else if (thumbTags['PhotometricInterpretation'] == 2) {
11198            console.log("Thumbnail image format is RGB, which is not implemented.");
11199        }
11200        return thumbTags;
11201    }
11202
11203    function getStringFromDB(buffer, start, length) {
11204        var outstr = "";
11205        for (
11205var 
vendor: 11,312 bytes, lines 11205-11523
11205n = start; n < start+length; n++) {
11206            outstr += String.fromCharCode(buffer.getUint8(n));
11207        }
11208        return outstr;
11209    }
11210
11211    function readEXIFData(file, start) {
11212        if (getStringFromDB(file, start, 4) != "Exif") {
11213            if (debug) console.log("Not valid EXIF data! " + getStringFromDB(file, start, 4));
11214            return false;
11215        }
11216
11217        var bigEnd,
11218            tags, tag,
11219            exifData, gpsData,
11220            tiffOffset = start + 6;
11221
11222        // test for TIFF validity and endianness
11223        if (file.getUint16(tiffOffset) == 0x4949) {
11224            bigEnd = false;
11225        } else if (file.getUint16(tiffOffset) == 0x4D4D) {
11226            bigEnd = true;
11227        } else {
11228            if (debug) console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)");
11229            return false;
11230        }
11231
11232        if (file.getUint16(tiffOffset+2, !bigEnd) != 0x002A) {
11233            if (debug) console.log("Not valid TIFF data! (no 0x002A)");
11234            return false;
11235        }
11236
11237        var firstIFDOffset = file.getUint32(tiffOffset+4, !bigEnd);
11238
11239        if (firstIFDOffset < 0x00000008) {
11240            if (debug) console.log("Not valid TIFF data! (First offset less than 8)", file.getUint32(tiffOffset+4, !bigEnd));
11241            return false;
11242        }
11243
11244        tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd);
11245
11246        if (tags.ExifIFDPointer) {
11247            exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd);
11248            for (tag in exifData) {
11249                switch (tag) {
11250                    case "LightSource" :
11251                    case "Flash" :
11252                    case "MeteringMode" :
11253                    case "ExposureProgram" :
11254                    case "SensingMethod" :
11255                    case "SceneCaptureType" :
11256                    case "SceneType" :
11257                    case "CustomRendered" :
11258                    case "WhiteBalance" :
11259                    case "GainControl" :
11260                    case "Contrast" :
11261                    case "Saturation" :
11262                    case "Sharpness" :
11263                    case "SubjectDistanceRange" :
11264                    case "FileSource" :
11265                        exifData[tag] = StringValues[tag][exifData[tag]];
11266                        break;
11267
11268                    case "ExifVersion" :
11269                    case "FlashpixVersion" :
11270                        exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]);
11271                        break;
11272
11273                    case "ComponentsConfiguration" :
11274                        exifData[tag] =
11275                            StringValues.Components[exifData[tag][0]] +
11276                            StringValues.Components[exifData[tag][1]] +
11277                            StringValues.Components[exifData[tag][2]] +
11278                            StringValues.Components[exifData[tag][3]];
11279                        break;
11280                }
11281                tags[tag] = exifData[tag];
11282            }
11283        }
11284
11285        if (tags.GPSInfoIFDPointer) {
11286            gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd);
11287            for (tag in gpsData) {
11288                switch (tag) {
11289                    case "GPSVersionID" :
11290                        gpsData[tag] = gpsData[tag][0] +
11291                            "." + gpsData[tag][1] +
11292                            "." + gpsData[tag][2] +
11293                            "." + gpsData[tag][3];
11294                        break;
11295                }
11296                tags[tag] = gpsData[tag];
11297            }
11298        }
11299
11300        // extract thumbnail
11301        tags['thumbnail'] = readThumbnailImage(file, tiffOffset, firstIFDOffset, bigEnd);
11302
11303        return tags;
11304    }
11305
11306   function findXMPinJPEG(file) {
11307
11308        if (!('DOMParser' in self)) {
11309            // console.warn('XML parsing not supported without DOMParser');
11310            return;
11311        }
11312        var dataView = new DataView(file);
11313
11314        if (debug) console.log("Got file of length " + file.byteLength);
11315        if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {
11316           if (debug) console.log("Not a valid JPEG");
11317           return false; // not a valid jpeg
11318        }
11319
11320        var offset = 2,
11321            length = file.byteLength,
11322            dom = new DOMParser();
11323
11324        while (offset < (length-4)) {
11325            if (getStringFromDB(dataView, offset, 4) == "http") {
11326                var startOffset = offset - 1;
11327                var sectionLength = dataView.getUint16(offset - 2) - 1;
11328                var xmpString = getStringFromDB(dataView, startOffset, sectionLength)
11329                var xmpEndIndex = xmpString.indexOf('xmpmeta>') + 8;
11330                xmpString = xmpString.substring( xmpString.indexOf( '<x:xmpmeta' ), xmpEndIndex );
11331
11332                var indexOfXmp = xmpString.indexOf('x:xmpmeta') + 10
11333                //Many custom written programs embed xmp/xml without any namespace. Following are some of them.
11334                //Without these namespaces, XML is thought to be invalid by parsers
11335                xmpString = xmpString.slice(0, indexOfXmp)
11336                            + 'xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" '
11337                            + 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
11338                            + 'xmlns:tiff="http://ns.adobe.com/tiff/1.0/" '
11339                            + 'xmlns:plus="http://schemas.android.com/apk/lib/com.google.android.gms.plus" '
11340                            + 'xmlns:ext="http://www.gettyimages.com/xsltExtension/1.0" '
11341                            + 'xmlns:exif="http://ns.adobe.com/exif/1.0/" '
11342                            + 'xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" '
11343                            + 'xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" '
11344                            + 'xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/" '
11345                            + 'xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" '
11346                            + 'xmlns:Iptc4xmpExt="http://iptc.org/std/Iptc4xmpExt/2008-02-29/" '
11347                            + xmpString.slice(indexOfXmp)
11348
11349                var domDocument = dom.parseFromString( xmpString, 'text/xml' );
11350                return xml2Object(domDocument);
11351            } else{
11352             offset++;
11353            }
11354        }
11355    }
11356
11357    function xml2json(xml) {
11358        var json = {};
11359      
11360        if (xml.nodeType == 1) { // element node
11361          if (xml.attributes.length > 0) {
11362            json['@attributes'] = {};
11363            for (var j = 0; j < xml.attributes.length; j++) {
11364              var attribute = xml.attributes.item(j);
11365              json['@attributes'][attribute.nodeName] = attribute.nodeValue;
11366            }
11367          }
11368        } else if (xml.nodeType == 3) { // text node
11369          return xml.nodeValue;
11370        }
11371      
11372        // deal with children
11373        if (xml.hasChildNodes()) {
11374          for(var i = 0; i < xml.childNodes.length; i++) {
11375            var child = xml.childNodes.item(i);
11376            var nodeName = child.nodeName;
11377            if (json[nodeName] == null) {
11378              json[nodeName] = xml2json(child);
11379            } else {
11380              if (json[nodeName].push == null) {
11381                var old = json[nodeName];
11382                json[nodeName] = [];
11383                json[nodeName].push(old);
11384              }
11385              json[nodeName].push(xml2json(child));
11386            }
11387          }
11388        }
11389        
11390        return json;
11391    }
11392
11393    function xml2Object(xml) {
11394        try {
11395            var obj = {};
11396            if (xml.children.length > 0) {
11397              for (var i = 0; i < xml.children.length; i++) {
11398                var item = xml.children.item(i);
11399                var attributes = item.attributes;
11400                for(var idx in attributes) {
11401                    var itemAtt = attributes[idx];
11402                    var dataKey = itemAtt.nodeName;
11403                    var dataValue = itemAtt.nodeValue;
11404
11405                    if(dataKey !== undefined) {
11406                        obj[dataKey] = dataValue;
11407                    }
11408                }
11409                var nodeName = item.nodeName;
11410
11411                if (typeof (obj[nodeName]) == "undefined") {
11412                  obj[nodeName] = xml2json(item);
11413                } else {
11414                  if (typeof (obj[nodeName].push) == "undefined") {
11415                    var old = obj[nodeName];
11416
11417                    obj[nodeName] = [];
11418                    obj[nodeName].push(old);
11419                  }
11420                  obj[nodeName].push(xml2json(item));
11421                }
11422              }
11423            } else {
11424              obj = xml.textContent;
11425            }
11426            return obj;
11427          } catch (e) {
11428              console.log(e.message);
11429          }
11430    }
11431
11432    EXIF.enableXmp = function() {
11433        EXIF.isXmpEnabled = true;
11434    }
11435
11436    EXIF.disableXmp = function() {
11437        EXIF.isXmpEnabled = false;
11438    }
11439
11440    EXIF.getData = function(img, callback) {
11441        if (((self.Image && img instanceof self.Image)
11442            || (self.HTMLImageElement && img instanceof self.HTMLImageElement))
11443            && !img.complete)
11444            return false;
11445
11446        if (!imageHasData(img)) {
11447            getImageData(img, callback);
11448        } else {
11449            if (callback) {
11450                callback.call(img);
11451            }
11452        }
11453        return true;
11454    }
11455
11456    EXIF.getTag = function(img, tag) {
11457        if (!imageHasData(img)) return;
11458        return img.exifdata[tag];
11459    }
11460    
11461    EXIF.getIptcTag = function(img, tag) {
11462        if (!imageHasData(img)) return;
11463        return img.iptcdata[tag];
11464    }
11465
11466    EXIF.getAllTags = function(img) {
11467        if (!imageHasData(img)) return {};
11468        var a,
11469            data = img.exifdata,
11470            tags = {};
11471        for (a in data) {
11472            if (data.hasOwnProperty(a)) {
11473                tags[a] = data[a];
11474            }
11475        }
11476        return tags;
11477    }
11478    
11479    EXIF.getAllIptcTags = function(img) {
11480        if (!imageHasData(img)) return {};
11481        var a,
11482            data = img.iptcdata,
11483            tags = {};
11484        for (a in data) {
11485            if (data.hasOwnProperty(a)) {
11486                tags[a] = data[a];
11487            }
11488        }
11489        return tags;
11490    }
11491
11492    EXIF.pretty = function(img) {
11493        if (!imageHasData(img)) return "";
11494        var a,
11495            data = img.exifdata,
11496            strPretty = "";
11497        for (a in data) {
11498            if (data.hasOwnProperty(a)) {
11499                if (typeof data[a] == "object") {
11500                    if (data[a] instanceof Number) {
11501                        strPretty += a + " : " + data[a] + " [" + data[a].numerator + "/" + data[a].denominator + "]\r\n";
11502                    } else {
11503                        strPretty += a + " : [" + data[a].length + " values]\r\n";
11504                    }
11505                } else {
11506                    strPretty += a + " : " + data[a] + "\r\n";
11507                }
11508            }
11509        }
11510        return strPretty;
11511    }
11512
11513    EXIF.readFromBinaryFile = function(file) {
11514        return findEXIFinJPEG(file);
11515    }
11516
11517    if (typeof define === 'function' && define.amd) {
11518        define('exif-js', [], function() {
11519            return EXIF;
11520        });
11521    }
11522}.call(this));
11523
11524;(function(factory) {
11525    'use strict';
11526    if (typeof define === 'function' && define.amd) {
11527        define(['jquery'], factory);
11528    } else if (typeof exports !== 'undefined') {
11529        module.exports = factory(require('jquery'));
11530    } else {
11531        factory(jQuery);
11532    }
11533
11534}(function($) {
11535    'use strict';
11536    var Slick = window.Slick || {};
11537
11538    Slick = (function() {
11539
11540        var instanceUid = 0;
11541
11542        function Slick(element, settings) {
11543
11544            var _ = this, dataSettings;
11545
11546            _.defaults = {
11547                accessibility: true,
11548                adaptiveHeight: false,
11549                appendArrows: $(element),
11550                appendDots: $(element),
11551                arrows: true,
11552                asNavFor: null,
11553                prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
11554                nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
11555                autoplay: false,
11556                autoplaySpeed: 3000,
11557                centerMode: false,
11558                centerPadding: '50px',
11559                cssEase: 'ease',
11560                customPaging: function(slider, i) {
11561                    return $('<button type="button" />').text(i + 1);
11562                },
11563                dots: false,
11564                dotsClass: 'slick-dots',
11565                draggable: true,
11566                easing: 'linear',
11567                edgeFriction: 0.35,
11568                fade: false,
11569                focusOnSelect: false,
11570                focusOnChange: false,
11571                infinite: true,
11572                initialSlide: 0,
11573                lazyLoad: 'ondemand',
11574                mobileFirst: false,
11575                pauseOnHover: true,
11576                pauseOnFocus: true,
11577                pauseOnDotsHover: false,
11578                respondTo: 'window',
11579                responsive: null,
11580                rows: 1,
11581                rtl: false,
11582                slide: '',
11583                slidesPerRow: 1,
11584                slidesToShow: 1,
11585                slidesToScroll: 1,
11586                speed: 500,
11587                swipe: true,
11588                swipeToSlide: false,
11589                touchMove: true,
11590                touchThreshold: 5,
11591                useCSS: true,
11592                useTransform: true,
11593                variableWidth: false,
11594                vertical: false,
11595                verticalSwiping: false,
11596                waitForAnimate: true,
11597                zIndex: 1000
11598            };
11599
11600            _.initials = {
11601                animating: false,
11602                dragging: false,
11603                autoPlayTimer: null,
11604                currentDirection: 0,
11605                currentLeft: null,
11606                currentSlide: 0,
11607                direction: 1,
11608                $dots: null,
11609                listWidth: null,
11610                listHeight: null,
11611                loadIndex: 0,
11612                $nextArrow: null,
11613                $prevArrow: null,
11614                scrolling: false,
11615                slideCount: null,
11616                slideWidth: null,
11617                $slideTrack: null,
11618                $slides: null,
11619                sliding: false,
11620                slideOffset: 0,
11621                swipeLeft: null,
11622                swiping: false,
11623                $list: null,
11624                touchObject: {},
11625                transformsEnabled: false,
vendor: 28,764 bytes, lines 11626-12598
11626                unslicked: false
11627            };
11628
11629            $.extend(_, _.initials);
11630
11631            _.activeBreakpoint = null;
11632            _.animType = null;
11633            _.animProp = null;
11634            _.breakpoints = [];
11635            _.breakpointSettings = [];
11636            _.cssTransitions = false;
11637            _.focussed = false;
11638            _.interrupted = false;
11639            _.hidden = 'hidden';
11640            _.paused = true;
11641            _.positionProp = null;
11642            _.respondTo = null;
11643            _.rowCount = 1;
11644            _.shouldClick = true;
11645            _.$slider = $(element);
11646            _.$slidesCache = null;
11647            _.transformType = null;
11648            _.transitionType = null;
11649            _.visibilityChange = 'visibilitychange';
11650            _.windowWidth = 0;
11651            _.windowTimer = null;
11652
11653            dataSettings = $(element).data('slick') || {};
11654
11655            _.options = $.extend({}, _.defaults, settings, dataSettings);
11656
11657            _.currentSlide = _.options.initialSlide;
11658
11659            _.originalSettings = _.options;
11660
11661            if (typeof document.mozHidden !== 'undefined') {
11662                _.hidden = 'mozHidden';
11663                _.visibilityChange = 'mozvisibilitychange';
11664            } else if (typeof document.webkitHidden !== 'undefined') {
11665                _.hidden = 'webkitHidden';
11666                _.visibilityChange = 'webkitvisibilitychange';
11667            }
11668
11669            _.autoPlay = $.proxy(_.autoPlay, _);
11670            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
11671            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
11672            _.changeSlide = $.proxy(_.changeSlide, _);
11673            _.clickHandler = $.proxy(_.clickHandler, _);
11674            _.selectHandler = $.proxy(_.selectHandler, _);
11675            _.setPosition = $.proxy(_.setPosition, _);
11676            _.swipeHandler = $.proxy(_.swipeHandler, _);
11677            _.dragHandler = $.proxy(_.dragHandler, _);
11678            _.keyHandler = $.proxy(_.keyHandler, _);
11679
11680            _.instanceUid = instanceUid++;
11681
11682            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
11683
11684
11685            _.registerBreakpoints();
11686            _.init(true);
11687
11688        }
11689
11690        return Slick;
11691
11692    }());
11693
11694    Slick.prototype.activateADA = function() {
11695        var _ = this;
11696
11697        _.$slideTrack.find('.slick-active').attr({
11698            'aria-hidden': 'false'
11699        }).find('a, input, button, select').attr({
11700            'tabindex': '0'
11701        });
11702
11703    };
11704
11705    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
11706
11707        var _ = this;
11708
11709        if (typeof(index) === 'boolean') {
11710            addBefore = index;
11711            index = null;
11712        } else if (index < 0 || (index >= _.slideCount)) {
11713            return false;
11714        }
11715
11716        _.unload();
11717
11718        if (typeof(index) === 'number') {
11719            if (index === 0 && _.$slides.length === 0) {
11720                $(markup).appendTo(_.$slideTrack);
11721            } else if (addBefore) {
11722                $(markup).insertBefore(_.$slides.eq(index));
11723            } else {
11724                $(markup).insertAfter(_.$slides.eq(index));
11725            }
11726        } else {
11727            if (addBefore === true) {
11728                $(markup).prependTo(_.$slideTrack);
11729            } else {
11730                $(markup).appendTo(_.$slideTrack);
11731            }
11732        }
11733
11734        _.$slides = _.$slideTrack.children(this.options.slide);
11735
11736        _.$slideTrack.children(this.options.slide).detach();
11737
11738        _.$slideTrack.append(_.$slides);
11739
11740        _.$slides.each(function(index, element) {
11741            $(element).attr('data-slick-index', index);
11742        });
11743
11744        _.$slidesCache = _.$slides;
11745
11746        _.reinit();
11747
11748    };
11749
11750    Slick.prototype.animateHeight = function() {
11751        var _ = this;
11752        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
11753            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
11754            _.$list.animate({
11755                height: targetHeight
11756            }, _.options.speed);
11757        }
11758    };
11759
11760    Slick.prototype.animateSlide = function(targetLeft, callback) {
11761
11762        var animProps = {},
11763            _ = this;
11764
11765        _.animateHeight();
11766
11767        if (_.options.rtl === true && _.options.vertical === false) {
11768            targetLeft = -targetLeft;
11769        }
11770        if (_.transformsEnabled === false) {
11771            if (_.options.vertical === false) {
11772                _.$slideTrack.animate({
11773                    left: targetLeft
11774                }, _.options.speed, _.options.easing, callback);
11775            } else {
11776                _.$slideTrack.animate({
11777                    top: targetLeft
11778                }, _.options.speed, _.options.easing, callback);
11779            }
11780
11781        } else {
11782
11783            if (_.cssTransitions === false) {
11784                if (_.options.rtl === true) {
11785                    _.currentLeft = -(_.currentLeft);
11786                }
11787                $({
11788                    animStart: _.currentLeft
11789                }).animate({
11790                    animStart: targetLeft
11791                }, {
11792                    duration: _.options.speed,
11793                    easing: _.options.easing,
11794                    step: function(now) {
11795                        now = Math.ceil(now);
11796                        if (_.options.vertical === false) {
11797                            animProps[_.animType] = 'translate(' +
11798                                now + 'px, 0px)';
11799                            _.$slideTrack.css(animProps);
11800                        } else {
11801                            animProps[_.animType] = 'translate(0px,' +
11802                                now + 'px)';
11803                            _.$slideTrack.css(animProps);
11804                        }
11805                    },
11806                    complete: function() {
11807                        if (callback) {
11808                            callback.call();
11809                        }
11810                    }
11811                });
11812
11813            } else {
11814
11815                _.applyTransition();
11816                targetLeft = Math.ceil(targetLeft);
11817
11818                if (_.options.vertical === false) {
11819                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
11820                } else {
11821                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
11822                }
11823                _.$slideTrack.css(animProps);
11824
11825                if (callback) {
11826                    setTimeout(function() {
11827
11828                        _.disableTransition();
11829
11830                        callback.call();
11831                    }, _.options.speed);
11832                }
11833
11834            }
11835
11836        }
11837
11838    };
11839
11840    Slick.prototype.getNavTarget = function() {
11841
11842        var _ = this,
11843            asNavFor = _.options.asNavFor;
11844
11845        if ( asNavFor && asNavFor !== null ) {
11846            asNavFor = $(asNavFor).not(_.$slider);
11847        }
11848
11849        return asNavFor;
11850
11851    };
11852
11853    Slick.prototype.asNavFor = function(index) {
11854
11855        var _ = this,
11856            asNavFor = _.getNavTarget();
11857
11858        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
11859            asNavFor.each(function() {
11860                var target = $(this).slick('getSlick');
11861                if(!target.unslicked) {
11862                    target.slideHandler(index, true);
11863                }
11864            });
11865        }
11866
11867    };
11868
11869    Slick.prototype.applyTransition = function(slide) {
11870
11871        var _ = this,
11872            transition = {};
11873
11874        if (_.options.fade === false) {
11875            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
11876        } else {
11877            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
11878        }
11879
11880        if (_.options.fade === false) {
11881            _.$slideTrack.css(transition);
11882        } else {
11883            _.$slides.eq(slide).css(transition);
11884        }
11885
11886    };
11887
11888    Slick.prototype.autoPlay = function() {
11889
11890        var _ = this;
11891
11892        _.autoPlayClear();
11893
11894        if ( _.slideCount > _.options.slidesToShow ) {
11895            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
11896        }
11897
11898    };
11899
11900    Slick.prototype.autoPlayClear = function() {
11901
11902        var _ = this;
11903
11904        if (_.autoPlayTimer) {
11905            clearInterval(_.autoPlayTimer);
11906        }
11907
11908    };
11909
11910    Slick.prototype.autoPlayIterator = function() {
11911
11912        var _ = this,
11913            slideTo = _.currentSlide + _.options.slidesToScroll;
11914
11915        if ( !_.paused && !_.interrupted && !_.focussed ) {
11916
11917            if ( _.options.infinite === false ) {
11918
11919                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
11920                    _.direction = 0;
11921                }
11922
11923                else if ( _.direction === 0 ) {
11924
11925                    slideTo = _.currentSlide - _.options.slidesToScroll;
11926
11927                    if ( _.currentSlide - 1 === 0 ) {
11928                        _.direction = 1;
11929                    }
11930
11931                }
11932
11933            }
11934
11935            _.slideHandler( slideTo );
11936
11937        }
11938
11939    };
11940
11941    Slick.prototype.buildArrows = function() {
11942
11943        var _ = this;
11944
11945        if (_.options.arrows === true ) {
11946
11947            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
11948            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
11949
11950            if( _.slideCount > _.options.slidesToShow ) {
11951
11952                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
11953                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
11954
11955                if (_.htmlExpr.test(_.options.prevArrow)) {
11956                    _.$prevArrow.prependTo(_.options.appendArrows);
11957                }
11958
11959                if (_.htmlExpr.test(_.options.nextArrow)) {
11960                    _.$nextArrow.appendTo(_.options.appendArrows);
11961                }
11962
11963                if (_.options.infinite !== true) {
11964                    _.$prevArrow
11965                        .addClass('slick-disabled')
11966                        .attr('aria-disabled', 'true');
11967                }
11968
11969            } else {
11970
11971                _.$prevArrow.add( _.$nextArrow )
11972
11973                    .addClass('slick-hidden')
11974                    .attr({
11975                        'aria-disabled': 'true',
11976                        'tabindex': '-1'
11977                    });
11978
11979            }
11980
11981        }
11982
11983    };
11984
11985    Slick.prototype.buildDots = function() {
11986
11987        var _ = this,
11988            i, dot;
11989
11990        if (_.options.dots === true) {
11991
11992            _.$slider.addClass('slick-dotted');
11993
11994            dot = $('<ul />').addClass(_.options.dotsClass);
11995
11996            for (i = 0; i <= _.getDotCount(); i += 1) {
11997                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
11998            }
11999
12000            _.$dots = dot.appendTo(_.options.appendDots);
12001
12002            _.$dots.find('li').first().addClass('slick-active');
12003
12004        }
12005
12006    };
12007
12008    Slick.prototype.buildOut = function() {
12009
12010        var _ = this;
12011
12012        _.$slides =
12013            _.$slider
12014                .children( _.options.slide + ':not(.slick-cloned)')
12015                .addClass('slick-slide');
12016
12017        _.slideCount = _.$slides.length;
12018
12019        _.$slides.each(function(index, element) {
12020            $(element)
12021                .attr('data-slick-index', index)
12022                .data('originalStyling', $(element).attr('style') || '');
12023        });
12024
12025        _.$slider.addClass('slick-slider');
12026
12027        _.$slideTrack = (_.slideCount === 0) ?
12028            $('<div class="slick-track"/>').appendTo(_.$slider) :
12029            _.$slides.wrapAll('<div class="slick-track"/>').parent();
12030
12031        _.$list = _.$slideTrack.wrap(
12032            '<div class="slick-list"/>').parent();
12033        _.$slideTrack.css('opacity', 0);
12034
12035        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
12036            _.options.slidesToScroll = 1;
12037        }
12038
12039        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
12040
12041        _.setupInfinite();
12042
12043        _.buildArrows();
12044
12045        _.buildDots();
12046
12047        _.updateDots();
12048
12049
12050        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
12051
12052        if (_.options.draggable === true) {
12053            _.$list.addClass('draggable');
12054        }
12055
12056    };
12057
12058    Slick.prototype.buildRows = function() {
12059
12060        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
12061
12062        newSlides = document.createDocumentFragment();
12063        originalSlides = _.$slider.children();
12064
12065        if(_.options.rows > 1) {
12066
12067            slidesPerSection = _.options.slidesPerRow * _.options.rows;
12068            numOfSlides = Math.ceil(
12069                originalSlides.length / slidesPerSection
12070            );
12071
12072            for(a = 0; a < numOfSlides; a++){
12073                var slide = document.createElement('div');
12074                for(b = 0; b < _.options.rows; b++) {
12075                    var row = document.createElement('div');
12076                    for(c = 0; c < _.options.slidesPerRow; c++) {
12077                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
12078                        if (originalSlides.get(target)) {
12079                            row.appendChild(originalSlides.get(target));
12080                        }
12081                    }
12082                    slide.appendChild(row);
12083                }
12084                newSlides.appendChild(slide);
12085            }
12086
12087            _.$slider.empty().append(newSlides);
12088            _.$slider.children().children().children()
12089                .css({
12090                    'width':(100 / _.options.slidesPerRow) + '%',
12091                    'display': 'inline-block'
12092                });
12093
12094        }
12095
12096    };
12097
12098    Slick.prototype.checkResponsive = function(initial, forceUpdate) {
12099
12100        var _ = this,
12101            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
12102        var sliderWidth = _.$slider.width();
12103        var windowWidth = window.innerWidth || $(window).width();
12104
12105        if (_.respondTo === 'window') {
12106            respondToWidth = windowWidth;
12107        } else if (_.respondTo === 'slider') {
12108            respondToWidth = sliderWidth;
12109        } else if (_.respondTo === 'min') {
12110            respondToWidth = Math.min(windowWidth, sliderWidth);
12111        }
12112
12113        if ( _.options.responsive &&
12114            _.options.responsive.length &&
12115            _.options.responsive !== null) {
12116
12117            targetBreakpoint = null;
12118
12119            for (breakpoint in _.breakpoints) {
12120                if (_.breakpoints.hasOwnProperty(breakpoint)) {
12121                    if (_.originalSettings.mobileFirst === false) {
12122                        if (respondToWidth < _.breakpoints[breakpoint]) {
12123                            targetBreakpoint = _.breakpoints[breakpoint];
12124                        }
12125                    } else {
12126                        if (respondToWidth > _.breakpoints[breakpoint]) {
12127                            targetBreakpoint = _.breakpoints[breakpoint];
12128                        }
12129                    }
12130                }
12131            }
12132
12133            if (targetBreakpoint !== null) {
12134                if (_.activeBreakpoint !== null) {
12135                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
12136                        _.activeBreakpoint =
12137                            targetBreakpoint;
12138                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
12139                            _.unslick(targetBreakpoint);
12140                        } else {
12141                            _.options = $.extend({}, _.originalSettings,
12142                                _.breakpointSettings[
12143                                    targetBreakpoint]);
12144                            if (initial === true) {
12145                                _.currentSlide = _.options.initialSlide;
12146                            }
12147                            _.refresh(initial);
12148                        }
12149                        triggerBreakpoint = targetBreakpoint;
12150                    }
12151                } else {
12152                    _.activeBreakpoint = targetBreakpoint;
12153                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
12154                        _.unslick(targetBreakpoint);
12155                    } else {
12156                        _.options = $.extend({}, _.originalSettings,
12157                            _.breakpointSettings[
12158                                targetBreakpoint]);
12159                        if (initial === true) {
12160                            _.currentSlide = _.options.initialSlide;
12161                        }
12162                        _.refresh(initial);
12163                    }
12164                    triggerBreakpoint = targetBreakpoint;
12165                }
12166            } else {
12167                if (_.activeBreakpoint !== null) {
12168                    _.activeBreakpoint = null;
12169                    _.options = _.originalSettings;
12170                    if (initial === true) {
12171                        _.currentSlide = _.options.initialSlide;
12172                    }
12173                    _.refresh(initial);
12174                    triggerBreakpoint = targetBreakpoint;
12175                }
12176            }
12177
12178            if( !initial && triggerBreakpoint !== false ) {
12179                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
12180            }
12181        }
12182
12183    };
12184
12185    Slick.prototype.changeSlide = function(event, dontAnimate) {
12186
12187        var _ = this,
12188            $target = $(event.currentTarget),
12189            indexOffset, slideOffset, unevenOffset;
12190
12191        if($target.is('a')) {
12192            event.preventDefault();
12193        }
12194
12195        if(!$target.is('li')) {
12196            $target = $target.closest('li');
12197        }
12198
12199        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
12200        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
12201
12202        switch (event.data.message) {
12203
12204            case 'previous':
12205                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
12206                if (_.slideCount > _.options.slidesToShow) {
12207                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
12208                }
12209                break;
12210
12211            case 'next':
12212                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
12213                if (_.slideCount > _.options.slidesToShow) {
12214                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
12215                }
12216                break;
12217
12218            case 'index':
12219                var index = event.data.index === 0 ? 0 :
12220                    event.data.index || $target.index() * _.options.slidesToScroll;
12221
12222                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
12223                $target.children().trigger('focus');
12224                break;
12225
12226            default:
12227                return;
12228        }
12229
12230    };
12231
12232    Slick.prototype.checkNavigable = function(index) {
12233
12234        var _ = this,
12235            navigables, prevNavigable;
12236
12237        navigables = _.getNavigableIndexes();
12238        prevNavigable = 0;
12239        if (index > navigables[navigables.length - 1]) {
12240            index = navigables[navigables.length - 1];
12241        } else {
12242            for (var n in navigables) {
12243                if (index < navigables[n]) {
12244                    index = prevNavigable;
12245                    break;
12246                }
12247                prevNavigable = navigables[n];
12248            }
12249        }
12250
12251        return index;
12252    };
12253
12254    Slick.prototype.cleanUpEvents = function() {
12255
12256        var _ = this;
12257
12258        if (_.options.dots && _.$dots !== null) {
12259
12260            $('li', _.$dots)
12261                .off('click.slick', _.changeSlide)
12262                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
12263                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
12264
12265            if (_.options.accessibility === true) {
12266                _.$dots.off('keydown.slick', _.keyHandler);
12267            }
12268        }
12269
12270        _.$slider.off('focus.slick blur.slick');
12271
12272        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
12273            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
12274            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
12275
12276            if (_.options.accessibility === true) {
12277                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
12278                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
12279            }
12280        }
12281
12282        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
12283        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
12284        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
12285        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
12286
12287        _.$list.off('click.slick', _.clickHandler);
12288
12289        $(document).off(_.visibilityChange, _.visibility);
12290
12291        _.cleanUpSlideEvents();
12292
12293        if (_.options.accessibility === true) {
12294            _.$list.off('keydown.slick', _.keyHandler);
12295        }
12296
12297        if (_.options.focusOnSelect === true) {
12298            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
12299        }
12300
12301        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
12302
12303        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
12304
12305        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
12306
12307        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
12308
12309    };
12310
12311    Slick.prototype.cleanUpSlideEvents = function() {
12312
12313        var _ = this;
12314
12315        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
12316        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
12317
12318    };
12319
12320    Slick.prototype.cleanUpRows = function() {
12321
12322        var _ = this, originalSlides;
12323
12324        if(_.options.rows > 1) {
12325            originalSlides = _.$slides.children().children();
12326            originalSlides.removeAttr('style');
12327            _.$slider.empty().append(originalSlides);
12328        }
12329
12330    };
12331
12332    Slick.prototype.clickHandler = function(event) {
12333
12334        var _ = this;
12335
12336        if (_.shouldClick === false) {
12337            event.stopImmediatePropagation();
12338            event.stopPropagation();
12339            event.preventDefault();
12340        }
12341
12342    };
12343
12344    Slick.prototype.destroy = function(refresh) {
12345
12346        var _ = this;
12347
12348        _.autoPlayClear();
12349
12350        _.touchObject = {};
12351
12352        _.cleanUpEvents();
12353
12354        $('.slick-cloned', _.$slider).detach();
12355
12356        if (_.$dots) {
12357            _.$dots.remove();
12358        }
12359
12360        if ( _.$prevArrow && _.$prevArrow.length ) {
12361
12362            _.$prevArrow
12363                .removeClass('slick-disabled slick-arrow slick-hidden')
12364                .removeAttr('aria-hidden aria-disabled tabindex')
12365                .css('display','');
12366
12367            if ( _.htmlExpr.test( _.options.prevArrow )) {
12368                _.$prevArrow.remove();
12369            }
12370        }
12371
12372        if ( _.$nextArrow && _.$nextArrow.length ) {
12373
12374            _.$nextArrow
12375                .removeClass('slick-disabled slick-arrow slick-hidden')
12376                .removeAttr('aria-hidden aria-disabled tabindex')
12377                .css('display','');
12378
12379            if ( _.htmlExpr.test( _.options.nextArrow )) {
12380                _.$nextArrow.remove();
12381            }
12382        }
12383
12384
12385        if (_.$slides) {
12386
12387            _.$slides
12388                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
12389                .removeAttr('aria-hidden')
12390                .removeAttr('data-slick-index')
12391                .each(function(){
12392                    $(this).attr('style', $(this).data('originalStyling'));
12393                });
12394
12395            _.$slideTrack.children(this.options.slide).detach();
12396
12397            _.$slideTrack.detach();
12398
12399            _.$list.detach();
12400
12401            _.$slider.append(_.$slides);
12402        }
12403
12404        _.cleanUpRows();
12405
12406        _.$slider.removeClass('slick-slider');
12407        _.$slider.removeClass('slick-initialized');
12408        _.$slider.removeClass('slick-dotted');
12409
12410        _.unslicked = true;
12411
12412        if(!refresh) {
12413            _.$slider.trigger('destroy', [_]);
12414        }
12415
12416    };
12417
12418    Slick.prototype.disableTransition = function(slide) {
12419
12420        var _ = this,
12421            transition = {};
12422
12423        transition[_.transitionType] = '';
12424
12425        if (_.options.fade === false) {
12426            _.$slideTrack.css(transition);
12427        } else {
12428            _.$slides.eq(slide).css(transition);
12429        }
12430
12431    };
12432
12433    Slick.prototype.fadeSlide = function(slideIndex, callback) {
12434
12435        var _ = this;
12436
12437        if (_.cssTransitions === false) {
12438
12439            _.$slides.eq(slideIndex).css({
12440                zIndex: _.options.zIndex
12441            });
12442
12443            _.$slides.eq(slideIndex).animate({
12444                opacity: 1
12445            }, _.options.speed, _.options.easing, callback);
12446
12447        } else {
12448
12449            _.applyTransition(slideIndex);
12450
12451            _.$slides.eq(slideIndex).css({
12452                opacity: 1,
12453                zIndex: _.options.zIndex
12454            });
12455
12456            if (callback) {
12457                setTimeout(function() {
12458
12459                    _.disableTransition(slideIndex);
12460
12461                    callback.call();
12462                }, _.options.speed);
12463            }
12464
12465        }
12466
12467    };
12468
12469    Slick.prototype.fadeSlideOut = function(slideIndex) {
12470
12471        var _ = this;
12472
12473        if (_.cssTransitions === false) {
12474
12475            _.$slides.eq(slideIndex).animate({
12476                opacity: 0,
12477                zIndex: _.options.zIndex - 2
12478            }, _.options.speed, _.options.easing);
12479
12480        } else {
12481
12482            _.applyTransition(slideIndex);
12483
12484            _.$slides.eq(slideIndex).css({
12485                opacity: 0,
12486                zIndex: _.options.zIndex - 2
12487            });
12488
12489        }
12490
12491    };
12492
12493    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
12494
12495        var _ = this;
12496
12497        if (filter !== null) {
12498
12499            _.$slidesCache = _.$slides;
12500
12501            _.unload();
12502
12503            _.$slideTrack.children(this.options.slide).detach();
12504
12505            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
12506
12507            _.reinit();
12508
12509        }
12510
12511    };
12512
12513    Slick.prototype.focusHandler = function() {
12514
12515        var _ = this;
12516
12517        _.$slider
12518            .off('focus.slick blur.slick')
12519            .on('focus.slick blur.slick', '*', function(event) {
12520
12521            event.stopImmediatePropagation();
12522            var $sf = $(this);
12523
12524            setTimeout(function() {
12525
12526                if( _.options.pauseOnFocus ) {
12527                    _.focussed = $sf.is(':focus');
12528                    _.autoPlay();
12529                }
12530
12531            }, 0);
12532
12533        });
12534    };
12535
12536    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
12537
12538        var _ = this;
12539        return _.currentSlide;
12540
12541    };
12542
12543    Slick.prototype.getDotCount = function() {
12544
12545        var _ = this;
12546
12547        var breakPoint = 0;
12548        var counter = 0;
12549        var pagerQty = 0;
12550
12551        if (_.options.infinite === true) {
12552            if (_.slideCount <= _.options.slidesToShow) {
12553                 ++pagerQty;
12554            } else {
12555                while (breakPoint < _.slideCount) {
12556                    ++pagerQty;
12557                    breakPoint = counter + _.options.slidesToScroll;
12558                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
12559                }
12560            }
12561        } else if (_.options.centerMode === true) {
12562            pagerQty = _.slideCount;
12563        } else if(!_.options.asNavFor) {
12564            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
12565        }else {
12566            while (breakPoint < _.slideCount) {
12567                ++pagerQty;
12568                breakPoint = counter + _.options.slidesToScroll;
12569                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
12570            }
12571        }
12572
12573        return pagerQty - 1;
12574
12575    };
12576
12577    Slick.prototype.getLeft = function(slideIndex) {
12578
12579        var _ = this,
12580            targetLeft,
12581            verticalHeight,
12582            verticalOffset = 0,
12583            targetSlide,
12584            coef;
12585
12586        _.slideOffset = 0;
12587        verticalHeight = _.$slides.first().outerHeight(true);
12588
12589        if (_.options.infinite === true) {
12590            if (_.slideCount > _.options.slidesToShow) {
12591                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
12592                coef = -1
12593
12594                if (_.options.vertical === true && _.options.centerMode === true) {
12595                    if (_.options.slidesToShow === 2) {
12596                        coef = -1.5;
12597                    } else if (_.options.slidesToShow === 1) {
12598                        coef = -2
vendor: 7,663 bytes, lines 12598-12825
12598
12599                    }
12600                }
12601                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
12602            }
12603            if (_.slideCount % _.options.slidesToScroll !== 0) {
12604                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
12605                    if (slideIndex > _.slideCount) {
12606                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
12607                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
12608                    } else {
12609                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
12610                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
12611                    }
12612                }
12613            }
12614        } else {
12615            if (slideIndex + _.options.slidesToShow > _.slideCount) {
12616                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
12617                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
12618            }
12619        }
12620
12621        if (_.slideCount <= _.options.slidesToShow) {
12622            _.slideOffset = 0;
12623            verticalOffset = 0;
12624        }
12625
12626        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
12627            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
12628        } else if (_.options.centerMode === true && _.options.infinite === true) {
12629            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
12630        } else if (_.options.centerMode === true) {
12631            _.slideOffset = 0;
12632            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
12633        }
12634
12635        if (_.options.vertical === false) {
12636            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
12637        } else {
12638            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
12639        }
12640
12641        if (_.options.variableWidth === true) {
12642
12643            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
12644                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
12645            } else {
12646                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
12647            }
12648
12649            if (_.options.rtl === true) {
12650                if (targetSlide[0]) {
12651                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
12652                } else {
12653                    targetLeft =  0;
12654                }
12655            } else {
12656                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
12657            }
12658
12659            if (_.options.centerMode === true) {
12660                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
12661                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
12662                } else {
12663                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
12664                }
12665
12666                if (_.options.rtl === true) {
12667                    if (targetSlide[0]) {
12668                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
12669                    } else {
12670                        targetLeft =  0;
12671                    }
12672                } else {
12673                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
12674                }
12675
12676                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
12677            }
12678        }
12679
12680        return targetLeft;
12681
12682    };
12683
12684    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
12685
12686        var _ = this;
12687
12688        return _.options[option];
12689
12690    };
12691
12692    Slick.prototype.getNavigableIndexes = function() {
12693
12694        var _ = this,
12695            breakPoint = 0,
12696            counter = 0,
12697            indexes = [],
12698            max;
12699
12700        if (_.options.infinite === false) {
12701            max = _.slideCount;
12702        } else {
12703            breakPoint = _.options.slidesToScroll * -1;
12704            counter = _.options.slidesToScroll * -1;
12705            max = _.slideCount * 2;
12706        }
12707
12708        while (breakPoint < max) {
12709            indexes.push(breakPoint);
12710            breakPoint = counter + _.options.slidesToScroll;
12711            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
12712        }
12713
12714        return indexes;
12715
12716    };
12717
12718    Slick.prototype.getSlick = function() {
12719
12720        return this;
12721
12722    };
12723
12724    Slick.prototype.getSlideCount = function() {
12725
12726        var _ = this,
12727            slidesTraversed, swipedSlide, centerOffset;
12728
12729        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
12730
12731        if (_.options.swipeToSlide === true) {
12732            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
12733                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
12734                    swipedSlide = slide;
12735                    return false;
12736                }
12737            });
12738
12739            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
12740
12741            return slidesTraversed;
12742
12743        } else {
12744            return _.options.slidesToScroll;
12745        }
12746
12747    };
12748
12749    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
12750
12751        var _ = this;
12752
12753        _.changeSlide({
12754            data: {
12755                message: 'index',
12756                index: parseInt(slide)
12757            }
12758        }, dontAnimate);
12759
12760    };
12761
12762    Slick.prototype.init = function(creation) {
12763
12764        var _ = this;
12765
12766        if (!$(_.$slider).hasClass('slick-initialized')) {
12767
12768            $(_.$slider).addClass('slick-initialized');
12769
12770            _.buildRows();
12771            _.buildOut();
12772            _.setProps();
12773            _.startLoad();
12774            _.loadSlider();
12775            _.initializeEvents();
12776            _.updateArrows();
12777            _.updateDots();
12778            _.checkResponsive(true);
12779            _.focusHandler();
12780
12781        }
12782
12783        if (creation) {
12784            _.$slider.trigger('init', [_]);
12785        }
12786
12787        if (_.options.accessibility === true) {
12788            _.initADA();
12789        }
12790
12791        if ( _.options.autoplay ) {
12792
12793            _.paused = false;
12794            _.autoPlay();
12795
12796        }
12797
12798    };
12799
12800    Slick.prototype.initADA = function() {
12801        var _ = this,
12802                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
12803                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
12804                    return (val >= 0) && (val < _.slideCount);
12805                });
12806
12807        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
12808            'aria-hidden': 'true',
12809            'tabindex': '-1'
12810        }).find('a, input, button, select').attr({
12811            'tabindex': '-1'
12812        });
12813
12814        if (_.$dots !== null) {
12815            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
12816                var slideControlIndex = tabControlIndexes.indexOf(i);
12817
12818                $(this).attr({
12819                    'role': 'tabpanel',
12820                    'id': 'slick-slide' + _.instanceUid + i,
12821                    'tabindex': -1
12822                });
12823
12824                if (slideControlIndex !== -1) {
12825                   
vendor: 10,948 bytes, lines 12825-13200
12825 $(this).attr({
12826                        'aria-describedby': 'slick-slide-control' + _.instanceUid + slideControlIndex
12827                    });
12828                }
12829            });
12830
12831            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
12832                var mappedSlideIndex = tabControlIndexes[i];
12833
12834                $(this).attr({
12835                    'role': 'presentation'
12836                });
12837
12838                $(this).find('button').first().attr({
12839                    'role': 'tab',
12840                    'id': 'slick-slide-control' + _.instanceUid + i,
12841                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
12842                    'aria-label': (i + 1) + ' of ' + numDotGroups,
12843                    'aria-selected': null,
12844                    'tabindex': '-1'
12845                });
12846
12847            }).eq(_.currentSlide).find('button').attr({
12848                'aria-selected': 'true',
12849                'tabindex': '0'
12850            }).end();
12851        }
12852
12853        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
12854            _.$slides.eq(i).attr('tabindex', 0);
12855        }
12856
12857        _.activateADA();
12858
12859    };
12860
12861    Slick.prototype.initArrowEvents = function() {
12862
12863        var _ = this;
12864
12865        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
12866            _.$prevArrow
12867               .off('click.slick')
12868               .on('click.slick', {
12869                    message: 'previous'
12870               }, _.changeSlide);
12871            _.$nextArrow
12872               .off('click.slick')
12873               .on('click.slick', {
12874                    message: 'next'
12875               }, _.changeSlide);
12876
12877            if (_.options.accessibility === true) {
12878                _.$prevArrow.on('keydown.slick', _.keyHandler);
12879                _.$nextArrow.on('keydown.slick', _.keyHandler);
12880            }
12881        }
12882
12883    };
12884
12885    Slick.prototype.initDotEvents = function() {
12886
12887        var _ = this;
12888
12889        if (_.options.dots === true) {
12890            $('li', _.$dots).on('click.slick', {
12891                message: 'index'
12892            }, _.changeSlide);
12893
12894            if (_.options.accessibility === true) {
12895                _.$dots.on('keydown.slick', _.keyHandler);
12896            }
12897        }
12898
12899        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {
12900
12901            $('li', _.$dots)
12902                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
12903                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
12904
12905        }
12906
12907    };
12908
12909    Slick.prototype.initSlideEvents = function() {
12910
12911        var _ = this;
12912
12913        if ( _.options.pauseOnHover ) {
12914
12915            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
12916            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
12917
12918        }
12919
12920    };
12921
12922    Slick.prototype.initializeEvents = function() {
12923
12924        var _ = this;
12925
12926        _.initArrowEvents();
12927
12928        _.initDotEvents();
12929        _.initSlideEvents();
12930
12931        _.$list.on('touchstart.slick mousedown.slick', {
12932            action: 'start'
12933        }, _.swipeHandler);
12934        _.$list.on('touchmove.slick mousemove.slick', {
12935            action: 'move'
12936        }, _.swipeHandler);
12937        _.$list.on('touchend.slick mouseup.slick', {
12938            action: 'end'
12939        }, _.swipeHandler);
12940        _.$list.on('touchcancel.slick mouseleave.slick', {
12941            action: 'end'
12942        }, _.swipeHandler);
12943
12944        _.$list.on('click.slick', _.clickHandler);
12945
12946        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
12947
12948        if (_.options.accessibility === true) {
12949            _.$list.on('keydown.slick', _.keyHandler);
12950        }
12951
12952        if (_.options.focusOnSelect === true) {
12953            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
12954        }
12955
12956        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
12957
12958        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
12959
12960        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
12961
12962        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
12963        $(_.setPosition);
12964
12965    };
12966
12967    Slick.prototype.initUI = function() {
12968
12969        var _ = this;
12970
12971        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
12972
12973            _.$prevArrow.show();
12974            _.$nextArrow.show();
12975
12976        }
12977
12978        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
12979
12980            _.$dots.show();
12981
12982        }
12983
12984    };
12985
12986    Slick.prototype.keyHandler = function(event) {
12987
12988        var _ = this;
12989         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
12990        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
12991            if (event.keyCode === 37 && _.options.accessibility === true) {
12992                _.changeSlide({
12993                    data: {
12994                        message: _.options.rtl === true ? 'next' :  'previous'
12995                    }
12996                });
12997            } else if (event.keyCode === 39 && _.options.accessibility === true) {
12998                _.changeSlide({
12999                    data: {
13000                        message: _.options.rtl === true ? 'previous' : 'next'
13001                    }
13002                });
13003            }
13004        }
13005
13006    };
13007
13008    Slick.prototype.lazyLoad = function() {
13009
13010        var _ = this,
13011            loadRange, cloneRange, rangeStart, rangeEnd;
13012
13013        function loadImages(imagesScope) {
13014
13015            $('img[data-lazy]', imagesScope).each(function() {
13016
13017                var image = $(this),
13018                    imageSource = $(this).attr('data-lazy'),
13019                    imageSrcSet = $(this).attr('data-srcset'),
13020                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
13021                    imageToLoad = document.createElement('img');
13022
13023                imageToLoad.onload = function() {
13024
13025                    image
13026                        .animate({ opacity: 0 }, 100, function() {
13027
13028                            if (imageSrcSet) {
13029                                image
13030                                    .attr('srcset', imageSrcSet );
13031
13032                                if (imageSizes) {
13033                                    image
13034                                        .attr('sizes', imageSizes );
13035                                }
13036                            }
13037
13038                            image
13039                                .attr('src', imageSource)
13040                                .animate({ opacity: 1 }, 200, function() {
13041                                    image
13042                                        .removeAttr('data-lazy data-srcset data-sizes')
13043                                        .removeClass('slick-loading');
13044                                });
13045                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
13046                        });
13047
13048                };
13049
13050                imageToLoad.onerror = function() {
13051
13052                    image
13053                        .removeAttr( 'data-lazy' )
13054                        .removeClass( 'slick-loading' )
13055                        .addClass( 'slick-lazyload-error' );
13056
13057                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
13058
13059                };
13060
13061                imageToLoad.src = imageSource;
13062
13063            });
13064
13065        }
13066
13067        if (_.options.centerMode === true) {
13068            if (_.options.infinite === true) {
13069                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
13070                rangeEnd = rangeStart + _.options.slidesToShow + 2;
13071            } else {
13072                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
13073                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
13074            }
13075        } else {
13076            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
13077            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
13078            if (_.options.fade === true) {
13079                if (rangeStart > 0) rangeStart--;
13080                if (rangeEnd <= _.slideCount) rangeEnd++;
13081            }
13082        }
13083
13084        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
13085
13086        if (_.options.lazyLoad === 'anticipated') {
13087            var prevSlide = rangeStart - 1,
13088                nextSlide = rangeEnd,
13089                $slides = _.$slider.find('.slick-slide');
13090
13091            for (var i = 0; i < _.options.slidesToScroll; i++) {
13092                if (prevSlide < 0) prevSlide = _.slideCount - 1;
13093                loadRange = loadRange.add($slides.eq(prevSlide));
13094                loadRange = loadRange.add($slides.eq(nextSlide));
13095                prevSlide--;
13096                nextSlide++;
13097            }
13098        }
13099
13100        loadImages(loadRange);
13101
13102        if (_.slideCount <= _.options.slidesToShow) {
13103            cloneRange = _.$slider.find('.slick-slide');
13104            loadImages(cloneRange);
13105        } else
13106        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
13107            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
13108            loadImages(cloneRange);
13109        } else if (_.currentSlide === 0) {
13110            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
13111            loadImages(cloneRange);
13112        }
13113
13114    };
13115
13116    Slick.prototype.loadSlider = function() {
13117
13118        var _ = this;
13119
13120        _.setPosition();
13121
13122        _.$slideTrack.css({
13123            opacity: 1
13124        });
13125
13126        _.$slider.removeClass('slick-loading');
13127
13128        _.initUI();
13129
13130        if (_.options.lazyLoad === 'progressive') {
13131            _.progressiveLazyLoad();
13132        }
13133
13134    };
13135
13136    Slick.prototype.next = Slick.prototype.slickNext = function() {
13137
13138        var _ = this;
13139
13140        _.changeSlide({
13141            data: {
13142                message: 'next'
13143            }
13144        });
13145
13146    };
13147
13148    Slick.prototype.orientationChange = function() {
13149
13150        var _ = this;
13151
13152        _.checkResponsive();
13153        _.setPosition();
13154
13155    };
13156
13157    Slick.prototype.pause = Slick.prototype.slickPause = function() {
13158
13159        var _ = this;
13160
13161        _.autoPlayClear();
13162        _.paused = true;
13163
13164    };
13165
13166    Slick.prototype.play = Slick.prototype.slickPlay = function() {
13167
13168        var _ = this;
13169
13170        _.autoPlay();
13171        _.options.autoplay = true;
13172        _.paused = false;
13173        _.focussed = false;
13174        _.interrupted = false;
13175
13176    };
13177
13178    Slick.prototype.postSlide = function(index) {
13179
13180        var _ = this;
13181
13182        if( !_.unslicked ) {
13183
13184            _.$slider.trigger('afterChange', [_, index]);
13185
13186            _.animating = false;
13187
13188            if (_.slideCount > _.options.slidesToShow) {
13189                _.setPosition();
13190            }
13191
13192            _.swipeLeft = null;
13193
13194            if ( _.options.autoplay ) {
13195                _.autoPlay();
13196            }
13197
13198            if (_.options.accessibility === true) {
13199                _.initADA();
13200                
vendor: 22,879 bytes, lines 13200-13993
13200
13201                if (_.options.focusOnChange) {
13202                    var $currentSlide = $(_.$slides.get(_.currentSlide));
13203                    $currentSlide.attr('tabindex', 0).focus();
13204                }
13205            }
13206
13207        }
13208
13209    };
13210
13211    Slick.prototype.prev = Slick.prototype.slickPrev = function() {
13212
13213        var _ = this;
13214
13215        _.changeSlide({
13216            data: {
13217                message: 'previous'
13218            }
13219        });
13220
13221    };
13222
13223    Slick.prototype.preventDefault = function(event) {
13224
13225        event.preventDefault();
13226
13227    };
13228
13229    Slick.prototype.progressiveLazyLoad = function( tryCount ) {
13230
13231        tryCount = tryCount || 1;
13232
13233        var _ = this,
13234            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
13235            image,
13236            imageSource,
13237            imageSrcSet,
13238            imageSizes,
13239            imageToLoad;
13240
13241        if ( $imgsToLoad.length ) {
13242
13243            image = $imgsToLoad.first();
13244            imageSource = image.attr('data-lazy');
13245            imageSrcSet = image.attr('data-srcset');
13246            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');
13247            imageToLoad = document.createElement('img');
13248
13249            imageToLoad.onload = function() {
13250
13251                if (imageSrcSet) {
13252                    image
13253                        .attr('srcset', imageSrcSet );
13254
13255                    if (imageSizes) {
13256                        image
13257                            .attr('sizes', imageSizes );
13258                    }
13259                }
13260
13261                image
13262                    .attr( 'src', imageSource )
13263                    .removeAttr('data-lazy data-srcset data-sizes')
13264                    .removeClass('slick-loading');
13265
13266                if ( _.options.adaptiveHeight === true ) {
13267                    _.setPosition();
13268                }
13269
13270                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
13271                _.progressiveLazyLoad();
13272
13273            };
13274
13275            imageToLoad.onerror = function() {
13276
13277                if ( tryCount < 3 ) {
13278
13279                    /**
13280                     * try to load the image 3 times,
13281                     * leave a slight delay so we don't get
13282                     * servers blocking the request.
13283                     */
13284                    setTimeout( function() {
13285                        _.progressiveLazyLoad( tryCount + 1 );
13286                    }, 500 );
13287
13288                } else {
13289
13290                    image
13291                        .removeAttr( 'data-lazy' )
13292                        .removeClass( 'slick-loading' )
13293                        .addClass( 'slick-lazyload-error' );
13294
13295                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
13296
13297                    _.progressiveLazyLoad();
13298
13299                }
13300
13301            };
13302
13303            imageToLoad.src = imageSource;
13304
13305        } else {
13306
13307            _.$slider.trigger('allImagesLoaded', [ _ ]);
13308
13309        }
13310
13311    };
13312
13313    Slick.prototype.refresh = function( initializing ) {
13314
13315        var _ = this, currentSlide, lastVisibleIndex;
13316
13317        lastVisibleIndex = _.slideCount - _.options.slidesToShow;
13318
13319        // in non-infinite sliders, we don't want to go past the
13320        // last visible index.
13321        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
13322            _.currentSlide = lastVisibleIndex;
13323        }
13324
13325        // if less slides than to show, go to start.
13326        if ( _.slideCount <= _.options.slidesToShow ) {
13327            _.currentSlide = 0;
13328
13329        }
13330
13331        currentSlide = _.currentSlide;
13332
13333        _.destroy(true);
13334
13335        $.extend(_, _.initials, { currentSlide: currentSlide });
13336
13337        _.init();
13338
13339        if( !initializing ) {
13340
13341            _.changeSlide({
13342                data: {
13343                    message: 'index',
13344                    index: currentSlide
13345                }
13346            }, false);
13347
13348        }
13349
13350    };
13351
13352    Slick.prototype.registerBreakpoints = function() {
13353
13354        var _ = this, breakpoint, currentBreakpoint, l,
13355            responsiveSettings = _.options.responsive || null;
13356
13357        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
13358
13359            _.respondTo = _.options.respondTo || 'window';
13360
13361            for ( breakpoint in responsiveSettings ) {
13362
13363                l = _.breakpoints.length-1;
13364
13365                if (responsiveSettings.hasOwnProperty(breakpoint)) {
13366                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
13367
13368                    // loop through the breakpoints and cut out any existing
13369                    // ones with the same breakpoint number, we don't want dupes.
13370                    while( l >= 0 ) {
13371                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
13372                            _.breakpoints.splice(l,1);
13373                        }
13374                        l--;
13375                    }
13376
13377                    _.breakpoints.push(currentBreakpoint);
13378                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
13379
13380                }
13381
13382            }
13383
13384            _.breakpoints.sort(function(a, b) {
13385                return ( _.options.mobileFirst ) ? a-b : b-a;
13386            });
13387
13388        }
13389
13390    };
13391
13392    Slick.prototype.reinit = function() {
13393
13394        var _ = this;
13395
13396        _.$slides =
13397            _.$slideTrack
13398                .children(_.options.slide)
13399                .addClass('slick-slide');
13400
13401        _.slideCount = _.$slides.length;
13402
13403        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
13404            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
13405        }
13406
13407        if (_.slideCount <= _.options.slidesToShow) {
13408            _.currentSlide = 0;
13409        }
13410
13411        _.registerBreakpoints();
13412
13413        _.setProps();
13414        _.setupInfinite();
13415        _.buildArrows();
13416        _.updateArrows();
13417        _.initArrowEvents();
13418        _.buildDots();
13419        _.updateDots();
13420        _.initDotEvents();
13421        _.cleanUpSlideEvents();
13422        _.initSlideEvents();
13423
13424        _.checkResponsive(false, true);
13425
13426        if (_.options.focusOnSelect === true) {
13427            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
13428        }
13429
13430        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
13431
13432        _.setPosition();
13433        _.focusHandler();
13434
13435        _.paused = !_.options.autoplay;
13436        _.autoPlay();
13437
13438        _.$slider.trigger('reInit', [_]);
13439
13440    };
13441
13442    Slick.prototype.resize = function() {
13443
13444        var _ = this;
13445
13446        if ($(window).width() !== _.windowWidth) {
13447            clearTimeout(_.windowDelay);
13448            _.windowDelay = window.setTimeout(function() {
13449                _.windowWidth = $(window).width();
13450                _.checkResponsive();
13451                if( !_.unslicked ) { _.setPosition(); }
13452            }, 50);
13453        }
13454    };
13455
13456    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
13457
13458        var _ = this;
13459
13460        if (typeof(index) === 'boolean') {
13461            removeBefore = index;
13462            index = removeBefore === true ? 0 : _.slideCount - 1;
13463        } else {
13464            index = removeBefore === true ? --index : index;
13465        }
13466
13467        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
13468            return false;
13469        }
13470
13471        _.unload();
13472
13473        if (removeAll === true) {
13474            _.$slideTrack.children().remove();
13475        } else {
13476            _.$slideTrack.children(this.options.slide).eq(index).remove();
13477        }
13478
13479        _.$slides = _.$slideTrack.children(this.options.slide);
13480
13481        _.$slideTrack.children(this.options.slide).detach();
13482
13483        _.$slideTrack.append(_.$slides);
13484
13485        _.$slidesCache = _.$slides;
13486
13487        _.reinit();
13488
13489    };
13490
13491    Slick.prototype.setCSS = function(position) {
13492
13493        var _ = this,
13494            positionProps = {},
13495            x, y;
13496
13497        if (_.options.rtl === true) {
13498            position = -position;
13499        }
13500        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
13501        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
13502
13503        positionProps[_.positionProp] = position;
13504
13505        if (_.transformsEnabled === false) {
13506            _.$slideTrack.css(positionProps);
13507        } else {
13508            positionProps = {};
13509            if (_.cssTransitions === false) {
13510                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
13511                _.$slideTrack.css(positionProps);
13512            } else {
13513                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
13514                _.$slideTrack.css(positionProps);
13515            }
13516        }
13517
13518    };
13519
13520    Slick.prototype.setDimensions = function() {
13521
13522        var _ = this;
13523
13524        if (_.options.vertical === false) {
13525            if (_.options.centerMode === true) {
13526                _.$list.css({
13527                    padding: ('0px ' + _.options.centerPadding)
13528                });
13529            }
13530        } else {
13531            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
13532            if (_.options.centerMode === true) {
13533                _.$list.css({
13534                    padding: (_.options.centerPadding + ' 0px')
13535                });
13536            }
13537        }
13538
13539        _.listWidth = _.$list.width();
13540        _.listHeight = _.$list.height();
13541
13542
13543        if (_.options.vertical === false && _.options.variableWidth === false) {
13544            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
13545            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
13546
13547        } else if (_.options.variableWidth === true) {
13548            _.$slideTrack.width(5000 * _.slideCount);
13549        } else {
13550            _.slideWidth = Math.ceil(_.listWidth);
13551            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
13552        }
13553
13554        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
13555        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
13556
13557    };
13558
13559    Slick.prototype.setFade = function() {
13560
13561        var _ = this,
13562            targetLeft;
13563
13564        _.$slides.each(function(index, element) {
13565            targetLeft = (_.slideWidth * index) * -1;
13566            if (_.options.rtl === true) {
13567                $(element).css({
13568                    position: 'relative',
13569                    right: targetLeft,
13570                    top: 0,
13571                    zIndex: _.options.zIndex - 2,
13572                    opacity: 0
13573                });
13574            } else {
13575                $(element).css({
13576                    position: 'relative',
13577                    left: targetLeft,
13578                    top: 0,
13579                    zIndex: _.options.zIndex - 2,
13580                    opacity: 0
13581                });
13582            }
13583        });
13584
13585        _.$slides.eq(_.currentSlide).css({
13586            zIndex: _.options.zIndex - 1,
13587            opacity: 1
13588        });
13589
13590    };
13591
13592    Slick.prototype.setHeight = function() {
13593
13594        var _ = this;
13595
13596        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
13597            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
13598            _.$list.css('height', targetHeight);
13599        }
13600
13601    };
13602
13603    Slick.prototype.setOption =
13604    Slick.prototype.slickSetOption = function() {
13605
13606        /**
13607         * accepts arguments in format of:
13608         *
13609         *  - for changing a single option's value:
13610         *     .slick("setOption", option, value, refresh )
13611         *
13612         *  - for changing a set of responsive options:
13613         *     .slick("setOption", 'responsive', [{}, ...], refresh )
13614         *
13615         *  - for updating multiple values at once (not responsive)
13616         *     .slick("setOption", { 'option': value, ... }, refresh )
13617         */
13618
13619        var _ = this, l, item, option, value, refresh = false, type;
13620
13621        if( $.type( arguments[0] ) === 'object' ) {
13622
13623            option =  arguments[0];
13624            refresh = arguments[1];
13625            type = 'multiple';
13626
13627        } else if ( $.type( arguments[0] ) === 'string' ) {
13628
13629            option =  arguments[0];
13630            value = arguments[1];
13631            refresh = arguments[2];
13632
13633            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
13634
13635                type = 'responsive';
13636
13637            } else if ( typeof arguments[1] !== 'undefined' ) {
13638
13639                type = 'single';
13640
13641            }
13642
13643        }
13644
13645        if ( type === 'single' ) {
13646
13647            _.options[option] = value;
13648
13649
13650        } else if ( type === 'multiple' ) {
13651
13652            $.each( option , function( opt, val ) {
13653
13654                _.options[opt] = val;
13655
13656            });
13657
13658
13659        } else if ( type === 'responsive' ) {
13660
13661            for ( item in value ) {
13662
13663                if( $.type( _.options.responsive ) !== 'array' ) {
13664
13665                    _.options.responsive = [ value[item] ];
13666
13667                } else {
13668
13669                    l = _.options.responsive.length-1;
13670
13671                    // loop through the responsive object and splice out duplicates.
13672                    while( l >= 0 ) {
13673
13674                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
13675
13676                            _.options.responsive.splice(l,1);
13677
13678                        }
13679
13680                        l--;
13681
13682                    }
13683
13684                    _.options.responsive.push( value[item] );
13685
13686                }
13687
13688            }
13689
13690        }
13691
13692        if ( refresh ) {
13693
13694            _.unload();
13695            _.reinit();
13696
13697        }
13698
13699    };
13700
13701    Slick.prototype.setPosition = function() {
13702
13703        var _ = this;
13704
13705        _.setDimensions();
13706
13707        _.setHeight();
13708
13709        if (_.options.fade === false) {
13710            _.setCSS(_.getLeft(_.currentSlide));
13711        } else {
13712            _.setFade();
13713        }
13714
13715        _.$slider.trigger('setPosition', [_]);
13716
13717    };
13718
13719    Slick.prototype.setProps = function() {
13720
13721        var _ = this,
13722            bodyStyle = document.body.style;
13723
13724        _.positionProp = _.options.vertical === true ? 'top' : 'left';
13725
13726        if (_.positionProp === 'top') {
13727            _.$slider.addClass('slick-vertical');
13728        } else {
13729            _.$slider.removeClass('slick-vertical');
13730        }
13731
13732        if (bodyStyle.WebkitTransition !== undefined ||
13733            bodyStyle.MozTransition !== undefined ||
13734            bodyStyle.msTransition !== undefined) {
13735            if (_.options.useCSS === true) {
13736                _.cssTransitions = true;
13737            }
13738        }
13739
13740        if ( _.options.fade ) {
13741            if ( typeof _.options.zIndex === 'number' ) {
13742                if( _.options.zIndex < 3 ) {
13743                    _.options.zIndex = 3;
13744                }
13745            } else {
13746                _.options.zIndex = _.defaults.zIndex;
13747            }
13748        }
13749
13750        if (bodyStyle.OTransform !== undefined) {
13751            _.animType = 'OTransform';
13752            _.transformType = '-o-transform';
13753            _.transitionType = 'OTransition';
13754            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
13755        }
13756        if (bodyStyle.MozTransform !== undefined) {
13757            _.animType = 'MozTransform';
13758            _.transformType = '-moz-transform';
13759            _.transitionType = 'MozTransition';
13760            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
13761        }
13762        if (bodyStyle.webkitTransform !== undefined) {
13763            _.animType = 'webkitTransform';
13764            _.transformType = '-webkit-transform';
13765            _.transitionType = 'webkitTransition';
13766            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
13767        }
13768        if (bodyStyle.msTransform !== undefined) {
13769            _.animType = 'msTransform';
13770            _.transformType = '-ms-transform';
13771            _.transitionType = 'msTransition';
13772            if (bodyStyle.msTransform === undefined) _.animType = false;
13773        }
13774        if (bodyStyle.transform !== undefined && _.animType !== false) {
13775            _.animType = 'transform';
13776            _.transformType = 'transform';
13777            _.transitionType = 'transition';
13778        }
13779        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
13780    };
13781
13782
13783    Slick.prototype.setSlideClasses = function(index) {
13784
13785        var _ = this,
13786            centerOffset, allSlides, indexOffset, remainder;
13787
13788        allSlides = _.$slider
13789            .find('.slick-slide')
13790            .removeClass('slick-active slick-center slick-current')
13791            .attr('aria-hidden', 'true');
13792
13793        _.$slides
13794            .eq(index)
13795            .addClass('slick-current');
13796
13797        if (_.options.centerMode === true) {
13798
13799            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
13800
13801            centerOffset = Math.floor(_.options.slidesToShow / 2);
13802
13803            if (_.options.infinite === true) {
13804
13805                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
13806                    _.$slides
13807                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
13808                        .addClass('slick-active')
13809                        .attr('aria-hidden', 'false');
13810
13811                } else {
13812
13813                    indexOffset = _.options.slidesToShow + index;
13814                    allSlides
13815                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
13816                        .addClass('slick-active')
13817                        .attr('aria-hidden', 'false');
13818
13819                }
13820
13821                if (index === 0) {
13822
13823                    allSlides
13824                        .eq(allSlides.length - 1 - _.options.slidesToShow)
13825                        .addClass('slick-center');
13826
13827                } else if (index === _.slideCount - 1) {
13828
13829                    allSlides
13830                        .eq(_.options.slidesToShow)
13831                        .addClass('slick-center');
13832
13833                }
13834
13835            }
13836
13837            _.$slides
13838                .eq(index)
13839                .addClass('slick-center');
13840
13841        } else {
13842
13843            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
13844
13845                _.$slides
13846                    .slice(index, index + _.options.slidesToShow)
13847                    .addClass('slick-active')
13848                    .attr('aria-hidden', 'false');
13849
13850            } else if (allSlides.length <= _.options.slidesToShow) {
13851
13852                allSlides
13853                    .addClass('slick-active')
13854                    .attr('aria-hidden', 'false');
13855
13856            } else {
13857
13858                remainder = _.slideCount % _.options.slidesToShow;
13859                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
13860
13861                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
13862
13863                    allSlides
13864                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
13865                        .addClass('slick-active')
13866                        .attr('aria-hidden', 'false');
13867
13868                } else {
13869
13870                    allSlides
13871                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
13872                        .addClass('slick-active')
13873                        .attr('aria-hidden', 'false');
13874
13875                }
13876
13877            }
13878
13879        }
13880
13881        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
13882            _.lazyLoad();
13883        }
13884    };
13885
13886    Slick.prototype.setupInfinite = function() {
13887
13888        var _ = this,
13889            i, slideIndex, infiniteCount;
13890
13891        if (_.options.fade === true) {
13892            _.options.centerMode = false;
13893        }
13894
13895        if (_.options.infinite === true && _.options.fade === false) {
13896
13897            slideIndex = null;
13898
13899            if (_.slideCount > _.options.slidesToShow) {
13900
13901                if (_.options.centerMode === true) {
13902                    infiniteCount = _.options.slidesToShow + 1;
13903                } else {
13904                    infiniteCount = _.options.slidesToShow;
13905                }
13906
13907                for (i = _.slideCount; i > (_.slideCount -
13908                        infiniteCount); i -= 1) {
13909                    slideIndex = i - 1;
13910                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
13911                        .attr('data-slick-index', slideIndex - _.slideCount)
13912                        .prependTo(_.$slideTrack).addClass('slick-cloned');
13913                }
13914                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {
13915                    slideIndex = i;
13916                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
13917                        .attr('data-slick-index', slideIndex + _.slideCount)
13918                        .appendTo(_.$slideTrack).addClass('slick-cloned');
13919                }
13920                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
13921                    $(this).attr('id', '');
13922                });
13923
13924            }
13925
13926        }
13927
13928    };
13929
13930    Slick.prototype.interrupt = function( toggle ) {
13931
13932        var _ = this;
13933
13934        if( !toggle ) {
13935            _.autoPlay();
13936        }
13937        _.interrupted = toggle;
13938
13939    };
13940
13941    Slick.prototype.selectHandler = function(event) {
13942
13943        var _ = this;
13944
13945        var targetElement =
13946            $(event.target).is('.slick-slide') ?
13947                $(event.target) :
13948                $(event.target).parents('.slick-slide');
13949
13950        var index = parseInt(targetElement.attr('data-slick-index'));
13951
13952        if (!index) index = 0;
13953
13954        if (_.slideCount <= _.options.slidesToShow) {
13955
13956            _.slideHandler(index, false, true);
13957            return;
13958
13959        }
13960
13961        _.slideHandler(index);
13962
13963    };
13964
13965    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
13966
13967        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
13968            _ = this, navTarget;
13969
13970        sync = sync || false;
13971
13972        if (_.animating === true && _.options.waitForAnimate === true) {
13973            return;
13974        }
13975
13976        if (_.options.fade === true && _.currentSlide === index) {
13977            return;
13978        }
13979
13980        if (sync === false) {
13981            _.asNavFor(index);
13982        }
13983
13984        targetSlide = index;
13985        targetLeft = _.getLeft(targetSlide);
13986        slideLeft = _.getLeft(_.currentSlide);
13987
13988        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
13989
13990        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
13991            if (_.options.fade === false) {
13992                targetSlide = _.currentSlide;
13993                if (dontAnimate !== true
vendor: 15,371 bytes, lines 13993-14532
13993) {
13994                    _.animateSlide(slideLeft, function() {
13995                        _.postSlide(targetSlide);
13996                    });
13997                } else {
13998                    _.postSlide(targetSlide);
13999                }
14000            }
14001            return;
14002        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
14003            if (_.options.fade === false) {
14004                targetSlide = _.currentSlide;
14005                if (dontAnimate !== true) {
14006                    _.animateSlide(slideLeft, function() {
14007                        _.postSlide(targetSlide);
14008                    });
14009                } else {
14010                    _.postSlide(targetSlide);
14011                }
14012            }
14013            return;
14014        }
14015
14016        if ( _.options.autoplay ) {
14017            clearInterval(_.autoPlayTimer);
14018        }
14019
14020        if (targetSlide < 0) {
14021            if (_.slideCount % _.options.slidesToScroll !== 0) {
14022                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
14023            } else {
14024                animSlide = _.slideCount + targetSlide;
14025            }
14026        } else if (targetSlide >= _.slideCount) {
14027            if (_.slideCount % _.options.slidesToScroll !== 0) {
14028                animSlide = 0;
14029            } else {
14030                animSlide = targetSlide - _.slideCount;
14031            }
14032        } else {
14033            animSlide = targetSlide;
14034        }
14035
14036        _.animating = true;
14037
14038        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
14039
14040        oldSlide = _.currentSlide;
14041        _.currentSlide = animSlide;
14042
14043        _.setSlideClasses(_.currentSlide);
14044
14045        if ( _.options.asNavFor ) {
14046
14047            navTarget = _.getNavTarget();
14048            navTarget = navTarget.slick('getSlick');
14049
14050            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
14051                navTarget.setSlideClasses(_.currentSlide);
14052            }
14053
14054        }
14055
14056        _.updateDots();
14057        _.updateArrows();
14058
14059        if (_.options.fade === true) {
14060            if (dontAnimate !== true) {
14061
14062                _.fadeSlideOut(oldSlide);
14063
14064                _.fadeSlide(animSlide, function() {
14065                    _.postSlide(animSlide);
14066                });
14067
14068            } else {
14069                _.postSlide(animSlide);
14070            }
14071            _.animateHeight();
14072            return;
14073        }
14074
14075        if (dontAnimate !== true) {
14076            _.animateSlide(targetLeft, function() {
14077                _.postSlide(animSlide);
14078            });
14079        } else {
14080            _.postSlide(animSlide);
14081        }
14082
14083    };
14084
14085    Slick.prototype.startLoad = function() {
14086
14087        var _ = this;
14088
14089        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
14090
14091            _.$prevArrow.hide();
14092            _.$nextArrow.hide();
14093
14094        }
14095
14096        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
14097
14098            _.$dots.hide();
14099
14100        }
14101
14102        _.$slider.addClass('slick-loading');
14103
14104    };
14105
14106    Slick.prototype.swipeDirection = function() {
14107
14108        var xDist, yDist, r, swipeAngle, _ = this;
14109
14110        xDist = _.touchObject.startX - _.touchObject.curX;
14111        yDist = _.touchObject.startY - _.touchObject.curY;
14112        r = Math.atan2(yDist, xDist);
14113
14114        swipeAngle = Math.round(r * 180 / Math.PI);
14115        if (swipeAngle < 0) {
14116            swipeAngle = 360 - Math.abs(swipeAngle);
14117        }
14118
14119        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
14120            return (_.options.rtl === false ? 'left' : 'right');
14121        }
14122        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
14123            return (_.options.rtl === false ? 'left' : 'right');
14124        }
14125        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
14126            return (_.options.rtl === false ? 'right' : 'left');
14127        }
14128        if (_.options.verticalSwiping === true) {
14129            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
14130                return 'down';
14131            } else {
14132                return 'up';
14133            }
14134        }
14135
14136        return 'vertical';
14137
14138    };
14139
14140    Slick.prototype.swipeEnd = function(event) {
14141
14142        var _ = this,
14143            slideCount,
14144            direction;
14145
14146        _.dragging = false;
14147        _.swiping = false;
14148
14149        if (_.scrolling) {
14150            _.scrolling = false;
14151            return false;
14152        }
14153
14154        _.interrupted = false;
14155        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
14156
14157        if ( _.touchObject.curX === undefined ) {
14158            return false;
14159        }
14160
14161        if ( _.touchObject.edgeHit === true ) {
14162            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
14163        }
14164
14165        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
14166
14167            direction = _.swipeDirection();
14168
14169            switch ( direction ) {
14170
14171                case 'left':
14172                case 'down':
14173
14174                    slideCount =
14175                        _.options.swipeToSlide ?
14176                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
14177                            _.currentSlide + _.getSlideCount();
14178
14179                    _.currentDirection = 0;
14180
14181                    break;
14182
14183                case 'right':
14184                case 'up':
14185
14186                    slideCount =
14187                        _.options.swipeToSlide ?
14188                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
14189                            _.currentSlide - _.getSlideCount();
14190
14191                    _.currentDirection = 1;
14192
14193                    break;
14194
14195                default:
14196
14197
14198            }
14199
14200            if( direction != 'vertical' ) {
14201
14202                _.slideHandler( slideCount );
14203                _.touchObject = {};
14204                _.$slider.trigger('swipe', [_, direction ]);
14205
14206            }
14207
14208        } else {
14209
14210            if ( _.touchObject.startX !== _.touchObject.curX ) {
14211
14212                _.slideHandler( _.currentSlide );
14213                _.touchObject = {};
14214
14215            }
14216
14217        }
14218
14219    };
14220
14221    Slick.prototype.swipeHandler = function(event) {
14222
14223        var _ = this;
14224
14225        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
14226            return;
14227        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
14228            return;
14229        }
14230
14231        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
14232            event.originalEvent.touches.length : 1;
14233
14234        _.touchObject.minSwipe = _.listWidth / _.options
14235            .touchThreshold;
14236
14237        if (_.options.verticalSwiping === true) {
14238            _.touchObject.minSwipe = _.listHeight / _.options
14239                .touchThreshold;
14240        }
14241
14242        switch (event.data.action) {
14243
14244            case 'start':
14245                _.swipeStart(event);
14246                break;
14247
14248            case 'move':
14249                _.swipeMove(event);
14250                break;
14251
14252            case 'end':
14253                _.swipeEnd(event);
14254                break;
14255
14256        }
14257
14258    };
14259
14260    Slick.prototype.swipeMove = function(event) {
14261
14262        var _ = this,
14263            edgeWasHit = false,
14264            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
14265
14266        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
14267
14268        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
14269            return false;
14270        }
14271
14272        curLeft = _.getLeft(_.currentSlide);
14273
14274        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
14275        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
14276
14277        _.touchObject.swipeLength = Math.round(Math.sqrt(
14278            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
14279
14280        verticalSwipeLength = Math.round(Math.sqrt(
14281            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
14282
14283        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
14284            _.scrolling = true;
14285            return false;
14286        }
14287
14288        if (_.options.verticalSwiping === true) {
14289            _.touchObject.swipeLength = verticalSwipeLength;
14290        }
14291
14292        swipeDirection = _.swipeDirection();
14293
14294        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
14295            _.swiping = true;
14296            event.preventDefault();
14297        }
14298
14299        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
14300        if (_.options.verticalSwiping === true) {
14301            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
14302        }
14303
14304
14305        swipeLength = _.touchObject.swipeLength;
14306
14307        _.touchObject.edgeHit = false;
14308
14309        if (_.options.infinite === false) {
14310            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
14311                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
14312                _.touchObject.edgeHit = true;
14313            }
14314        }
14315
14316        if (_.options.vertical === false) {
14317            _.swipeLeft = curLeft + swipeLength * positionOffset;
14318        } else {
14319            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
14320        }
14321        if (_.options.verticalSwiping === true) {
14322            _.swipeLeft = curLeft + swipeLength * positionOffset;
14323        }
14324
14325        if (_.options.fade === true || _.options.touchMove === false) {
14326            return false;
14327        }
14328
14329        if (_.animating === true) {
14330            _.swipeLeft = null;
14331            return false;
14332        }
14333
14334        _.setCSS(_.swipeLeft);
14335
14336    };
14337
14338    Slick.prototype.swipeStart = function(event) {
14339
14340        var _ = this,
14341            touches;
14342
14343        _.interrupted = true;
14344
14345        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
14346            _.touchObject = {};
14347            return false;
14348        }
14349
14350        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
14351            touches = event.originalEvent.touches[0];
14352        }
14353
14354        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
14355        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
14356
14357        _.dragging = true;
14358
14359    };
14360
14361    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
14362
14363        var _ = this;
14364
14365        if (_.$slidesCache !== null) {
14366
14367            _.unload();
14368
14369            _.$slideTrack.children(this.options.slide).detach();
14370
14371            _.$slidesCache.appendTo(_.$slideTrack);
14372
14373            _.reinit();
14374
14375        }
14376
14377    };
14378
14379    Slick.prototype.unload = function() {
14380
14381        var _ = this;
14382
14383        $('.slick-cloned', _.$slider).remove();
14384
14385        if (_.$dots) {
14386            _.$dots.remove();
14387        }
14388
14389        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
14390            _.$prevArrow.remove();
14391        }
14392
14393        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
14394            _.$nextArrow.remove();
14395        }
14396
14397        _.$slides
14398            .removeClass('slick-slide slick-active slick-visible slick-current')
14399            .attr('aria-hidden', 'true')
14400            .css('width', '');
14401
14402    };
14403
14404    Slick.prototype.unslick = function(fromBreakpoint) {
14405
14406        var _ = this;
14407        _.$slider.trigger('unslick', [_, fromBreakpoint]);
14408        _.destroy();
14409
14410    };
14411
14412    Slick.prototype.updateArrows = function() {
14413
14414        var _ = this,
14415            centerOffset;
14416
14417        centerOffset = Math.floor(_.options.slidesToShow / 2);
14418
14419        if ( _.options.arrows === true &&
14420            _.slideCount > _.options.slidesToShow &&
14421            !_.options.infinite ) {
14422
14423            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
14424            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
14425
14426            if (_.currentSlide === 0) {
14427
14428                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
14429                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
14430
14431            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
14432
14433                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
14434                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
14435
14436            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
14437
14438                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
14439                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
14440
14441            }
14442
14443        }
14444
14445    };
14446
14447    Slick.prototype.updateDots = function() {
14448
14449        var _ = this;
14450
14451        if (_.$dots !== null) {
14452
14453            _.$dots
14454                .find('li')
14455                    .removeClass('slick-active')
14456                    .end();
14457
14458            _.$dots
14459                .find('li')
14460                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
14461                .addClass('slick-active');
14462
14463        }
14464
14465    };
14466
14467    Slick.prototype.visibility = function() {
14468
14469        var _ = this;
14470
14471        if ( _.options.autoplay ) {
14472
14473            if ( document[_.hidden] ) {
14474
14475                _.interrupted = true;
14476
14477            } else {
14478
14479                _.interrupted = false;
14480
14481            }
14482
14483        }
14484
14485    };
14486
14487    $.fn.slick = function() {
14488        var _ = this,
14489            opt = arguments[0],
14490            args = Array.prototype.slice.call(arguments, 1),
14491            l = _.length,
14492            i,
14493            ret;
14494        for (i = 0; i < l; i++) {
14495            if (typeof opt == 'object' || typeof opt == 'undefined')
14496                _[i].slick = new Slick(_[i], opt);
14497            else
14498                ret = _[i].slick[opt].apply(_[i].slick, args);
14499            if (typeof ret != 'undefined') return ret;
14500        }
14501        return _;
14502    };
14503
14504}));
14505var DMS = DMS || {};
14506
14507(function(global){
14508
14509	var header = {
14510
14511	};
14512
14513	var sizeDetectSelector        = "#size-detect",
14514	containerSelector             = "#header-container",
14515	headerTopSelector             = ".header-top",
14516	headerBottomSelector          = ".header-bottom",
14517	navContainerSelector          = ".header-global-nav",
14518	navItemSelector               = ".header-global-nav-item",
14519	navHoverItemSelector          = ".header-global-nav-item-child-item.progeny-arrow",
14520	navItemChildContainerSelector = ".header-global-nav-item-child",
14521	navItemChildItemSelector      = ".header-global-nav-item-child-item",
14522	navItemProgenyItemSelector      = ".header-global-nav-item-progeny-item",
14523	navItemProgenyItemPcSmallSelector = ".header-global-nav-item-progeny-pc-small",
14524	navToggleBtnSelector          = ".header-nav-button",
14525	childArrowSelector            = ".header-global-nav-item-arrow",
14526	progenyArrowSelector          = ".header-global-nav-item-child-arrow",
14527	cloneSelector                 = "*[data-clone]",
14528	headerTelBtnSelector          = ".header-tel span.header-tel-inner",
14529	itemOpenClassName             = "header-global-nav-item-open",
14530	itemProgenyOpenClassName      = "header-global-nav-item-child-item-open",
14531	wrapperIdSelector             = "#wrapper",
14532	isVersion2                    = $(".header-bottom").hasClass("version-2") ? true : false;
14533
14534
14535	header.events = {
14536		breakpointChange : "breakpointChange"
14537	};
14538
14539	header.init = function(){
14540		this.handleResize           = this.handleResize.bind(this);
14541		this.handleClickItem        = this.handleClickItem.bind(this);
14542		this.handleClickChildItem   = this.handleClickChildItem.bind(this);
14543		this.handleMouseOverItemChild   = this.handleMouseOverItemChild.bind(this);
14544		this.handleMouseOverItemChildLeave   = this.handleMouseOverItemChildLeave.bind(this);
14545		this.handleMouseOverItemProgeny   = this.handleMouseOverItemProgeny.bind(this);
14546		this.handleMouseOverItemProgenyLeave   = this.handleMouseOverItemProgenyLeave.bind(this);
14547		this.handleMouseOverItemProgenyPcSmallLeave   = this.handleMouseOverItemProgenyPcSmallLeave.bind(this);
14548		this.handleHoverItem        = this.handleHoverItem.bind(this);
14549		this.handleBreakpointChange = this.handleBreakpointChange.bind(this);
14550		this.splitChildItems        = this.splitChildItems.bind(this);
14551		this.splitChildItem         = this.splitChildItem.bind(this);
14552		this.addChildPcLarge        = this.addChildPcLarge.bind(this);
14553		this.$sizeDetect            = $(sizeDetectSelector);
14554		this.$container             = $(containerSelector);
14555		this.$wrapper               = $(wrapperIdSelector);
14556		this.$headerTop             = $(headerTopSelector);
14557		this.$headerBottom          = $(headerBottomSelector);
14558		this.$navContainer          = $(navContainerSelector);
14559		this.$navItem               = $(navItemSelector);
14560		this.$navHoverItem          = $(navHoverItemSelector);
14561		this.$navItemChildContainer = $(navItemChildContainerSelector);
14562		this.$navChildArrow         = $(childArrowSelector);
14563		this.$navProgenyArrow       = $(progenyArrowSelector);
14564		this.$navChildItem       = $(navItemChildItemSelector);
14565		this.$navProgenyItem       = $(navItemProgenyItemSelector);
14566		this.$navProgenyItemPcSmall = $(navItemProgenyItemPcSmallSelector);
14567		this.$hamberger             = $(navToggleBtnSelector);
14568		this.$headerTelBtn          = $(headerTelBtnSelector);
14569		this.$cloneItem             = $(cloneSelector);
14570		this.breakpoint             = "";
14571		this.prevBreakpoint         = "";
14572		this.scrollTop              = 0;
14573		this.mouseOverItemProgeny   = null;
14574		this.isVersion2             = $(".header-bottom").hasClass("version-2") ? true : false;
14575		this.isProgeny              = false;
14576
14577		this.mouseLeaveClass = this.$navItem.find("> a").attr("class");
14578
14579		if(this.$navItem.find("> a").attr("data-mouseenter") != ""){
14580			this.mouseEnterClass = this.$navItem.find("> a").attr("data-mouseenter");	
14581		} else {
14582			this.mouseEnterClass = this.mouseLeaveClass;
14583		}
14584		
14585		this.prevV = {
14586			x: 0,
14587			y: 0
14588		};
14589
14590		this.tmpClass = "";
14591		this.cloneItems();
14592		this.splitChildItems();
14593		this.setBreakpoint();
14594		this.handleBreakpointChange();
14595		this.addEvents();
14596		// this.applyBackgroundToBorderColor();
14597	};
14598
14599	// header.applyBackgroundToBorderColor = function(){
14600	// 	$(".header-global-nav-item-current-arrow").css("color",$(".header-global-nav-item-current-arrow").css("backgroundColor"));
14601	// }
14602
14603	header.addEvents = function(){
14604		$(window).on("resize",this.handleResize);
14605		$(document).on(this.events.breakpointChange,this.handleBreakpointChange);
14606		this.$navChildArrow.off("click",this.handleClickItem);
14607		this.$navChildArrow.on("click",this.handleClickItem);
14608		// ".header-global-nav-item"
14609		this.$navItem.hover(this.handleHoverItem);
14610
14611		this.$hamberger.on("click",this.toggleNavi.bind(this));
14612		// ".header-global-nav"
14613		this.$navContainer.on("mousemove",this.handleMouseMove.bind(this));
14614		this.$navContainer.on("mouseleave",this.handleMouseOutContainer.bind(this));
14615
14616		// ".header-global-nav-item"
14617		this.$navItem.on("mouseover",this.handleMouseOver.bind(this));
14618
14619		this.$headerTelBtn.on("click",this.handleTelBtnClick.bind(this))
14620
14621		if(this.isVersion2){
14622			this.$navProgenyArrow.off("click",this.handleClickChildItem);
14623			this.$navProgenyArrow.on("click",this.handleClickChildItem);
14624
14625			// ".header-global-nav-item-child-item"
14626			this.$navChildItem.on("mouseenter",this.handleMouseOverItemChild);
14627			this.$navChildItem.on("mouseleave",this.handleMouseOverItemChildLeave);
14628
14629			// ".header-global-nav-item-progeny-item"
14630			this.$navProgenyItem.on("mouseenter",this.handleMouseOverItemProgeny);
14631			this.$navProgenyItem.on("mouseleave",this.handleMouseOverItemProgenyLeave);
14632	
14633			// "".header-global-nav-item-progeny-pc-small"
14634			this.$navProgenyItemPcSmall.on("mouseleave",this.handleMouseOverItemProgenyPcSmallLeave);
14635		}
14636	}
14637
14638	header.handleResize = function(){
14639		if(this.isVersion2){
14640			this.resetProgenyOpen();
14641		}
14642		this.setBreakpoint();
14643	}
14644
14645	header.handleClickItem = function(e){
14646		if(this.breakpoint.indexOf("sp") != -1 || 
14647			 this.breakpoint.indexOf("tab") != -1){
14648			this.toggleChildSp(e.currentTarget);
14649			return false;
14650		}
14651	}
14652	header.handleClickChildItem = function(e){
14653		if(this.breakpoint.indexOf("sp") != -1 || 
14654			this.breakpoint.indexOf("tab") != -1){
14655			this.toggleProgenySp(e.currentTarget);
14656			return false;
14657		}
14658	}
14659	header.handleMouseOverItemChild = function(e){
14660		if($(e.currentTarget).hasClass("progeny-arrow")){
14661			this.isProgeny = true;
14662		}
14663		if(this.breakpoint.indexOf("pc-small") != -1){
14664			this.toggleProgenyPcSmall(e.currentTarget);
14665		}
14666		if(this.breakpoint.indexOf("pc") != -1){
14667			if(!$("header").hasClass("theme-4")){
14668				$(e.currentTarget).find(".header-global-nav-item-child-item-inner").addClass("hover-bg-effect-on");
14669				// var item_inner = $(e.currentTarget).find(".header-global-nav-item-child-item-inner")
14670				// item_inner.addClass(item_inner.data("spbgcolor"));
14671			} else {
14672				var item_inner = $(e.currentTarget).find(".header-global-nav-item-child-item-inner")
14673				var txtcolorhover = item_inner.data("txtcolorhover")
14674				item_inner.addClass(txtcolorhover);
14675			}
14676			if($(e.currentTarget).children(".header-global-nav-item-progeny").length > 0){	
14677				$(e.currentTarget).addClass("header-global-nav-item-child-item-open");
14678			}
14679		}
14680		return false;
14681	}
14682	header.handleMouseOverItemChildLeave = function(e){
14683		if(this.breakpoint.indexOf("pc-small") != -1){
14684			this.isProgeny = false;
14685			// var etarget1 = $(e.target).hasClass("header-global-nav-item-child-item-inner")
14686			// var etarget2 = $(e.target).hasClass("arrow-down-child")
14687			// if(etarget1 || etarget2){
14688			// 	return;
14689			// }
14690			var $this = this
14691			setTimeout(function(){
14692				if (!$this.isProgeny){
14693					console.log('ver2 funcion')
14694					if($(e.currentTarget).parent().parent().parent().find(".header-global-nav-item-progeny-pc-small:hover").length == 0){
14695						$(e.currentTarget).parent().parent().next().find(".header-global-nav-item-progeny").remove()
14696						$(e.currentTarget).parent().parent().next().hide()
14697					}	
14698				}
14699			},100);
14700			if(this.isVersion2){
14701				// 第二階層 要素保持してクラスも削除
14702				this.mouseOverItemProgeny = $(e.currentTarget).find(".header-global-nav-item-child-item-inner")
14703				this.mouseOverItemProgeny.removeClass(this.mouseOverItemProgeny.data("txtcolorhover"));
14704				this.mouseOverItemProgeny.removeClass("hover-bg-effect-on");
14705			}
14706		}
14707		if(this.breakpoint.indexOf("pc") != -1){
14708			if(!$("header").hasClass("theme-4")){
14709				$(e.currentTarget).find(".header-global-nav-item-child-item-inner").removeClass("hover-bg-effect-on");
14710			} else {
14711				var item_inner = $(e.currentTarget).find(".header-global-nav-item-child-item-inner")
14712				var txtcolorhover = item_inner.data("txtcolorhover")
14713				item_inner.removeClass(txtcolorhover);
14714			}
14715			if($(e.currentTarget).children(".header-global-nav-item-progeny").length > 0){
14716				$(e.currentTarget).removeClass("header-global-nav-item-child-item-open");
14717			}
14718		}
14719	}
14720	header.handleMouseOverItemProgeny = function(e){
14721		if(this.breakpoint.indexOf("pc-small") != -1){
14722			if(this.isVersion2){
14723				// 第二階層 クラス指定
14724				if(this.mouseOverItemProgeny){
14725					this.mouseOverItemProgeny.addClass(this.mouseOverItemProgeny.data("txtcolorhover"));
14726					this.mouseOverItemProgeny.addClass(this.mouseOverItemProgeny.data("spbgcolor")).addClass("hover-bg-effect-on");
14727				}
14728			}
14729		}
14730		if(this.breakpoint.indexOf("pc") != -1){
14731			if(!$("header").hasClass("theme-4")){
14732				$(e.currentTarget).find(".header-global-nav-item-progeny-item-inner").addClass("hover-bg-effect-on");
14733			} else {
14734				var item_inner = $(e.currentTarget).find(".header-global-nav-item-progeny-item-inner")
14735				var txtcolorhover = item_inner.data("txtcolorhover")
14736				item_inner.addClass(txtcolorhover);
14737			}
14738		}
14739		return false;
14740	}
14741	header.handleMouseOverItemProgenyLeave = function(e){
14742		if(this.breakpoint.indexOf("pc") != -1){
14743			if(!$("header").hasClass("theme-4")){
14744				$(e.currentTarget).find(".header-global-nav-item-progeny-item-inner").removeClass("hover-bg-effect-on");
14745			} else {
14746				var item_inner = $(e.currentTarget).find(".header-global-nav-item-progeny-item-inner")
14747				var txtcolorhover = item_inner.data("txtcolorhover")
14748				item_inner.removeClass(txtcolorhover);
14749			}
14750		}
14751	}
14752	header.handleMouseOverItemProgenyPcSmallLeave = function(e){
14753		if(this.breakpoint.indexOf("pc-small") != -1){
14754			if(this.isVersion2){
14755				// 第二階層 クラス削除
14756				if(this.mouseOverItemProgeny){
14757					this.mouseOverItemProgeny.removeClass(this.mouseOverItemProgeny.data("txtcolorhover"));
14758					this.mouseOverItemProgeny.removeClass("hover-bg-effect-on");
14759					this.mouseOverItemProgeny = null
14760				}
14761				$(e.currentTarget).children(".header-global-nav-item-progeny").remove()
14762				$(e.currentTarget).hide()
14763			}
14764		}
14765	}
14766
14767	header.handleTelBtnClick = function(){
14768		if(this.$headerTelBtn.find(".icon-phone-square").length > 1){
14769			$("body").toggleClass("header-modal-open");
14770		}
14771	};
14772
14773	header.handleHoverItem = function(e){
14774		if(this.breakpoint.indexOf("pc") != -1 && this.breakpoint.indexOf("pc-large") == -1){
14775				// console.log("hover");
14776				// this.toggleChildPc(e.currentTarget);
14777		}
14778	}
14779
14780	header.handleBreakpointChange = function(){
14781		if(this.breakpoint.indexOf("pc-small") != -1){
14782			this.fitItem();
14783			// this.closeNavi();//T_DMS-115474
14784		} else {
14785			this.removeFitItem();
14786			$(".header-global-nav-item-child-block").each(function(n, item){
14787				$(item).removeAttr('style');
14788			});
14789		}
14790		if(this.isVersion2){
14791			// テーマが1で、this.breakpointが"pc"を含まない時に第3階層目の背景カラーを変更
14792			if($("header").hasClass("theme-1")){
14793					this.toggleSpBgColorNavi();
14794			}
14795			// テーマが4で、this.breakpointが"pc"を含まない時に第3階層目の背景カラーを変更
14796			if($("header").hasClass("theme-4")){
14797					this.toggleSpBgColorNaviD();
14798			}
14799			// テーマが3,4で、this.breakpointが"pc-small"以上の時に第一階層目のテキストカラーを変更
14800			if($("header").hasClass("theme-3") || $("header").hasClass("theme-4")){
14801					this.toggleTextColorNavi();
14802			}
14803			// テーマが3で、this.breakpointが"pc-small"の時に矢印カラー、第3階層目の背景カラー、第1階層目の背景カラーを変更、横ナビ縦ナビによってホバーカラーを変更
14804			if($("header").hasClass("theme-3")){
14805					this.toggleTextArrowColorNavi();
14806					this.toggleSpBgArrowColorNavi();
14807					this.togglePcBgColorNavi();
14808					this.toggleBgHoverColorNavi();
14809			}
14810			// テーマが2で、this.breakpointが"pc-small"以上の時にボーダー用カラーを変更
14811			if($("header").hasClass("theme-2")){
14812					this.toggleBorderColorNaviB();
14813			}
14814			// テーマが4で、this.breakpointが"pc-large"か"pc-normal"の時に階層背景カラーを変更
14815			if($("header").hasClass("theme-4")){
14816					this.toggleTextBgColorNavi();
14817			}
14818		}
14819	}
14820
14821	header.handleMouseMove = function(e){
14822		var v = {
14823			x: e.clientX,
14824			y: e.clientY - this.$headerTop.outerHeight()
14825		};
14826		this.r = getRadian(this.prevV,v);
14827		this.deg = toDegress(this.r);
14828		if(this.breakpoint.indexOf("pc") != -1){
14829			if(this.deg < 90 && this.deg > 0 || this.deg > -90 && this.deg < 0){
14830				// this.addChildPcLarge(elm);
14831			} else {
14832				this.addChildPcLarge(this.largeCurrentItem);
14833			}
14834		}
14835		this.prevV = {
14836			x : e.clientX,
14837			y : e.clientY - this.$headerTop.outerHeight()
14838		};
14839	}
14840
14841	header.handleMouseOver = function(e){
14842		var v = {
14843			x: e.clientX,
14844			y: e.clientY - this.$headerTop.outerHeight()
14845		};
14846		var elm = e.currentTarget;
14847	
14848		this.largeCurrentItem = elm;
14849	}
14850
14851	header.handleMouseOutContainer = function(){
14852		if(this.breakpoint.indexOf("pc-small") != -1){
14853			if($(".header-global-nav-item-progeny-pc-small > .header-global-nav-item-progeny").length > 0){
14854				$(".header-global-nav-item-progeny-pc-small > .header-global-nav-item-progeny").remove()
14855				$(".header-global-nav-item-progeny-pc-small").hide()
14856			}
14857			if(this.isVersion2){
14858				// 第二階層 クラス削除
14859				if(this.mouseOverItemProgeny){
14860					this.mouseOverItemProgeny.removeClass(this.mouseOverItemProgeny.data("txtcolorhover"));
14861					// this.mouseOverItemProgeny.removeClass(this.mouseOverItemProgeny.data("spbgcolor"));
14862					this.mouseOverItemProgeny = null;
14863				}
14864			}
14865		}
14866		this.$navItem.removeClass(itemOpenClassName);
14867		
14868		if(this.isVersion2){
14869			$(".header-global-nav-item-child-item-open").removeClass("header-global-nav-item-child-item-open");
14870			$('.header-global-nav-item-progeny').removeAttr('style');
14871		}
14872	}
14873
14874	header.toggleChildPc = function(elm){
14875		$(elm).toggleClass(itemOpenClassName)
14876	}
14877
14878	header.addChildPcLarge = function(elm){
14879		var _fit_block_flag = false;
14880		if(!$(elm).hasClass(itemOpenClassName) && this.breakpoint.indexOf("pc-small") != -1 ){
14881			_fit_block_flag = true;
14882		}
14883
14884		var getItemChildItemHeight = function(_element){
14885			var _h = 0;
14886			var _ary = $(_element).find(".header-global-nav-item-child-item");
14887			for(var i=0;i<_ary.length;i++){
14888				_h += $(_ary[i]).outerHeight();
14889			}
14890			return _h;
14891		}
14892//console.log("fit_blocK_flag="+_fit_block_flag);
14893
14894		this.$navItem
14895			.removeClass(itemOpenClassName);
14896		this.$navItem.find("> a")
14897			.removeClass(this.mouseEnterClass)
14898			.addClass(this.mouseLeaveClass)
14899
14900
14901		$(elm).addClass(itemOpenClassName)
14902		$(elm)
14903			.find("> a")
14904			.removeClass(this.mouseLeaveClass)
14905			.addClass(this.mouseEnterClass)
14906
14907
14908			if(_fit_block_flag){
14909				for(var i=0;i<2;i++){
14910				$(".header-global-nav-item").each(function(n , _item ){
14911					var _item_ary = $(_item).find(".header-global-nav-item-child-block");
14912					var _item_length = _item_ary.length;
14913					var _last_line = Math.floor(_item_length / 3)*3;
14914					if(_last_line == _item_length) _last_line -= 3;
14915					if($(_item).find(".header-global-nav-item-child").is(':visible')){
14916//console.log(">>>>> "+n+" "+_item_length+" "+$(_item).find(".header-global-nav-item-child").is(':visible'));
14917						for(var i=0;i<_item_length;i++){
14918							if(i < 3){
14919								$(_item_ary[i]).css("padding-top",0);
14920							}
14921							if(i % 3 != 0 || i >= _last_line) continue;
14922
14923							var _h1 = getItemChildItemHeight($(_item_ary[i]) ) ;
14924							var _h2 = getItemChildItemHeight($(_item_ary[i+1]) );
14925							var _h3 = getItemChildItemHeight($(_item_ary[i+2]) );
14926
14927							var _max_height = Math.max(_h1, _h2 , _h3);
14928
14929	//		console.log(n+" "+i+" "+_max_height);
14930							$(_item_ary[i]).css("height", _max_height).addClass("header-global-nav-item-child-block-line");
14931							$(_item_ary[i+1]).css("height", _max_height).addClass("header-global-nav-item-child-block-line");
14932							$(_item_ary[i+2]).css("height", _max_height).addClass("header-global-nav-item-child-block-line");
14933						}
14934					}
14935				});
14936				}
14937			}
14938	}
14939
14940	header.toggleChildSp = function(elm){
14941		var $this = $(elm).parent().parent().parent();
14942		if($this.hasClass(itemOpenClassName)){
14943			$this.find("> a").removeClass(this.mouseEnterClass);
14944			$this.find("> a").addClass(this.mouseLeaveClass);
14945			if($("header").hasClass("theme-2")){
14946				var itemArrow = $this.find(".header-global-nav-item-arrow");
14947				itemArrow.removeClass(itemArrow.data("headerarrowon"));
14948				itemArrow.addClass(itemArrow.data("headerarrowoff"));
14949			}
14950			if(this.isVersion2){
14951				if($("header").hasClass("theme-1")){
14952					$this.children("a").removeClass($this.children("a").attr("data-sptextcolor"));
14953				}else{
14954					$this.find("a").removeClass($this.find("a").attr("data-sptextcolor"));
14955				}
14956				$this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").removeClass($this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").attr("data-spbgcolor"));
14957				$this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").removeClass("spbgcolor");
14958				$this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").addClass($this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").attr("data-spbgcoloroff"));
14959			}
14960			$this.removeClass(itemOpenClassName);
14961		} else {
14962			this.$navItem.removeClass(itemOpenClassName);
14963				$this.find("> a").addClass(this.mouseEnterClass);
14964				$this.find("> a").removeClass(this.mouseLeaveClass);
14965			if($("header").hasClass("theme-2")){
14966				var itemArrow = $this.find(".header-global-nav-item-arrow");
14967				itemArrow.addClass(itemArrow.data("headerarrowon"));
14968				itemArrow.removeClass(itemArrow.data("headerarrowoff"));
14969			}
14970
14971			if(this.isVersion2){
14972				if($("header").hasClass("theme-1")){
14973					$this.children("a").addClass($this.children("a").attr("data-sptextcolor"));
14974				}else{
14975					$this.find("a").addClass($this.find("a").attr("data-sptextcolor"));
14976				}
14977				$this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").addClass($this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").attr("data-spbgcolor"));
14978				$this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").addClass("spbgcolor");
14979				$this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").removeClass($this.find(".header-global-nav-item-inner .header-global-nav-item-hover-item").attr("data-spbgcoloroff"));
14980			}
14981			$this.addClass(itemOpenClassName);
14982		}		
14983	}
14984	header.toggleProgenySp = function(elm){
14985		var $this = $(elm).parent().parent().parent();
14986		if($this.hasClass(itemProgenyOpenClassName)){
14987			$this.removeClass(itemProgenyOpenClassName);
14988		} else {
14989			this.$navItem.removeClass(itemProgenyOpenClassName);
14990			$this.addClass(itemProgenyOpenClassName);
14991		}
14992	}
14993	// 第二階層 表示トグル
14994	header.toggleProgenyPcSmall = function(elm){
14995		$(elm).parent().parent().next().find(".header-global-nav-item-progeny").remove()
14996		$(elm).parent().parent().next().hide()
14997		if($(elm).children('.header-global-nav-item-progeny').length > 0){
14998			$(elm).parent().parent().next().append($(elm).children('.header-global-nav-item-progeny').clone(true))
14999			$(elm).parent().parent().next().children('.header-global-nav-item-progeny').show()
15000			$(elm).parent().parent().next().show()
15001			if($("header").hasClass("theme-4")){
15002				var position_h = $(elm).position().top
15003				var item_h = $(elm).find(".header-global-nav-item-child-item-inner").outerHeight()/2
15004				$(elm).parent().parent().next().children('.header-global-nav-item-progeny-left-arrow').css('top', position_h + item_h)
15005			}
15006		}
15007	}
15008
15009	header.togglePcLarge = function(){
15010
15011	}
15012
15013	header.removePcClass = function(){
15014
15015	}
15016
15017	header.cloneItems = function(){
15018		this.$cloneItem.each(this.clone)
15019	}
15020
15021	header.clone = function(item){
15022		var selector = $(this).attr("data-clone").split(",");
15023		for(var i = 0; i < selector.length; i++){
15024			var $target = $(selector[i]);
15025			$target.html($(this).html());
15026		}
15027		
15028	}
15029
15030	header.clearProperties = function(){
15031		
15032	}
15033
15034	header.splitChildItem = function(i,item){
15035		var $this   = $(item);
15036		var $childs = $this.find(navItemChildItemSelector);
15037		var count   = 0;
15038		var $container;
15039		$childs.each(function(j,item){
15040			var $this      = $(item);
15041			
15042			if(count == 0 || count == 6){
15043				$container = $('<div class="header-global-nav-item-child-block" />')
15044				this.$navItemChildContainer.eq(i).find(".header-global-nav-item-child-list").append($container);
15045				count = 0;
15046			}
15047			if(count < 6){
15048				$container.append($this);
15049			}
15050
15051			count += 1;
15052
15053		}.bind(this));
15054	}
15055
15056	header.splitChildItems  = function(){
15057		// 既存デザインのみ実行
15058		if(!this.isVersion2){
15059			this.$navItemChildContainer.each(this.splitChildItem);
15060		}
15061	}
15062
15063	header.setBreakpoint = function(){
15064		var breakpoint = this.getBreakpoint();
15065		if(breakpoint != this.breakpoint){
15066			this.prevBreakpoint = this.breakpoint;
15067			this.breakpoint = breakpoint;
15068			$(document).trigger(this.events.breakpointChange);
15069		}
15070	}
15071
15072	header.resetProgenyOpen = function(){
15073		var _breakpoint = this.getBreakpoint();
15074		if(_breakpoint != this.breakpoint){
15075			if(_breakpoint == "pc-small"){
15076				$('.header-global-nav-item-progeny').hide();
15077			} else if(_breakpoint.indexOf("sp") == -1 || _breakpoint.indexOf("tab") == -1) {
15078				$(".header-global-nav-item-child-item-open").removeClass("header-global-nav-item-child-item-open");
15079				$('.header-global-nav-item-progeny').removeAttr('style');
15080			}else{
15081				$('.header-global-nav-item-progeny').removeAttr('style');
15082			}
15083		}
15084	}
15085	header.getBreakpoint = function(){
15086		var breakPoint = "";
15087		if(window.matchMedia){
15088			if(window.matchMedia('screen and (max-width: 767px)').matches) breakPoint = "sp";
15089			if(window.matchMedia('screen and (min-width: 768px) and (max-width: 1023px)').matches) breakPoint = "tab-normal";
15090			if(window.matchMedia('screen and (min-width: 1024px) and (max-width: 1279px)').matches) breakPoint = "tab-large";
15091			if(window.matchMedia('screen and (min-width: 1280px) and (max-width: 1519px)').matches) breakPoint = "pc-small";
15092			if(window.matchMedia('screen and (max-width: 1759px) and (min-width: 1520px)').matches) breakPoint = "pc-normal";
15093			if(window.matchMedia('screen and (min-width: 1760px)').matches) breakPoint = "pc-large";
15094		} else {
15095
15096			if( window.innerWidth <= 767) breakPoint = "sp";
15097			if( window.innerWidth >= 768 && window.innerWidth <= 1023) breakPoint = "tab-normal";
15098			if( window.innerWidth >= 1024 && window.innerWidth <= 1279) breakPoint = "tab-large";
15099			if( window.innerWidth >= 1280 && window.innerWidth <= 1519) breakPoint = "pc-small";
15100			if( window.innerWidth >= 1520 && window.innerWidth <= 1759) breakPoint = "pc-normal";
15101			if( window.innerWidth >= 1760) breakPoint = "pc-large";
15102		}
15103
15104		return breakPoint;
15105	}
15106
15107	header.fitItem = function(){
15108		var containerWidth = this.$container.width();
15109		var itemCount      = this.$navItem.length;
15110		var itemWidth      = containerWidth/itemCount/containerWidth*100;
15111		this.$navItem.css({
15112			width: itemWidth+"%"
15113		})
15114
15115
15116	}
15117
15118	header.removeFitItem = function(){
15119		this.$navItem.css({
15120			width: ""
15121		});
15122	}
15123
15124	header.toggleNavi = function(){
15125		if(this.$container.hasClass("open")){
15126			this.closeNavi();
15127		} else {
15128			this.openNavi();
15129		}
15130		
15131	}
15132
15133	header.openNavi = function(){
15134		this.scrollTop = $(window).scrollTop();
15135		this.$container.addClass("open");
15136		this.$wrapper.addClass("headerOpen");
15137		this.$headerBottom.css({
15138			"transform": "translate3d(0,"+this.scrollTop+"px,0)",
15139			"-ms-transform": "translate(0,"+this.scrollTop+"px)"
15140		});
15141		this.$wrapper.css({
15142			"transform": "translate3d(0,-"+this.scrollTop+"px,0)",
15143			"-ms-transform": "translate(0,-"+this.scrollTop+"px)"
15144		});
15145	}
15146
15147	header.closeNavi = function(){
15148		this.$container.removeClass("open");
15149		this.$wrapper.removeClass("headerOpen");
15150		
15151		this.$headerBottom.css({
15152			"transform": "",
15153			"-ms-transform": ""
15154		});
15155
15156		this.$wrapper.css({
15157			transform: "",
15158			"-ms-transform": ""
15159		});
15160		
15161		$(window).scrollTop(this.scrollTop);
15162	}
15163	header.toggleSpBgColorNavi = function(){
15164		if($(".header-global-nav-item-child-item > a, .header-global-nav-item-child-item-inner, .header-global-nav-item-child, .header-global-nav-item-progeny, .header-global-nav-item-progeny-item > a, .header-global-nav-item-progeny-item-inner").length > 0){
15165			if(this.breakpoint.indexOf("pc") != -1){
15166				$(".header-global-nav-item-child-item > a, .header-global-nav-item-child-item-inner, .header-global-nav-item-child, .header-global-nav-item-progeny, .header-global-nav-item-progeny-item > a, .header-global-nav-item-progeny-item-inner").each(function() {
15167					$(this).addClass($(this).attr("data-spbgcolor"));
15168				});
15169				$(".header-global-nav-item > a").each(function() {
15170					$(this).removeClass($(this).attr("data-sptextcolor"));
15171				});
15172			} else {
15173				$(".header-global-nav-item-child-item > a, .header-global-nav-item-child-item-inner, .header-global-nav-item-child, .header-global-nav-item-progeny, .header-global-nav-item-progeny-item > a, .header-global-nav-item-progeny-item-inner").each(function() {
15174					$(this).removeClass($(this).attr("data-spbgcolor"));
15175				});
15176			}
15177		}
15178	}
15179	header.toggleSpBgColorNaviD = function(){
15180		if($(".header-global-nav-item-child-container, .header-global-nav-item-child-inner").length > 0){
15181			if(this.breakpoint.indexOf("pc") != -1){
15182				$(".header-global-nav-item-child-container, .header-global-nav-item-child-inner").each(function() {
15183					$(this).addClass($(this).attr("data-spbgcolor"));
15184				});
15185			} else {
15186				$(".header-global-nav-item-child-container, .header-global-nav-item-child-inner").each(function() {
15187					$(this).removeClass($(this).attr("data-spbgcolor"));
15188				});
15189			}
15190		}
15191	}
15192	header.toggleTextColorNavi = function(){
15193		if($(".header-global-nav-item-inner").length > 0){
15194			if(this.breakpoint.indexOf("pc") != -1){
15195				$(".header-global-nav-item-inner").each(function() {
15196					$(this).addClass($(this).attr("data-pctextcolor"));
15197				});
15198			} else {
15199				$(".header-global-nav-item-inner").each(function() {
15200					$(this).removeClass($(this).attr("data-pctextcolor"));
15201				});	
15202			}
15203		}
15204	}
15205	header.toggleSpBgArrowColorNavi = function(){
15206		if($(".header-global-nav-item-child-inner").length > 0){
15207			if(this.breakpoint.indexOf("pc") != -1){
15208				$(".header-global-nav-item-child-inner").each(function() {
15209					$(this).addClass($(this).attr("data-spbgcolor"));
15210				});
15211			} else {
15212				$(".header-global-nav-item-child-inner").each(function() {
15213					$(this).removeClass($(this).attr("data-spbgcolor"));
15214				});
15215			}
15216		}
15217	}
15218	header.togglePcBgColorNavi = function(){
15219		if(this.breakpoint.indexOf("pc-small") != -1){
15220			$(".header-container").addClass($(".header-container").attr("data-headergradientcolor"))
15221		}else{
15222			$(".header-container").removeClass($(".header-container").attr("data-headergradientcolor"))
15223		}
15224	}
15225	header.toggleBgHoverColorNavi = function(){
15226		if($(".header-global-nav-item-child-item .header-global-nav-item-progeny-item").length > 0){
15227			if(this.breakpoint.indexOf("pc-normal") != -1 || this.breakpoint.indexOf("pc-large") != -1){
15228				$(".header-global-nav-item-child-item, .header-global-nav-item-progeny-item").each(function() {
15229					if($(this).children("a").length > 0){
15230						$(this).children("a").addClass($(this).children("a").attr("data-pclbghovercolor"));
15231						$(this).children("a").removeClass($(this).children("a").attr("data-pcbghovercolor"));
15232					}
15233				});
15234			}else{
15235				$(".header-global-nav-item-child-item, .header-global-nav-item-progeny-item").each(function() {
15236					if($(this).children("a").length > 0){
15237						$(this).children("a").removeClass($(this).children("a").attr("data-pclbghovercolor"));
15238						$(this).children("a").addClass($(this).children("a").attr("data-pcbghovercolor"));
15239					}
15240				});
15241			}
15242		}
15243	}
15244	header.toggleTextArrowColorNavi = function(){
15245		if($(".header-global-nav-item-child-arrow").length > 0){
15246			if(this.breakpoint.indexOf("pc-small") != -1){
15247				$(".header-global-nav-item-child-arrow .arrow-down-child").each(function() {
15248					$(this).addClass($(this).attr("data-pcsmalltextcolor"));
15249				});
15250			}else{
15251				$(".header-global-nav-item-child-arrow .arrow-down-child").each(function() {
15252					$(this).removeClass($(this).attr("data-pcsmalltextcolor"));
15253				});
15254			}
15255		}
15256	}
15257	header.toggleBorderColorNaviB = function(){
15258		if(this.breakpoint.indexOf("pc") != -1){
15259			$(".header-global-nav-item-child-list").each(function() {
15260				$(this).addClass($(this).attr("data-bordercolr"));
15261			});
15262		}else{
15263			$(".header-global-nav-item-child-list").each(function() {
15264				$(this).removeClass($(this).attr("data-bordercolr"));
15265			});
15266		}
15267	}
15268	header.toggleTextBgColorNavi = function(){
15269		if($(".header-global-nav-item-child-arrow").length > 0){
15270			if(this.breakpoint.indexOf("pc-normal") != -1 || this.breakpoint.indexOf("pc-large") != -1){
15271				$(".header-global-nav-item-progeny-inner, .header-global-nav-item-progeny-container").each(function() {
15272					$(this).addClass($(this).attr("data-pcbgadd"));
15273				});
15274			}else{
15275				$(".header-global-nav-item-progeny-inner, .header-global-nav-item-progeny-container").each(function() {
15276					$(this).removeClass($(this).attr("data-pcbgadd"));
15277				});
15278			}
15279		}
15280	}
15281	
15282	function getRadian(v1,v2){
15283		return Math.atan2(v2.y - v1.y,v2.x - v1.x);
15284	}
15285
15286	function toDegress(r){
15287		return r * 180 / Math.PI;
15288	}
15289
15290	global.header = header;
15291
15292
15293	var headerModal = {
15294
15295	};
15296
15297	headerModal.init = function(){
15298			this.addEvents();
15299	}
15300
15301	headerModal.addEvents = function(){
15302		$(".header-tel-modal-bg,.header-tel-modal-close").on("click",this.handleCloseClick);
15303	}
15304
15305	headerModal.handleCloseClick = function(){
15306		$("body").toggleClass("header-modal-open");
15307	}
15308
15309	global.headerModal = headerModal;
15310})(DMS);
15311
15312$(function(){
15313	DMS.header.init();
15314	DMS.headerModal.init();
15315});
15316
15317$(function () {
15318
15319  //アイコンクリック時の処理
15320  var spAccordionMenuIcon = $(".accordion-0001-wrap").find(".accordion-0001__menu__icon-area__icon-sp");
15321  spAccordionMenuIcon.on("click", spAccordion);
15322
15323  var pcAccordionMenuIcon = $(".accordion-0001-wrap").find(".accordion-0001__menu__icon-area-pc");
15324  pcAccordionMenuIcon.on("click", pcAccordion);
15325
15326  function spAccordion () {
15327    var slidePanel = $(this).parent().siblings(".accordion-0001__main");
15328    if($(this).hasClass("accordion-0001__menu__icon-area__icon--is-open")) {
15329      //スライドパネル表示の処理
15330      slidePanel.slideDown();
15331      $(this).removeClass("accordion-0001__menu__icon-area__icon--is-open");
15332      $(this).addClass("accordion-0001__menu__icon-area__icon--is-close");
15333    } else {
15334      //スライドパネル非表示の処理
15335      slidePanel.slideUp();
15336      $(this).removeClass("accordion-0001__menu__icon-area__icon--is-close");
15337      $(this).addClass("accordion-0001__menu__icon-area__icon--is-open");
15338    }
15339
15340  }
15341
15342  function pcAccordion () {
15343    var icon = $(this).children();
15344    var slidePanel = $(this).parent().siblings(".accordion-0001__main");
15345    if(icon.hasClass("accordion-0001__menu__icon-area__icon--is-open")) {
15346      //スライドパネル表示の処理
15347      slidePanel.slideDown();
15348      icon.removeClass("accordion-0001__menu__icon-area__icon--is-open");
15349      icon.addClass("accordion-0001__menu__icon-area__icon--is-close");
15350    } else {
15351      //スライドパネル非表示の処理
15352      slidePanel.slideUp();
15353      icon.removeClass("accordion-0001__menu__icon-area__icon--is-close");
15354      icon.addClass("accordion-0001__menu__icon-area__icon--is-open");
15355    }
15356  }
15357
15358  //ウインドウリサイズ時の処理
15359  var accordionTimer = false;
15360  $(window).on("resize", function() {
15361    var sizeDetect = $("#size-detect").css("font-family");
15362    if(accordionTimer !== false) {
15363      clearTimeout(accordionTimer);
15364    }
15365
15366    accordionTimer = setTimeout(function () {
15367      if(sizeDetect == "sp") {
15368        spResize();
15369      } else {
15370        pcResize();
15371      }
15372    }, 200); 
15373  })
15374
15375  function spResize () {
15376    for(var i = 0; i < spAccordionMenuIcon.length; i++) {
15377
15378      var icon = $(spAccordionMenuIcon[i]);
15379      var slidePanel = icon.parent().siblings(".accordion-0001__main");
15380      if(slidePanel.css("display") == "block") {
15381        //スライドパネルが表示された状態でスマホにリサイズされたときのアイコンの処理
15382        icon.removeClass("accordion-0001__menu__icon-area__icon--is-open");
15383        icon.addClass("accordion-0001__menu__icon-area__icon--is-close");
15384      } else {
15385        //スライドパネルが非表示のときの処理
15386        icon.removeClass("accordion-0001__menu__icon-area__icon--is-close");
15387        icon.addClass("accordion-0001__menu__icon-area__icon--is-open");
15388      }
15389
15390    }
15391
15392  }
15393
15394  function pcResize () {
15395    for(var i = 0; i < pcAccordionMenuIcon.length; i++) {
15396      var icon = $(pcAccordionMenuIcon[i]);
15397      var slidePanel = icon.parent().siblings(".accordion-0001__main");
15398      if(slidePanel.css("display") == "block") {
15399        //スライドパネルが表示された状態でスマホ以外にリサイズされたときの処理
15400        icon.children().removeClass("accordion-0001__menu__icon-area__icon--is-open");
15401        icon.children().addClass("accordion-0001__menu__icon-area__icon--is-close");
15402      } else {
15403        //スライドパネルが非表示のときの処理
15404        icon.children().removeClass("accordion-0001__menu__icon-area__icon--is-close");
15405        icon.children().addClass("accordion-0001__menu__icon-area__icon--is-open");
15406      }
15407
15408    }
15409
15410  }
15411
15412});$( function() {
15413
15414	
15415	function bgimage0002Main(){
15416		this._element;
15417		this._16_7_flag;
15418		this._target_top;
15419		this._target_bottom;
15420		this._unit_sync_flag;
15421		this._overlap;
15422		this._limitbehavior;
15423		this._unit_sync_idlist;
15424		this._ytPlayer;
15425		this._bottom_n;
15426		this._all_unit;
15427		this.ytPlayerAry;
15428		this._my_num;
15429		this._image;
15430		this._timeout_id ;
15431		this._last_check_height;
15432
15433	}
15434	bgimage0002Main.prototype.init = function(_element, _my_num){
15435		this._element = _element;
15436		this._my_num = _my_num;
15437		this._image = $(_element).find("img");
15438		this._target_top = _element.parents(".unit-wrapper").attr("id");
15439		this._target_bottom = "";
15440		this._overlap = _element.data("overlap");
15441		this._unit_sync_idlist = [
15442		]
15443		this._ytPlayer;
15444		this._bottom_n = _element.data("bottomunit");
15445		this._limitbehavior = _element.data("limitbehavior");
15446		this._all_unit = $(".unit-wrapper");
15447
15448		if(this._bottom_n){
15449			for(var i=0;i<this._all_unit.length;i++){
15450				if($(this._all_unit[i]).attr("id") == this._target_top){
15451					this._target_bottom = $(this._all_unit[i+this._bottom_n]).attr("id");
15452					break;
15453				}
15454			}
15455		}
15456
15457		this._target_top = "#"+this._target_top;
15458		this._target_bottom = "#"+this._target_bottom;
15459
15460		this.ytPlayerAry = [];
15461
15462		var that = this;
15463
15464
15465		this.setFixedElement();
15466		var that = this;
15467		$(window).resize(function(){
15468			that.setFixedElement();
15469		});
15470		$(window).scroll(function(){
15471			that.setFixedElement();
15472		});
15473
15474 if(navigator.userAgent.match(/MSIE 10/i) || navigator.userAgent.match(/Trident\/7\./) || navigator.userAgent.match(/Edge\/12\./)) {
15475 $('body').on("mousewheel", function () {
15476 event.preventDefault();
15477 var wd = event.wheelDelta;
15478 var csp = window.pageYOffset;
15479 window.scrollTo(0, csp - wd);
15480 });
15481 }
15482		var _id = setInterval(function(){
15483			var _yt_h = that._element.find(".bg-imagemain-container img").innerHeight();
15484			if(_yt_h && _yt_h > 1){
15485				clearInterval(_id);
15486				that.setFixedElement();
15487			}
15488		}, 100);
15489
15490	}
15491	
15492
15493
15494	bgimage0002Main.prototype.setFixedElement= function(){
15495			var _t = $("#container").position().top;
15496			var _target_element;
15497			var _t_bottom;
15498			var _target_bottom_element;
15499			var _sc_top = $(window).scrollTop();
15500			
15501			var _conversion1_h = 0;
15502			if($(".conversion-0001-head").length>0 && $(".conversion-0001-head").is(':visible') ){
15503				_conversion1_h = $(".conversion-0001-head").height();
15504			}
15505			if($(".conversion-0001-sp-head-menu").length>0 && $(".conversion-0001-sp-head-menu").is(':visible') ){
15506				_conversion1_h = $(".conversion-0001-sp-head-menu").height();
15507			}
15508			
15509			var _header_h = _t - _sc_top;
15510			if(_header_h < 0) _header_h = 0;
15511
15512			if($(this._target_top).length){
15513				_target_element = $(this._target_top);
15514				_t = _target_element.position().top;
15515			}
15516
15517			if($(this._target_bottom).length){
15518				_target_bottom_element = $(this._target_bottom);
15519				_t_bottom = _target_bottom_element.position().top;
15520			}
15521			var _my_top2 = _t - _sc_top + $("#container").position().top;
15522			var _my_top = _t - _sc_top + $("#container").position().top; // + _conversion1_h;
15523			if(_my_top < _header_h) _my_top = _header_h;
15524			var _t_height = 0;
15525			if(_sc_top < _t){
15526				_t_height = _t - _sc_top;
15527			}
15528			var _my_bottom = _t_bottom - _sc_top + $("#container").position().top;
15529
15530			if(_my_top < _conversion1_h) _my_top = _conversion1_h;
15531			var _w = $(".content").width();
15532			var _yt_h = this._element.find(".bg-imagemain-container img").innerHeight();
15533
15534			var _my_height = _yt_h;
15535			var _unit_height = _yt_h * (1 - this._overlap / 100);
15536
15537			if(_target_element.offset().top < _sc_top){
15538				if(this._limitbehavior == 1){
15539					if(_my_bottom < _yt_h){
15540						var _my_top_2 = -(_yt_h - _my_bottom);
15541						if(_my_top_2 < _target_element.offset().top-_sc_top){
15542						_my_top = (_target_element.offset().top-_sc_top);
15543						}else{
15544						_my_top = _my_top_2;
15545						}
15546					}else{
15547					}
15548				}else{
15549					_my_height = _my_bottom;
15550				}
15551			}
15552			$(this._element).css("height", _unit_height);
15553
15554			if(_my_height < 0) _my_height = 0;
15555
15556			this._element.find(".bg-image-0002-scroller").css("width", _w);
15557			var ua = navigator.userAgent
15558			if(ua.indexOf("iPhone") >= 0){
15559				this._element.find(".bg-image-0002-scroller").css("top", _my_top);
15560			}else{
15561				this._element.find(".bg-image-0002-scroller").css("transform","translateY("+_my_top+"px)");
15562			}
15563			this._element.find(".bg-image-0002-scroller").css("height",_my_height);
15564
15565	}
15566
15567
15568	var _bgimage0002Main_ary = [];
15569	if($(".bg-image-0002").length>0){
15570		$(".bg-image-0002").each(function(_n){
15571			var _bgimage0002Main_obj = new bgimage0002Main();
15572			_bgimage0002Main_ary.push(_bgimage0002Main_obj);
15573			_bgimage0002Main_obj.init($(this), _n);
15574		});	
15575	}
15576
15577	function resetFixedElement(){
15578		for(var i=0;i<_bgimage0002Main_ary.length;i++){
15579			_bgimage0002Main_ary[i].setFixedElement();
15580		}
15581	}
15582    $(document).click(function(){
15583        resetFixedElement();
15584        checkBodyAndReset();
15585    });
15586
15587    var _last_header_height;
15588    var _id_cnt = 0;
15589    var _id = setInterval(function(){
15590    	var _h = $("header").height();
15591    	if(_h != _last_header_height){
15592			_last_header_height = _h;
15593			_id_cnt = 0;
15594		}else{
15595			_id_cnt++;
15596			if(_id_cnt > 3){
15597				resetFixedElement();
15598				clearInterval(_id);
15599			}
15600		}
15601    },10);
15602	$(document).ready(function(){
15603		resetFixedElement();
15604	});
15605
15606
15607	var _last_body_height2;
15608	var _last_window_top;
15609    var _id3_cnt;
15610	var _id3;
15611	function checkBodyAndReset(){
15612		_id3_cnt = 0;
15613    	_last_body_height2 = $("body").height();
15614    	_last_window_top = $(window).scrollTop();
15615
15616		clearInterval(_id3);
15617		_id3 = setInterval(function(){
15618			var _h = $("body").height();
15619			var _top = $(window).scrollTop();
15620	    	if(_h != _last_body_height2 || _top != _last_window_top){
15621				_last_body_height2 = _h;
15622				_last_window_top = _top;
15623				_id3_cnt = 0;
15624					resetFixedElement();
15625			}else{
15626				_id3_cnt++;
15627				if(_id3_cnt > 3){
15628					clearInterval(_id3);
15629				}
15630			}
15631		},10);
15632	}
15633	checkBodyAndReset();
15634
15635});
15636$(function () {
15637
15638	if($(".bgimage").length > 0){
15639		$(".bgimage").each(function(){
15640		  setBgImage($(this));
15641		});	
15642	}
15643	
15644	function setBgImage(_target){
15645		var _speed = (parseInt(_target.data("speed"),10)-7)/10;
15646		var _mode = 2;
15647		var _image_width;
15648		var _target_top;
15649		var checkAndSet = function(){
15650	    	var sizeDetect = $("#size-detect").css("font-family");
15651			if(sizeDetect.indexOf("pc") >= 0){
15652		    	var _img = _target.find(".bg-image-wrapper img");
15653		    	var _src = _img.data("src");
15654		    	if(_src){
15655		    		_img.attr("src", _src);
15656		    		_img.data("src", "");
15657		    	}
15658				if(_image_width){
15659					_target.find(".bg-image-wrapper").show();
15660				}
15661				if(_mode == 1){
15662					_target.find(".bg-image-wrapper").css({
15663						"width":$("#container").width(),
15664						"left":$("#content").position().left
15665						});
15666				}else{
15667					if(_image_width){
15668						_target.find(".bg-image-wrapper").css({
15669						"width":_image_width,
15670						"left":$("#content").position().left + $("#content").width()/2 - _image_width/2
15671						});
15672					}
15673				}
15674			}else{
15675				_target.find(".bg-image-wrapper").hide();
15676			}
15677		}
15678
15679
15680		function setPosition(){
15681	    	sizeDetect = $("#size-detect").css("font-family");
15682			if(sizeDetect.indexOf("pc") >= 0){
15683				_target.css("margin-top", $(window).scrollTop() * _speed);
15684			}
15685			
15686		}
15687
15688		$(window).resize(function() {
15689			checkAndSet();
15690			setPosition();
15691		});
15692		checkAndSet();
15693
15694		$(window).scroll(function(a,b) {
15695			setPosition();
15696		});
15697		setPosition();
15698
15699		
15700		clearInterval(_id);
15701		var _id = setInterval(function(){
15702			if(_target.find(".bg-image-wrapper").width() > 0){
15703				_image_width = _target.find(".bg-image-wrapper").width();
15704				clearInterval(_id);
15705				_target.find(".bg-image-wrapper").show();
15706				checkAndSet();
15707			}
15708		},100);
15709
15710	}
15711});
15712
15713$( function() {
15714
15715	function PlaylistPlayer(){
15716		this.ytplayer;
15717		this.onReadyFlg;
15718		this.onStateChangeFlg;
15719		this.unit_sync_flag;
15720		
15721		this.playerId;
15722		
15723		this.playlist_number = 0;
15724		this.playlist;
15725
15726		this.pauseRequestFlg;
15727	}
15728	PlaylistPlayer.prototype.init = function(_playerid) {
15729		this.onReadyFlg = false;
15730		this.onStateChangeFlg = false;
15731		this.playerId = _playerid;
15732		
15733	}
15734	PlaylistPlayer.prototype.initPlayer = function(_area, _playlist) {
15735		var that = this;
15736		this.playlist = _playlist.split(",");
15737	    this.ytplayer = new YT.Player(_area, {
15738	    	videoId:this.playlist[this.playlist_number],
15739	    	playerVars:{
15740				rel:0,
15741				iv_load_policy:3,
15742				showinfo:0,
15743				autoplay:1,
15744				modestbranding:1,
15745				playsinline:1,
15746				controls:0,
15747				loop:1
15748			},
15749	        events: {
15750	            'onReady': function(event){
15751					that.onReadyFlg = true;
15752
15753					event.target.mute();
15754					event.target.playVideo();
15755//console.log("onReady "+that.playerId);
15756					if(that.pauseRequestFlg){
15757						that.pauseVideo();
15758					}
15759				},
15760				 'onStateChange':function(event) {
15761					that.onStateChangeFlg = true;
15762
15763					if(event.data == 0){
15764						if(!this.unit_sync_flag){
15765							that.playlist_number++;
15766							if(that.playlist.length <= that.playlist_number){
15767								that.playlist_number = 0;
15768							}
15769						}
15770						event.target.loadVideoById(that.playlist[that.playlist_number]);
15771					}
15772				}
15773	        }
15774	    });
15775	};
15776	PlaylistPlayer.prototype.pauseVideo = function() {
15777		if(this.ytplayer && this.ytplayer.pauseVideo && this.ytplayer.getPlayerState() != 2){
15778//console.log("pauseVideo *** "+this.ytplayer.getPlayerState() );
15779			this.ytplayer.pauseVideo();
15780			this.pauseRequestFlg = false;
15781		}else{
15782			this.pauseRequestFlg = true;
15783		}
15784	}
15785	PlaylistPlayer.prototype.playVideo = function() {
15786		if(this.ytplayer && this.ytplayer.getPlayerState && (this.ytplayer.getPlayerState() == 2 || this.ytplayer.getPlayerState() == -1)){
15787//console.log("playVideo *** ");
15788			this.pauseRequestFlg = false;
15789			this.ytplayer.playVideo();
15790		}
15791	}
15792	PlaylistPlayer.prototype.loadVideoById = function() {
15793		if(this.ytplayer && this.ytplayer.loadVideoById){
15794			this.ytplayer.loadVideoById(this.playlist[this.playlist_number]);
15795		}
15796	}
15797	
15798	function bgvideoMain(){
15799		this._element;
15800		this._16_7_flag;
15801		this._target_top;
15802		this._target_bottom;
15803		this._unit_sync_flag;
15804		this._overlap;
15805		this._unit_sync_idlist;
15806		this._ytPlayer;
15807		this._bottom_n;
15808		this._all_unit;
15809		this.ytPlayerAry;
15810		this._my_num;
15811		this.playerId;
15812
15813		this._timeout_id ;
15814		this._last_check_height;
15815
15816	}
15817	bgvideoMain.prototype.init = function(_element, _my_num){
15818		this._element = _element;
15819		this._my_num = _my_num;
15820		this._16_7_flag = (_element.data("ratio") == 2) ? true : false;
15821		this._target_top = _element.parents(".unit-wrapper").attr("id");
15822		this._target_bottom = "";
15823		this._unit_sync_flag = false;
15824		this._overlap = _element.data("overlap");
15825		this._unit_sync_idlist = [
15826		]
15827		this._ytPlayer;
15828//console.log("target_top="+this._target_top);
15829		this._bottom_n = _element.data("bottomunit");
15830		this._all_unit = $(".unit-wrapper");
15831
15832		if(this._bottom_n){
15833			for(var i=0;i<this._all_unit.length;i++){
15834				if($(this._all_unit[i]).attr("id") == this._target_top){
15835					this._target_bottom = $(this._all_unit[i+this._bottom_n]).attr("id");
15836					break;
15837				}
15838			}
15839		}
15840
15841		this._target_top = "#"+this._target_top;
15842		this._target_bottom = "#"+this._target_bottom;
15843//console.log("_target_top="+this._target_top);
15844//console.log("_target_bottom="+this._target_bottom);
15845
15846		this.ytPlayerAry = [];
15847
15848		var that = this;
15849
15850		DMS.customEvent.addEventListner(DMS.customEvent.INIT_YOUTUBE, function(){
15851			that.setYouTube();
15852			that.pollingWindow();
15853		});
15854
15855
15856		this.setFixedElement();
15857		var that = this;
15858		$(window).resize(function(){
15859			that.pollingWindow();
15860		});
15861		$(window).scroll(function(){
15862			that.setFixedElement();
15863		});
15864	}
15865	bgvideoMain.prototype.pollingWindow = function(){
15866		var that = this;
15867		this.setFixedElement();
15868		clearInterval(this._timeout_id);
15869		this._timeout_id = setInterval(function(){
15870				var _check_height = that.setFixedElement();
15871				if(that._last_check_height == _check_height){
15872					clearInterval(that._timeout_id);
15873				}
15874				that._last_check_height = _check_height;
15875			}, 300);
15876	}
15877	bgvideoMain.prototype.setYouTube = function(){
15878	   		var _target =  this._element.find(".bg-video-wrapper");
15879
15880			var id = _target.find('.bg-youtube')[0];
15881			var player = $(id).children()[0];
15882			this.playerId = $(player).attr("id")+"_"+this._my_num;
15883			$(player).attr("id", this.playerId);
15884//console.log("this.playerId="+this.playerId);
15885			var dataYoutubeUrl = $(id).data("bg-youtube-url").join(",");
15886			this._ytPlayer = new PlaylistPlayer();
15887			this._ytPlayer.unit_sync_flag = this._unit_sync_flag;
15888			this._ytPlayer.init(this.playerId);
15889			this._ytPlayer.initPlayer(this.playerId, dataYoutubeUrl);
15890			this.ytPlayerAry.push(this._ytPlayer);
15891
15892			this.setFixedElement();
15893	}
15894
15895
15896	bgvideoMain.prototype.setFixedElement= function(){
15897			var _t = $("#container").position().top;
15898			var _target_element;
15899			var _t_bottom;
15900			var _target_bottom_element;
15901			var _sc_top = $(window).scrollTop();
15902			
15903			var _conversion1_h = 0;
15904			if($(".conversion-0001-head").length>0 && $(".conversion-0001-head").is(':visible') ){
15905				_conversion1_h = $(".conversion-0001-head").height();
15906			}
15907			if($(".conversion-0001-sp-head-menu").length>0 && $(".conversion-0001-sp-head-menu").is(':visible') ){
15908				_conversion1_h = $(".conversion-0001-sp-head-menu").height();
15909			}
15910			
15911			var _header_h = _t - _sc_top;
15912			if(_header_h < 0) _header_h = 0;
15913
15914			if($(this._target_top).length){
15915				_target_element = $(this._target_top);
15916				_t = _target_element.position().top;
15917			}
15918
15919			if($(this._target_bottom).length){
15920				_target_bottom_element = $(this._target_bottom);
15921				_t_bottom = _target_bottom_element.position().top;
15922			}
15923			var _my_top = _t - _sc_top + $("#container").position().top; // + _conversion1_h;
15924			if(_my_top < _header_h) _my_top = _header_h;
15925			var _t_height = 0;
15926			if(_sc_top < _t){
15927				_t_height = _t - _sc_top;
15928			}
15929			var _my_bottom = _t_bottom - _sc_top - _t_height + $("#container").position().top;
15930
15931			if(_my_top < _conversion1_h) _my_top = _conversion1_h;
15932			var _w = $(".content").width();
15933			var _yt_h = this._element.find(".bg-video-wrapper").innerHeight();
15934			if(this._16_7_flag) _yt_h = _yt_h/9*7;
15935			var _my_height = _yt_h;
15936			if(_my_bottom < _yt_h){
15937				_my_height = _my_bottom;
15938			}
15939
15940			var _unit_height = _yt_h * (1 - this._overlap / 100);
15941			$(this._element).css("height", _unit_height);
15942
15943			if(_my_height < 0) _my_height = 0;
15944
15945
15946			this._element.find(".bg-video-scroller").css("width", _w).css("top", _my_top).css("height",_my_height);
15947
15948			if(this._unit_sync_flag){
15949				var _id_num;
15950				for(var i=0;i<this._unit_sync_idlist.length;i++){
15951					var _chk_target = $(this._unit_sync_idlist[i]);
15952					if(_chk_target.width() > 0){
15953						var _chk_y = _chk_target.position().top - _sc_top;
15954						if(_chk_y < _yt_h){
15955							_id_num = i;
15956						}
15957					}
15958				}
15959				if(this._ytPlayer && this._ytPlayer.playlist_number != _id_num){
15960					this._ytPlayer.playlist_number = _id_num;
15961					this._ytPlayer.loadVideoById();
15962				}
15963			}
15964//console.log(_my_top+" "+_sc_top+" "+$(window).height()+" "+(_sc_top - $(window).height())+" "+_my_height);
15965			if(this._ytPlayer){
15966				if( (_my_top < 0 && _my_top+_my_height < 0) || (_my_top > $(window).height() && _my_top+_my_height > $(window).height())  || _my_height == 0){
15967//	console.log("call pause request");
15968					this._ytPlayer.pauseVideo();
15969				}else{
15970//	console.log("call play request");
15971					this._ytPlayer.playVideo();
15972				}
15973			}
15974			return this._element.find(".bg-video-wrapper").innerHeight();
15975
15976	}
15977
15978
15979	var _bgvideoMain_ary = [];
15980	if($(".bgvideo-0001").length>0){
15981		$(".bgvideo-0001").each(function(_n){
15982			var _bgvideoMain_obj = new bgvideoMain();
15983			_bgvideoMain_ary.push(_bgvideoMain_obj);
15984		  _bgvideoMain_obj.init($(this), _n);
15985		});	
15986	}
15987
15988});
15989
15990jQuery(document).ready(function($) {
15991    if ($(".body-color-0001").length > 0) {
15992
15993
15994        var thisUnit = $(".body-color-0001");
15995        var countupThreshold = 120; //カウントアップに必要なマウスの移動量
15996        var moveOrigin = 0; //距離算出の基準点
15997        var currentIndex = 0;
15998        var numIndex = 3;
15999
16000
16001
16002
16003        function picAngleChange(target2) {
16004
16005            var ua = navigator.userAgent;
16006            // console.log(ua);
16007            var start;
16008            var move;
16009            var end;
16010            if (ua.indexOf('iPhone') > -1 || ua.indexOf('iPad') > -1 || ua.indexOf('iPod') > -1) {
16011                start = "touchstart";
16012                move = "touchmove";
16013                end = "touchend";
16014                countupThreshold = 50;
16015            } else {
16016                start = "mousedown";
16017                move = "mousemove";
16018                end = "mouseup";
16019                countupThreshold = 120;
16020            }
16021
16022            var target = target2.find(".mousemove-area");
16023            $(target).on(start, function(e) {
16024                if (!e.pageX) e = event.touches[0];
16025                moveOrigin = e.pageX;
16026
16027                // console.log(target2)
16028
16029                $(target).on(move, function(e) {
16030                    if (!e.pageX) e = event.touches[0];
16031                    var diff = e.pageX - moveOrigin;
16032                    var absDiff = Math.abs(diff);
16033
16034                    //マウス移動量の閾値を超えたときだけコストの高い計算をする
16035                    if (absDiff > countupThreshold) {
16036                        if (!e.pageX) e = event.touches[0];
16037                        moveOrigin = e.pageX; //一旦diffをリセットする
16038                        var count = diff / absDiff; //値を 1 or -1 にするための処理
16039                        currentIndex += count; //画像のインデックスは1ずつ増減させる
16040                        currentIndex %= numIndex; //numIndexの数で丸める
16041
16042                        //値がマイナスにならないように調整
16043                        if (currentIndex < 0) {
16044                            currentIndex = currentIndex + numIndex;
16045                        }
16046                        updateView();
16047                    }
16048                });
16049            });
16050
16051
16052            var changeBtn = target2.find(".carview-direction-change-btn a");
16053            changeBtn.on('click', function(e) {
16054                var idx = $(this).data('index');
16055                changeIndex(idx);
16056            });
16057
16058            //indexを変更
16059            function changeIndex(index) {
16060                currentIndex = index;
16061                updateView();
16062            }
16063
16064
16065            //viewの更新
16066            function updateView() {
16067                var pic_item = target2.find(".carview-item__pic-item");
16068                var show_pic_item = target2.find(".pic-item-" + currentIndex);
16069                var navBtn = target2.find('.carview-direction-change-btn li');
16070
16071                pic_item.removeClass('show');
16072                show_pic_item.addClass('show');
16073                navBtn.removeClass('active');
16074                navBtn.eq(currentIndex).addClass('active');
16075            }
16076
16077            $(document).on(end, function(e) {
16078                $(target).off(move);
16079            });
16080        }
16081
16082        thisUnit.each(function() {
16083            if (thisUnit.hasClass('car-pic-3')) {
16084                picAngleChange($(this));
16085            }
16086        });
16087
16088        // bxslider
16089        var activeClass = 'active-slide';
16090
16091        function slider(_target) {
16092
16093            var targetSlide = _target.find(".carview-list");
16094            var targetNav = _target.find(".carview-nav-wrap");
16095            var prev = _target.find(".carview-pn-btn .prev");
16096            var next = _target.find(".carview-pn-btn .next");
16097            var carview_list_wrap = _target.find(".slider.carview-list-wrap");
16098            const $slide = targetSlide.find(".carview-item__pic .carview-item__pic-item.show");
16099
16100
16101            targetSlide.bxSlider({
16102                pagerCustom: targetNav,
16103                speed: "100",
16104                mode: "fade",
16105                touchEnabled: false,
16106                prevSelector: prev,
16107                nextSelector: next,
16108                onSliderLoad: function() {
16109                    targetSlide.children('li').eq(0).addClass(activeClass);
16110                    const intervalId = setInterval(() => {
16111                        // ロード後にスライダーがまだが表示されないため、スライダーが表示された後に実行
16112                        if ($slide.is(":visible")) {
16113                            clearInterval(intervalId);
16114                            setSlideHeight(targetSlide);
16115                        }
16116                    }, 50);
16117                },
16118                onSliderResize: function(){
16119                    // リサイズ時に表示(.showが設定)されているものを取得する
16120                    const $slide = targetSlide.find(".carview-item__pic .carview-item__pic-item.show");
16121                    const intervalId = setInterval(() => {
16122                        // スライダーが表示された後に実行
16123                        if ($slide.is(":visible")) {
16124                            clearInterval(intervalId);
16125                            setSlideHeight(targetSlide);
16126                        }
16127                    }, 50);
16128                },
16129                onSlideAfter: function($slideElement, oldIndex, newIndex) {
16130                    targetSlide.children('li').removeClass(activeClass).eq(newIndex).addClass(activeClass);
16131                }
16132            });
16133
16134            $(".carview-pn-btn .bx-prev").text("");
16135            $(".carview-pn-btn .bx-next").text("");
16136
16137
16138            //tabユニット対応
16139            DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
16140                targetSlide.destroySlider();
16141                carview_list_wrap.after(targetNav);
16142                targetSlide.reloadSlider();
16143                $(".carview-pn-btn .bx-prev").text("");
16144                $(".carview-pn-btn .bx-next").text("");
16145
16146                var timer = false;
16147                if (timer !== false) {
16148                    clearTimeout(timer);
16149                }
16150                timer = setTimeout(function() {
16151                    var picHeight = $(".active-slide .carview-item__pic .carview-item__pic-item.show img").height();
16152                    $(".carview-direction-change-btn").css({ "top": picHeight });
16153                }, 10);
16154            });
16155
16156
16157            const ua = navigator.userAgent;
16158            if (ua.indexOf('Trident') !== -1) {
16159                //IE 11のときの挙動
16160                targetSlide.destroySlider();
16161                carview_list_wrap.after(targetNav);
16162                targetSlide.reloadSlider();
16163                $(".carview-pn-btn .bx-prev").text("");
16164                $(".carview-pn-btn .bx-next").text("");
16165            }
16166
16167
16168
16169            thisUnit.delay(300).animate({
16170              "opacity": 1
16171            }, 300 );
16172
16173
16174        }
16175
16176
16177
16178
16179            const ua = navigator.userAgent;
16180            if (ua.indexOf('Trident') !== -1) {
16181                $(window).load(function () {
16182                    thisUnit.each(function() {
16183                        slider($(this));
16184                    });
16185                });
16186            }else{
16187                thisUnit.each(function() {
16188                    slider($(this));
16189                });
16190            }
16191
16192
16193
16194        // SPアングル切替ボタン 位置制御(プレビュー画面では作動しない)
16195        function changeBtnPosControl() {
16196            var timer = false;
16197            $(window).on('load orientationchange resize', function() {
16198                if (timer !== false) {
16199                    clearTimeout(timer);
16200                }
16201                timer = setTimeout(function() {
16202                    var picHeight = $(".active-slide .carview-item__pic .carview-item__pic-item.show img").height();
16203
16204                    $(".carview-direction-change-btn").css({ "top": picHeight });
16205                }, 10);
16206
16207            });
16208        }
16209
16210        thisUnit.each(function() {
16211            if (thisUnit.hasClass('car-pic-3')) {
16212                changeBtnPosControl($(this));
16213            }
16214        });
16215
16216        // スライダーの高さを再設定
16217        function setSlideHeight(targetSlide) {
16218            const $img = targetSlide.find(".active-slide .carview-item__pic .carview-item__pic-item.show img");
16219            if ($img[0].complete) {
16220                // 画像がすでに読み込まれている場合
16221                applySlideHeight($img, targetSlide);
16222            } else {
16223                // 画像が読み込まれていない場合はロード後に高さ設定
16224                $img.on('load', function() {
16225                    applySlideHeight($img, targetSlide);
16226                });
16227            }
16228        }
16229
16230        // 画像の高さを取得し、スライダーに高さを設定する
16231        function applySlideHeight($img, targetSlide) {
16232            var picOuterHeight = $img.outerHeight(true);
16233            var textHeight = targetSlide.find(".active-slide .carview-item__text").outerHeight(true);
16234            var slideHeight = picOuterHeight + textHeight;
16235            $img.closest(".bx-viewport").css({"height": slideHeight});
16236            
16237            // アングルボタンの位置調整
16238            var picHeight = $(".active-slide .carview-item__pic .carview-item__pic-item.show img").height();
16239            $(".carview-direction-change-btn").css({ "top": picHeight });
16240        }
16241
16242
16243
16244    }
16245
16246});$(function () {
16247
16248});$(function () {
16249	if($(".calendar-0001").length>0){
16250		$(".calendar-0001").each(function(){
16251			setCalendarMain($(this));
16252		});
16253
16254
16255		function setCalendarMain(_target){
16256
16257			var _li_list= _target.find(".calendar-list li");
16258			var _low_date = $(_li_list[0]).data("date");
16259			var _high_date = $(_li_list[_li_list.length-1]).data("date");
16260			var _dt = new Date();
16261			var _c_month = _dt.getMonth()+1;
16262			var _c_year = _dt.getFullYear();
16263
16264			var _now = getYearMonth(_c_year, _c_month , 0);
16265			var _next = getYearMonth(_c_year, _c_month , 1);
16266			
16267
16268			function getColumn(){
16269				var _ret = 3;
16270
16271				var _ff = $("#size-detect").css("font-family");
16272				if(_ff.indexOf("tab") >= 0){
16273					_ret = 2;
16274				}else if(_ff.indexOf("sp") >= 0){
16275					_ret = 1;
16276				}
16277				
16278				return _ret;
16279			}
16280
16281			function moveYearMonth(_i){
16282				_c_month+=_i;
16283				if(_c_month > 12){
16284					_c_year++;
16285					_c_month -= 12;
16286				}
16287				if(_c_month < 1){
16288					_c_year--;
16289					_c_month += 12;
16290				}
16291			}
16292
16293			function getYearMonth(_y, _m, _i){
16294				_m+=_i;
16295				if(_m > 12){
16296					_y++;
16297					_m -= 12;
16298				}
16299				if(_m < 1){
16300					_y--;
16301					_m += 12;
16302				}
16303				return _y * 100 + _m;
16304			}
16305
16306			function setCalendarList(){
16307				_target.find(".calendar-list li").each(function(){
16308					var _check_date = parseInt($(this).data("date"),10);
16309					var _column = getColumn()-1;
16310					var _date1 = getYearMonth(_c_year, _c_month , 0);
16311					var _date2 = getYearMonth(_c_year, _c_month , _column);
16312	//console.log(_date1+" "+_check_date+" "+_date2+" "+_column);
16313					if(_date1 <= _check_date  && _check_date <= _date2){
16314						$(this).addClass("show").removeClass("hide");
16315						var _img = $(this).find("img");
16316						_img.attr("src" ,  _img.data("src"));
16317					}else{
16318						$(this).addClass("hide").removeClass("show");
16319					}
16320				});
16321			}
16322		    function checkSp(){
16323		    
16324				var _ff = $("#size-detect").css("font-family");
16325				if(_ff.indexOf("sp") >= 0){
16326					return true;
16327				}else{
16328					return false;
16329				}
16330		    }
16331			function setDisplayCalendar(){
16332				var _l = _target.find(".calendar-list li.show");
16333				if(checkSp()){
16334					$(_l[1]).removeClass("show").addClass("hide");
16335					if(_l.length > 2){
16336						$(_l[2]).removeClass("show").addClass("hide");
16337					}
16338					var _img = $(_l[1]).find("img");
16339					_img.attr("src" ,  _img.data("src"));
16340				}else{
16341					setCalendarList();
16342				}
16343			}
16344
16345
16346		    _target.find(".calendar-nav-prev a").click(function(){
16347		    	if(getYearMonth(_c_year, _c_month, 0) > _low_date){
16348			      	moveYearMonth(-1);
16349					setCalendarList();
16350					setDisplayCalendar();
16351				}
16352				return false;
16353			});
16354		    _target.find(".calendar-nav-next a").click(function(){
16355		    	if(getYearMonth(_c_year, _c_month, 1) < _high_date || 
16356		    	   (checkSp() && getYearMonth(_c_year, _c_month, 1) <= _high_date) ){
16357					moveYearMonth(1);
16358					setCalendarList();
16359					setDisplayCalendar();
16360				}
16361				return false;
16362		    });
16363
16364			$(window).resize(function(){
16365				setDisplayCalendar();
16366
16367			});
16368			setCalendarList();
16369		}
16370
16371	}
16372});
16373jQuery(document).ready(function($) {
16374
16375    if ($(".car-list-0001").length > 0) {
16376
16377
16378        $(".car-list-0001").each(function() {
16379            tabSwitchContents($(this));
16380        });
16381        // stateSave();
16382
16383        DMS.BoxHeightAlign.init({
16384            isAll: false
16385        });
16386
16387        $(window).on("load resize", function(event) {
16388            DMS.BoxHeightAlign.update();
16389        });
16390
16391        DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
16392            DMS.BoxHeightAlign.update();
16393        });
16394
16395
16396
16397    }
16398
16399});
16400
16401
16402/**
16403 * tab-area
16404 */
16405function tabSwitchContents(_target) {
16406    _target.find(".tab-area .tab-item").on("click", function() {
16407        var $this = $(this);
16408        var index = _target.find("#tab-area .tab-item").index(this);
16409        var type = $this.attr("data-type");
16410        selectTab(type);
16411
16412        function selectTab(type) {
16413            _target.find(".lineup-contents .carlist-name").css("display", "none");
16414            _target.find(".lineup-contents .carlist-body").css("display", "none");
16415            _target.find(".lineup-contents .carlist-engine").css("display", "none");
16416            _target.find(".lineup-contents .carlist-" + type).css("display", "block");
16417            _target.find(".tab-area .tab-item").removeClass('active');
16418            _target.find(".tab-area .tab-item-" + type).addClass('active');
16419            DMS.BoxHeightAlign.update();
16420        }
16421
16422    });
16423
16424}
16425
16426
16427
16428// function stateSave() {
16429//     var index = 0;
16430
16431//     // クッキーのindexを取得し読み込み時にオープンする
16432//     if ($.cookie('index')) {
16433//         var index = $.cookie('index');
16434//         var index_type;
16435//         console.log(index);
16436
16437//         if (index == 0) {
16438//             index_type = "body";
16439//         } else {
16440//             index_type = "name";
16441//         }
16442//         console.log(index_type)
16443
16444//         $('#tab-area li.tab-item').removeClass('active').eq(index).addClass('active');
16445//         $("#lineup-contents .carlist-name").css("display", "none");
16446//         $("#lineup-contents .carlist-body").css("display", "none");
16447//         $("#lineup-contents #carlist-" + index_type).css("display", "block");
16448//     }
16449//     $.cookie('index', index, { expires: 1 });
16450
16451//     $('#tab-area li.tab-item').click(function() {
16452//         if (index != $('#tab-area li.tab-item').index(this)) {
16453//             index = $('#tab-area li.tab-item').index(this);
16454//             $('#tab-area li.tab-item').removeClass('active').eq(index).addClass('active');
16455
16456//             // 有効期限は1日(クッキーにはドメインをセットしない、ブラウザを閉じたら初期化)
16457//             $.cookie('index', index, { expires: 1 });
16458//         }
16459//     });
16460// }
16461
16462jQuery(document).ready(function($) {
16463
16464    if ($(".car-list-0002").length > 0) {
16465
16466
16467        $(".car-list-0002").each(function() {
16468            tabSwitchContents($(this));
16469        });
16470
16471
16472        // tabSwitchContents();
16473
16474        DMS.BoxHeightAlign.init({
16475            isAll: false
16476        });
16477
16478        $(window).on("load resize", function(event) {
16479            DMS.BoxHeightAlign.update();
16480        });
16481        DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
16482            DMS.BoxHeightAlign.update();
16483        });
16484    }
16485
16486});
16487
16488
16489/**
16490 * tab-area
16491 */
16492function tabSwitchContents(_target) {
16493    _target.find(".tab-area .tab-item").on("click", function() {
16494        var $this = $(this);
16495        var index = _target.find("#tab-area .tab-item").index(this);
16496        var type = $this.attr("data-type");
16497        selectTab(type);
16498
16499        function selectTab(type) {
16500            _target.find(".lineup-contents .carlist-name").css("display", "none");
16501            _target.find(".lineup-contents .carlist-body").css("display", "none");
16502            _target.find(".lineup-contents .carlist-engine").css("display", "none");
16503            _target.find(".lineup-contents .carlist-" + type).css("display", "block");
16504            _target.find(".tab-area .tab-item").removeClass('active');
16505            _target.find(".tab-area .tab-item-" + type).addClass('active');
16506            DMS.BoxHeightAlign.update();
16507        }
16508
16509    });
16510
16511}var DMS = DMS || {};
16512jQuery(document).ready(function ($) {
16513  var pNolimit = 'nolimit';
16514  if ($(".car-list-0003").length > 0) {
16515
16516    $(".car-list-0003").each(function () {
16517      setUrlData(this);
16518      initCarList0003(false);
16519    });
16520
16521    DMS.BoxHeightAlign.init({
16522      isAll: false
16523    });
16524    var accordionTimer = false;
16525    $(window).on("load resize", function (event) {
16526      DMS.BoxHeightAlign.update();
16527      if (event.type == 'resize') {
16528        var sizeDetect = $('#size-detect').css('font-family');
16529        if (accordionTimer !== false) {
16530          clearTimeout(accordionTimer);
16531        }
16532        accordionTimer = setTimeout(function () {
16533          if (sizeDetect !== 'sp' && sizeDetect !== 'tab-normal') {
16534            pcResizeCarList();
16535          }
16536        }, 200);
16537      }
16538    });
16539    DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
16540      DMS.BoxHeightAlign.update();
16541    });
16542
16543    $('.car-list-0003 .filter__content').delegate('input,select', 'change', function () {
16544      initCarList0003($(this));
16545    });
16546
16547    $(document).on('click', '.car-list-0003 .search-criteria-list-item', function (e) {
16548      removeSearchCriterialist(e);
16549    })
16550    $(document).on('click', '.car-list-0003 .filter__bt_clear', function (e) {
16551      clearSearchCriteria(e);
16552    })
16553    $(document).on('click', '.car-list-0003__accordion-button', function (e) {
16554      spCarListAccordion(e);
16555    })
16556
16557
16558    /**
16559     * Get data from API, using curElement=false for the first loading
16560     */
16561    function initCarList0003(curElement) {
16562      // 環境別ドメイン設定
16563      var client_id = $(".unit-wrapper .unit-base .car-list-0003").data("client_id");
16564      var envId = $(".unit-wrapper .unit-base .car-list-0003").data("env_id");
16565      var envIdDomain = '';
16566      if (envId == "development") {
16567        envIdDomain = "https://api.eohp.bfp.co.jp";
16568      } else if (envId == "staging") {
16569        envIdDomain = "https://stg.api.t-dms.jp";
16570      } else if (envId == "checking") {
16571        envIdDomain = "https://api-chk.eohp.bfp.co.jp";
16572      } else if (envId == "production") {
16573        envIdDomain = "https://api.t-dms.jp";
16574      } else if (envId == "democar") {
16575        envIdDomain = "https://api-dem.eohp.bfp.co.jp";
16576      } else if (envId == "holding") {
16577        envIdDomain = "https://api-tmt.eohp.bfp.co.jp";
16578      } else if (envId == "bfp_dev") {
16579        envIdDomain = "https://api-tmt.eohp.bfp.co.jp";
16580      } else if (envId == "staging2") {
16581        envIdDomain = "https://stg2.api.t-dms.jp";
16582      } else if (envId == "recheck") {
16583        envIdDomain = "https://api-rec.eohp.bfp.co.jp";
16584      }
16585
16586      // 仮 乗車定員 2~4人で決め打ち
16587      var param = getSearchForm(curElement);
16588      $.ajax({
16589        type: 'GET',
16590        url: envIdDomain + '/car/' + client_id + '/search?' + param,
16591        // url: '../../unit/5000_car-list-0003/sample_carlist.json',
16592        xhrFields: {
16593          withCredentials: true
16594        },
16595        dataType: 'json',
16596        timeout: 10000,
16597        success: function (data) {
16598          initCarList0003Html(data, curElement);
16599        },
16600        error: function (json) {
16601          // console.log('error initcarlist0003_sample', json)
16602        }
16603      });
16604
16605    }
16606
16607    function filterbyDisplayFlag(carList) {
16608      var _carList = []
16609      $(carList).each(function (e) {
16610        var _this = this
16611        if (car_list_0003_car_id_list.length > 0) {
16612          $(car_list_0003_car_id_list).each(function (i) {
16613            if (this.car_id == Number(_this.car_id) && this.display_flg === 1) {
16614              _carList.push(_this)
16615            }
16616          });
16617        }
16618      });
16619      return _carList
16620    }
16621
16622
16623    function initCarList0003Html(carListData, curElement) {
16624
16625      // bodytypeのチェックボックス状態
16626      var checkedCenturyBodytype = $('input[name=body_type_cd]:checked').map(function () {
16627        return $(this).val();
16628      }).get();
16629      // console.log(checkedCenturyBodytype);
16630
16631      var checkedSDN_flg = false;
16632      var checkedSUV_flg = false;
16633      var checkedCENTURY_flg = false;
16634
16635      if (checkedCenturyBodytype.includes("SDN")) {
16636        checkedSDN_flg = true;
16637      }
16638      if (checkedCenturyBodytype.includes("SUV")) {
16639        checkedSUV_flg = true;
16640      }
16641      if (checkedCenturyBodytype.includes("bodyCentury")) {
16642        checkedCENTURY_flg = true;
16643      }
16644
16645
16646      var _diplay_pattern = "";
16647      if (checkedSDN_flg && checkedSUV_flg) {
16648        if (checkedCENTURY_flg) {
16649          _diplay_pattern = "CENTURY_SDN_SUV";
16650        } else {
16651          _diplay_pattern = "SDN_SUV";
16652        }
16653      } else if (checkedSDN_flg && !checkedSUV_flg) {
16654        if (checkedCENTURY_flg) {
16655          _diplay_pattern = "CENTURY_SDN";
16656        } else {
16657          _diplay_pattern = "SDN";
16658        }
16659      } else if (checkedSUV_flg && !checkedSDN_flg) {
16660        if (checkedCENTURY_flg) {
16661          _diplay_pattern = "CENTURY_SUV";
16662        } else {
16663          _diplay_pattern = "SUV";
16664        }
16665      } else {
16666        if (checkedCENTURY_flg) {
16667          _diplay_pattern = "CENTURY";
16668        }
16669
16670      }
16671
16672      carListData = filterbyDisplayFlag(carListData);
16673      DMS.carlist0003 = carListData;
16674      carListData = sortByType(DMS.carlist0003);
16675
16676      var isFirstLoad = false;
16677      var delayload = "";
16678      if (curElement === false) {
16679        DMS.carlist0003Count = DMS.carlist0003.length;
16680        delayload = "delayload "
16681        isFirstLoad = true;
16682      }
16683
16684      // console.log('initCarList0003 in the fisrt time: ', isFirstLoad);
16685
16686
16687      if (Object.keys(carListData) < 1) {
16688        $('.car-list-0003 #carlist-body').empty();
16689        $('.car-list-0003 .search-count-info .result').html("0");
16690        $('.car-list-0003 #carlist-message').show();
16691        return true;
16692      } else {
16693        $('.car-list-0003 #carlist-message').hide();
16694      }
16695
16696      var imgLink = location.origin == 'http://sim.dms.jp' ? 'https://sim-tmt.eohp.bfp.co.jp' : '';
16697      var labelColor = $('.car-list-0003').data('label_color');
16698      var retHTML = '';
16699
16700      $.each(carListData, function (catId, carList) {
16701        if (carList.length < 1) {
16702          return '';
16703        }
16704        var catInfo = carList[0].body_type;
16705        if (_diplay_pattern === "CENTURY") {
16706          if (catInfo.BODY_TYPE_CD !== "SDN" && catInfo.BODY_TYPE_CD !== "SUV") {
16707            retHTML += '<div class="carlist-block clearfix boxheight-align-item-container" id="carlist-body-item-' + catInfo.BODY_TYPE_CD + '">';
16708            retHTML += '<p class="carlist-label ' + labelColor + '"><span class="square"></span>' + catInfo.BODY_TYPE_NAME + ' </p>';
16709            retHTML += '<ul class="carlist clearfix">';
16710
16711            $.each(carList, function (key, carInfo) {
16712              if (carInfo.series.CAR_NAME !== "センチュリー(セダン)" && carInfo.series.CAR_NAME !== "センチュリー") {
16713                var carLinkData = DMS.carlist0003carLinkData[carInfo.car_id] || { href: '', click_tag_data: '', 
16713click_tag_class: '', target: '', delayload: '' };
16714                var carLinkHref = carLinkData.href == '' ? '' : ' href="' + carLinkData.href + '"'
16715                var lImgUrl = ((typeof carInfo.main_pic_cms_file.url !== 'undefined' && carInfo.main_pic_cms_file.url !== '') ? (imgLink + carInfo.main_pic_cms_file.url) : '');
16716                var lImgAlt = ((typeof carInfo.main_pic_cms_file.alt !== 'undefined') ? carInfo.main_pic_cms_file.alt : '');
16717                retHTML += '<li class="carlist-item boxheight-align-item">';
16718                retHTML += '<a ' + carLinkData.click_tag_data + ' class="' + carLinkData.click_tag_class + '"' + carLinkHref + ' target="' + carLinkData.target + '">';
16719                if (lImgUrl !== '') {
16720                  retHTML += '<span class="car-thumb">';
16721                  retHTML += '<img class="' + delayload + 'auto-noimage-3-2" src="' + lImgUrl + '" data-pc="" data-sp="" ' + carLinkData.delayload + 'alt="' + lImgAlt + '" style="opacity: 1;">';
16722                  retHTML += '</span>';
16723                }
16724                retHTML += '<span class="car-name boxheight-align-item-element" style="height: 35px;">' + carInfo.series.CAR_NAME + ' </span>';
16725                retHTML += '</a>';
16726                retHTML += '</li>';
16727              }
16728            });
16729
16730            retHTML += '</ul>';
16731            retHTML += '</div>'; // end of carlist-block
16732          }
16733        } else if (_diplay_pattern === "CENTURY_SUV") {
16734          if (catInfo.BODY_TYPE_CD !== "SDN") {
16735            retHTML += '<div class="carlist-block clearfix boxheight-align-item-container" id="carlist-body-item-' + catInfo.BODY_TYPE_CD + '">';
16736            retHTML += '<p class="carlist-label ' + labelColor + '"><span class="square"></span>' + catInfo.BODY_TYPE_NAME + ' </p>';
16737            retHTML += '<ul class="carlist clearfix">';
16738
16739            $.each(carList, function (key, carInfo) {
16740              if (carInfo.series.CAR_NAME !== "センチュリー(セダン)" && carInfo.series.CAR_NAME !== "センチュリー") {
16741                var carLinkData = DMS.carlist0003carLinkData[carInfo.car_id] || { href: '', click_tag_data: '', click_tag_class: '', target: '', delayload: '' };
16742                var carLinkHref = carLinkData.href == '' ? '' : ' href="' + carLinkData.href + '"'
16743                var lImgUrl = ((typeof carInfo.main_pic_cms_file.url !== 'undefined' && carInfo.main_pic_cms_file.url !== '') ? (imgLink + carInfo.main_pic_cms_file.url) : '');
16744                var lImgAlt = ((typeof carInfo.main_pic_cms_file.alt !== 'undefined') ? carInfo.main_pic_cms_file.alt : '');
16745                retHTML += '<li class="carlist-item boxheight-align-item">';
16746                retHTML += '<a ' + carLinkData.click_tag_data + ' class="' + carLinkData.click_tag_class + '"' + carLinkHref + ' target="' + carLinkData.target + '">';
16747                if (lImgUrl !== '') {
16748                  retHTML += '<span class="car-thumb">';
16749                  retHTML += '<img class="' + delayload + 'auto-noimage-3-2" src="' + lImgUrl + '" data-pc="" data-sp="" ' + carLinkData.delayload + 'alt="' + lImgAlt + '" style="opacity: 1;">';
16750                  retHTML += '</span>';
16751                }
16752                retHTML += '<span class="car-name boxheight-align-item-element" style="height: 35px;">' + carInfo.series.CAR_NAME + ' </span>';
16753                retHTML += '</a>';
16754                retHTML += '</li>';
16755              }
16756            });
16757
16758            retHTML += '</ul>';
16759            retHTML += '</div>'; // end of carlist-block
16760          }
16761        } else if (_diplay_pattern === "CENTURY_SDN") {
16762          if (catInfo.BODY_TYPE_CD !== "SUV") {
16763            retHTML += '<div class="carlist-block clearfix boxheight-align-item-container" id="carlist-body-item-' + catInfo.BODY_TYPE_CD + '">';
16764            retHTML += '<p class="carlist-label ' + labelColor + '"><span class="square"></span>' + catInfo.BODY_TYPE_NAME + ' </p>';
16765            retHTML += '<ul class="carlist clearfix">';
16766
16767            $.each(carList, function (key, carInfo) {
16768              if (carInfo.series.CAR_NAME !== "センチュリー(セダン)" && carInfo.series.CAR_NAME !== "センチュリー") {
16769                var carLinkData = DMS.carlist0003carLinkData[carInfo.car_id] || { href: '', click_tag_data: '', 
16769click_tag_class: '', target: '', delayload: '' };
16770                var carLinkHref = carLinkData.href == '' ? '' : ' href="' + carLinkData.href + '"'
16771                var lImgUrl = ((typeof carInfo.main_pic_cms_file.url !== 'undefined' && carInfo.main_pic_cms_file.url !== '') ? (imgLink + carInfo.main_pic_cms_file.url) : '');
16772                var lImgAlt = ((typeof carInfo.main_pic_cms_file.alt !== 'undefined') ? carInfo.main_pic_cms_file.alt : '');
16773                retHTML += '<li class="carlist-item boxheight-align-item">';
16774                retHTML += '<a ' + carLinkData.click_tag_data + ' class="' + carLinkData.click_tag_class + '"' + carLinkHref + ' target="' + carLinkData.target + '">';
16775                if (lImgUrl !== '') {
16776                  retHTML += '<span class="car-thumb">';
16777                  retHTML += '<img class="' + delayload + 'auto-noimage-3-2" src="' + lImgUrl + '" data-pc="" data-sp="" ' + carLinkData.delayload + 'alt="' + lImgAlt + '" style="opacity: 1;">';
16778                  retHTML += '</span>';
16779                }
16780                retHTML += '<span class="car-name boxheight-align-item-element" style="height: 35px;">' + carInfo.series.CAR_NAME + ' </span>';
16781                retHTML += '</a>';
16782                retHTML += '</li>';
16783              }
16784            });
16785
16786            retHTML += '</ul>';
16787            retHTML += '</div>'; // end of carlist-block
16788          }
16789        } else {
16790          retHTML += '<div class="carlist-block clearfix boxheight-align-item-container" id="carlist-body-item-' + catInfo.BODY_TYPE_CD + '">';
16791          retHTML += '<p class="carlist-label ' + labelColor + '"><span class="square"></span>' + catInfo.BODY_TYPE_NAME + ' </p>';
16792          retHTML += '<ul class="carlist clearfix">';
16793
16794
16795          $.each(carList, function (key, carInfo) {
16796            if (carInfo.series.CAR_NAME !== "センチュリー(セダン)" && carInfo.series.CAR_NAME !== "センチュリー") {
16797              var carLinkData = DMS.carlist0003carLinkData[carInfo.car_id] || { href: '', click_tag_data: '', click_tag_class: '', target: '', delayload: '' };
16798              var carLinkHref = carLinkData.href == '' ? '' : ' href="' + carLinkData.href + '"'
16799              var lImgUrl = ((typeof carInfo.main_pic_cms_file.url !== 'undefined' && carInfo.main_pic_cms_file.url !== '') ? (imgLink + carInfo.main_pic_cms_file.url) : '');
16800              var lImgAlt = ((typeof carInfo.main_pic_cms_file.alt !== 'undefined') ? carInfo.main_pic_cms_file.alt : '');
16801              retHTML += '<li class="carlist-item boxheight-align-item">';
16802              retHTML += '<a ' + carLinkData.click_tag_data + ' class="' + carLinkData.click_tag_class + '"' + carLinkHref + ' target="' + carLinkData.target + '">';
16803              if (lImgUrl !== '') {
16804                retHTML += '<span class="car-thumb">';
16805                retHTML += '<img class="' + delayload + 'auto-noimage-3-2" src="' + lImgUrl + '" data-pc="" data-sp="" ' + carLinkData.delayload + 'alt="' + lImgAlt + '" style="opacity: 1;">';
16806                retHTML += '</span>';
16807              }
16808              retHTML += '<span class="car-name boxheight-align-item-element" style="height: 35px;">' + carInfo.series.CAR_NAME + ' </span>';
16809              retHTML += '</a>';
16810              retHTML += '</li>';
16811            }
16812          });
16813
16814          retHTML += '</ul>';
16815          retHTML += '</div>'; // end of carlist-block
16816        }
16817      });
16818
16819
16820      /*************************
16821      * 202311 センチュリー対応
16822      *************************/
16823      var centurySedan_flg = false;
16824      var centurySedan_HTML = '';
16825      var centurySUV_flg = false;
16826      var centurySUV_HTML = '';
16827      if (_diplay_pattern === "CENTURY_SDN_SUV" || _diplay_pattern === "CENTURY_SDN" || _diplay_pattern === "CENTURY_SUV" || _diplay_pattern === "CENTURY" || _diplay_pattern === "") {
16828        $.each(carListData, function (catId, carList) {
16829
16830          var carBodyTypeName = carList[0].body_type.BODY_TYPE_NAME;
16831          if (carBodyTypeName === "セダン") {
16832
16833            $.each(carList, function (carId, car) {
16834              if (car.series.CAR_NAME === "センチュリー(セダン)") {
16835                centurySedan_flg = true;
16836
16837                var carLinkData = DMS.carlist0003carLinkData[car.car_id] || { href: '', click_tag_data: '', click_tag_class: '', target: '', delayload: '' };
16838                var carLinkHref = carLinkData.href == '' ? '' : ' href="' + carLinkData.href + '"'
16839                var lImgUrl = ((typeof car.main_pic_cms_file.url !== 'undefined' && car.main_pic_cms_file.url !== '') ? (imgLink + car.main_pic_cms_file.url) : '');
16840                var lImgAlt = ((typeof car.main_pic_cms_file.alt !== 'undefined') ? car.main_pic_cms_file.alt : '');
16841
16842                // html生成
16843                centurySedan_HTML += '<li class="carlist-item boxheight-align-item">';
16844                centurySedan_HTML += '<a ' + carLinkData.click_tag_data + ' class="' + carLinkData.click_tag_class + '"' + carLinkHref + ' target="' + carLinkData.target + '">';
16845                if (lImgUrl !== '') {
16846                  centurySedan_HTML += '<span class="car-thumb">';
16847                  centurySedan_HTML += '<img class="' + delayload + 'auto-noimage-3-2" src="' + lImgUrl + '" data-pc="" data-sp="" ' + carLinkData.delayload + 'alt="' + lImgAlt + '" style="opacity: 1;">';
16848                  centurySedan_HTML += '</span>';
16849                }
16850                centurySedan_HTML += '<span class="car-name boxheight-align-item-element" style="height: 35px;">' + car.series.CAR_NAME + ' </span>';
16851                centurySedan_HTML += '</a>';
16852                centurySedan_HTML += '</li>';
16853
16854              }
16855            });
16856
16857          } else if (carBodyTypeName === "SUV") {
16858            $.each(carList, function (carId, car) {
16859              if (car.series.CAR_NAME === "センチュリー") {
16860                centurySUV_flg = true
16861
16862                var carLinkData = DMS.carlist0003carLinkData[car.car_id] || { href: '', click_tag_data: '', click_tag_class: '', target: '', delayload: '' };
16863                var carLinkHref = carLinkData.href == '' ? '' : ' href="' + carLinkData.href + '"'
16864                var lImgUrl = ((typeof car.main_pic_cms_file.url !== 'undefined' && car.main_pic_cms_file.url !== '') ? (imgLink + car.main_pic_cms_file.url) : '');
16865                var lImgAlt = ((typeof car.main_pic_cms_file.alt !== 'undefined') ? car.main_pic_cms_file.alt : '');
16866
16867                // html生成
16868                centurySUV_HTML += '<li class="carlist-item boxheight-align-item">';
16869                centurySUV_HTML += '<a ' + carLinkData.click_tag_data + ' class="' + carLinkData.click_tag_class + '"' + carLinkHref + ' target="' + carLinkData.target + '">';
16870                if (lImgUrl !== '') {
16871                  centurySUV_HTML += '<span class="car-thumb">';
16872                  centurySUV_HTML += '<img class="' + delayload + 'auto-noimage-3-2" src="' + lImgUrl + '" data-pc="" data-sp="" ' + carLinkData.delayload + 'alt="' + lImgAlt + '" style="opacity: 1;">';
16873                  centurySUV_HTML += '</span>';
16874                }
16875                centurySUV_HTML += '<span class="car-name boxheight-align-item-element" style="height: 35px;">' + car.series.CAR_NAME + ' </span>';
16876                centurySUV_HTML += '</a>';
16877                centurySUV_HTML += '</li>';
16878              }
16879            });
16880          }
16881
16882
16883        });
16884      }
16885
16886
16887      var centuryHTML = '';
16888      centuryHTML += '<div class="carlist-block clearfix boxheight-align-item-container" id="carlist-body-item-CENTURY">';
16889      centuryHTML += '<p class="carlist-label ' + labelColor + '"><span class="square"></span>センチュリー</p>';
16890      centuryHTML += '<ul class="carlist clearfix">';
16891      centuryHTML += centurySedan_HTML;
16892      centuryHTML += centurySUV_HTML;
16893      centuryHTML += '</ul>';
16894      centuryHTML += '</div>';
16895
16896
16897
16898
16899
16900      $('.car-list-0003 #carlist-body').empty();
16901      $('.car-list-0003 #carlist-body').append(retHTML);
16902
16903
16904
16905      if (centurySedan_flg || centurySUV_flg) {
16906        $('.car-list-0003 #carlist-body').append(centuryHTML);
16907      }
16908      DMS.setClickTagListener($(".car-list-0003 .clicktag"));
16909
16910      // console.log($(".car-list-0003 .carlist-item").length);
16911      bindSearchResult();
16912      var _suvCar_length = $("#carlist-body-item-SUV li.carlist-item").length;
16913      if (_suvCar_length < 1) {
16914        $("#carlist-body-item-SUV").remove();
16915      }
16916      
16917      var _sdnCar_length = $("#carlist-body-item-SDN li.carlist-item").length;
16918      if (_sdnCar_length < 1) {
16919        $("#carlist-body-item-SDN").remove();
16920      }
16921
16922      return retHTML;
16923    }
16924
16925    function getSearchForm(curElement) {
16926
16927      var params = {};
16928      var apiParams = {};
16929      var textParams = {};
16930      var arrByKey = [];
16931
16932      // reset conditions navigate
16933      $('.car-list-0003 .search-criteria-wrap').empty();
16934      $('.car-list-0003 .filter__content').find('input,select').each(function (e) {
16935        if ($(this).is('[type=checkbox]')) {
16936          if ($.inArray($(this).attr('name'), arrByKey) === -1) {
16937            arrByKey.push($(this).attr('name'));
16938            params[$(this).attr('name')] = [];
16939            apiParams[$(this).attr('name')] = [];
16940            textParams[$(this).attr('name')] = [];
16941          }
16942
16943          if ($(this).is(":checked")) {
16944            if ($(this).val() === "bodyCentury") {
16945              params[$(this).attr('name')].push($(this).val());
16946              apiParams[$(this).attr('name')].push("bodyCentury", "SDN", "SUV");
16947              textParams[$(this).attr('name')].push($(this).parent().find('span').text());
16948            } else {
16949              params[$(this).attr('name')].push($(this).val());
16950              apiParams[$(this).attr('name')].push($(this).val());
16951              textParams[$(this).attr('name')].push($(this).parent().find('span').text());
16952            }
16953          }
16954        } else if ($(this).is('select')) {
16955          var selVal = $(this).val();
16956          var node = $(this).data();
16957          if ($.inArray(node.name, arrByKey) === -1) {
16958            arrByKey.push(node.name);
16959            params[node.name] = [];
16960            apiParams[node.name] = [];
16961            textParams[node.name] = [];
16962          }
16963
16964          if (selVal != node.skip) {
16965            params[node.name].push(node.limit + ':' + selVal);
16966
16967            apiParams[node.name][0] = 'from:' + $($('select[data-name=' + node.name + '] option:selected')[0]).val();
16968            apiParams[node.name][1] = 'to:' + $($('select[data-name=' + node.name + '] option:selected')[1]).val();
16969
16970            textParams[node.name].push(node.txt);
16971          }
16972
16973          setDisableOptions(curElement);
16974        }
16975      });
16976      params['keyword'] = [];
16977      apiParams['keyword'] = [];
16978      if ($.trim($('input[name=keyword]').val()) != '') {
16979        var myKeyword = $.trim($('input[name=keyword]').val());
16980        params['keyword'].push(myKeyword);
16981        apiParams['keyword'].push(convertHira2Kana(myKeyword, false));
16982      }
16983
16984      DMS.carlist0003Params = params;
16985      DMS.carlist0003ApiParams = apiParams;
16986      DMS.carlist0003TextParams = textParams;
16987
16988      //console.log('params for search condition text: ', DMS.carlist0003Params);
16989      setSearchCondition(DMS.carlist0003Params);
16990
16991      // console.log(apiParams);
16992      //console.log('params for api: ', DMS.carlist0003ApiParams);
16993      params = parseApiParams(DMS.carlist0003ApiParams);
16994      // console.log(params);
16995
16996      return params;
16997    }
16998
16999    function sortByType(carListData) {
17000      if (carListData.length < 1) {
17001        return {};
17002      }
17003      var arrByType = {};
17004      var arrByKey = [];
17005      $.each(carListData, function (iIndex, carInfo) {
17006        if ($.inArray(carInfo.body_type.BODY_TYPE_CD, arrByKey) === -1) {
17007          arrByKey.push(carInfo.body_type.BODY_TYPE_CD);
17008          arrByType[carInfo.body_type.BODY_TYPE_CD] = [];
17009        }
17010        arrByType[carInfo.body_type.BODY_TYPE_CD].push(carInfo);
17011      });
17012
17013      return arrByType;
17014    }
17015
17016    function setDisableOptions(selElement) {
17017      if (!selElement || typeof selElement === 'undefined') return true;
17018      if ($('select[data-name=' + selElement.data('name') + ']').length == 2) {
17019        var minItem = $($('select[data-name=' + selElement.data('name') + ']')[0]);
17020        var maxItem = $($('select[data-name=' + selElement.data('name') + ']')[1]);
17021        if (maxItem.val() != pNolimit) {
17022          minItem.find('option').each(function (e) {
17023            $(this).attr('disabled', false);
17024            if ($(this).val() >= maxItem.val() && $(this).val() != pNolimit) {
17025              $(this).attr('disabled', true);
17026            }
17027          });
17028        } else {
17029          minItem.find('option').each(function (e) {
17030            $(this).attr('disabled', false);
17031          });
17032        }
17033        if (minItem.val() != pNolimit) {
17034          maxItem.find('option').each(function (e) {
17035            $(this).attr('disabled', false);
17036            if ($(this).val() <= minItem.val() && $(this).val() != pNolimit) {
17037              $(this).attr('disabled', true);
17038            }
17039          });
17040        } else {
17041          maxItem.find('option').each(function (e) {
17042            $(this).attr('disabled', false);
17043          });
17044        }
17045      }
17046    }
17047
17048    function setSearchCondition(params) {
17049      $.each(params, function (key, param) {
17050        if (param.length > 0) {
17051          setSearchConditionText(key, param);
17052        }
17053      });
17054    }
17055    
17056    function parseApiParams(params) {
17057      // CENTURY選択時のbodytype重複削除
17058      params.body_type_cd = Array.from(new Set(params.body_type_cd))
17059      var arrParams = [];
17060      $.each(params, function (key, param) {
17061        if (param.length > 0) {
17062          arrParams.push(key + '=' + encodeURIComponent(param.join()));
17063        }
17064      });
17065      return arrParams.join('&');
17066    }
17067
17068    function bindSearchResult() {
17069      $('.car-list-0003 .search-count-info .all').html(DMS.carlist0003Count);
17070      // $('.car-list-0003 .search-count-info .result').html(DMS.carlist0003.length);
17071      $('.car-list-0003 .search-count-info .result').html($(".car-list-0003 .carlist-item").length);
17072    }
17073
17074    function setSearchConditionText(pKey, pArrConditions) {
17075      var strConditions = '';
17076      strConditions += '<ul class="search-criteria-list" data-search_list="' + pKey + '">';
17077      $.each(pArrConditions, function (index, iVal) {
17078        if (iVal.search('from:') != -1) {
17079          var nodeCbobox = $($('[data-name=' + pKey + ']')[0]);
17080          strConditions += '<li class="search-criteria-list-item" data-search_criteria="from" data-select_name="' + nodeCbobox.attr("name") + '">';
17081          strConditions += '<span>' + nodeCbobox.val() + nodeCbobox.data('txt') + '~</span>';
17082        } else if (iVal.search('to:') != -1) {
17083          var nodeCbobox = $($('[data-name=' + pKey + ']')[1]);
17084          strConditions += '<li class="search-criteria-list-item" data-search_criteria="to" data-select_name="' + nodeCbobox.attr("name") + '">';
17085          strConditions += '<span>~' + nodeCbobox.val() + nodeCbobox.data('txt') + '</span>';
17086        } else {
17087          if (pKey == 'keyword') {
17088            strConditions += '<li class="search-criteria-list-item" data-search_criteria="' + $('#' + pKey).val() + '">';
17089            strConditions += '<span>' + $('#' + pKey).val() + '</span>';
17090          } else {
17091            var nodeText = $('#' + pKey + '_' + iVal).parent().find('span');
17092            strConditions += '<li class="search-criteria-list-item" data-search_criteria="' + iVal + '">';
17093            strConditions += '<span>' + nodeText.text() + '</span>';
17094          }
17095        }
17096        strConditions += '</li>';
17097      });
17098      strConditions += '</ul>';
17099
17100      $('.car-list-0003 .search-criteria-wrap').append(strConditions);
17101    }
17102    function removeSearchCriterialist(e) {
17103      var inputname = $(e.currentTarget).parent().data("search_list")
17104      var inputvalue = $(e.currentTarget).data("search_criteria")
17105      if ($(e.currentTarget).closest(".carlist0003-body").find('input[name=' + inputname + ']').length > 0) {
17106        var target = $(e.currentTarget).closest(".carlist0003-body").find('input[name=' + inputname + ']');
17107        if (target.is('[type=text]')) {
17108          target.val('').change();
17109        } else if ($(e.currentTarget).closest(".carlist0003-body").find('input[name=' + inputname + '][value=' + inputvalue + ']').length > 0) {
17110          target = $(e.currentTarget).closest(".carlist0003-body").find('input[name=' + inputname + '][value=' + inputvalue + ']');
17111          target.removeAttr('checked').prop('checked', false).change();
17112        }
17113      } else {
17114        var target = $(e.currentTarget).closest(".carlist0003-body").find('select[name="' + $(e.currentTarget).data("select_name") + '"]')
17115        target.attr('selected', true).prop("selectedIndex", 0).change();
17116        setDisableOptions(target)
17117      }
17118
17119      $(e.currentTarget).remove();
17120    }
17121    function setUrlData(elm) {
17122      // html元にurl用データを保存
17123      var carLinkData = {};
17124      $(elm).find('#carlist-body .carlist-item > a').each(function (e) {
17125        carLinkData[$(this).data('car_id')] = {
17126          'click_tag_data': $(this).data('click_tag_data') || '',
17127          'click_tag_class': $(this).data('click_tag_class') || '',
17128          'href': $(this).data('href') || '',
17129          'target': $(this).data('target') || '',
17130          'delayload': "data-delayload='" + $(this).data('delayload') + "' " || ''
17131        }
17132      })
17133      DMS.carlist0003carLinkData = carLinkData;
17134    }
17135    function clearSearchCriteria(e) {
17136      var sizeDetect = $('#size-detect').css('font-family');
17137      var clearItems = (sizeDetect !== 'sp' && sizeDetect !== 'tab-normal') ? $(e.currentTarget).closest('.filter__content').find('input, select') : $(e.currentTarget).closest('.search-count-info').next().find('input, select');
17138      var lastItem = null;
17139      $.each(clearItems, function (key, item) {
17140        if ($(item).is('[type=checkbox]')) {
17141          if ($(item).is(":checked")) {
17142            $(item).removeAttr('checked').prop('checked', false);
17143          }
17144        } else if ($(item).is('[type=text]')) {
17145          $(item).val('');
17146        } else if ($(item)[0].selectedIndex !== 0) {
17147          $(item).attr('selected', true).prop("selectedIndex", 0);
17148          setDisableOptions($(item))
17149        }
17150
17151        lastItem = $(item);
17152      });
17153      if (lastItem != null) {
17154        lastItem.change();
17155      }
17156
17157      // reset navigation area
17158      $('.car-list-0003 .search-criteria-wrap').empty();
17159    }
17160    var convertHira2Kana = function (str, opt) {
17161      str = str
17162        .replace(/[ぁ-ゔ]/g, function (s) {
17163          return String.fromCharCode(s.charCodeAt(0) + 0x60);
17164        })
17165        .replace(/゙/g, '゛')
17166        .replace(/゚/g, '゜')
17167        .replace(/(ウ゛)/g, 'ヴ')
17168        .replace(/(ワ゛)/g, 'ヷ')
17169        .replace(/(ヰ゛)/g, 'ヸ')
17170        .replace(/(ヱ゛)/g, 'ヹ')
17171        .replace(/(ヲ゛)/g, 'ヺ')
17172        .replace(/(ゝ゛)/g, 'ヾ')
17173        .replace(/ゝ/g, 'ヽ')
17174        .replace(/ゞ/g, 'ヾ');
17175      if (opt !== false) {
17176        str = str.replace(/ゕ/g, 'ヵ').replace(/ゖ/g, 'ヶ');
17177      }
17178      return str;
17179    };
17180    function pcResizeCarList() {
17181      var accordionButton = $('.car-list-0003__accordion-button')
17182      $('.car-list-0003 .side_section_wrapper').removeAttr('style');
17183      if (accordionButton.hasClass("car-list-0003__filter__content--is-open")) {
17184        //スライド表示の処理
17185        accordionButton.removeClass("car-list-0003__filter__content--is-open");
17186        accordionButton.addClass("car-list-0003__filter__content--is-close");
17187        accordionButton.closest(".columns_left").removeClass("car-list-0003__columns_left--is-open").addClass("car-list-0003__columns_left--is-close");
17188      }
17189    }
17190
17191    function spCarListAccordion(e) {
17192      var slideArea = $(e.currentTarget).closest(".filter__headline__wrapper").next();
17193      if ($(e.currentTarget).hasClass("car-list-0003__filter__content--is-open")) {
17194        //スライド表示の処理
17195        slideArea.slideUp();
17196        $(e.currentTarget).removeClass("car-list-0003__filter__content--is-open");
17197        $(e.currentTarget).addClass("car-list-0003__filter__content--is-close");
17198        $(e.currentTarget).closest(".columns_left").removeClass("car-list-0003__columns_left--is-open").addClass("car-list-0003__columns_left--is-close");
17199      } else {
17200        //スライド非表示の処理
17201        slideArea.slideDown();
17202        $(e.currentTarget).removeClass("car-list-0003__filter__content--is-close");
17203        $(e.currentTarget).addClass("car-list-0003__filter__content--is-open");
17204        $(e.currentTarget).closest(".columns_left").removeClass("car-list-0003__columns_left--is-close").addClass("car-list-0003__columns_left--is-open");
17205      }
17206    }
17207  }
17208});
17209
17210$(function() {
17211    if ($(".conversion-0001").length > 0) {
17212        var sizeDetect;
17213        var _unit = $(".conversion-0001");
17214        var targetNavWrap = $(".conversion-0001-head-wrap");
17215        var targetNav = $(".conversion-0001-head");
17216        var targetNavPos;
17217        var targetNavHeight;
17218        var spMenuHeight;
17219        var spMenuBtn = $(".conversion-0001-head__sp-menu-btn");
17220        var imageWrap = $(".conversion-0001-image-wrap");
17221        var _thisUnitWrapper = $(".conversion-0001").parent().parent();
17222        var _nextUnitWrapper = _thisUnitWrapper.next(".unit-wrapper");
17223
17224
17225        function scrollFixedNav() {
17226
17227            //ie11
17228            const ua = navigator.userAgent;
17229            if (ua.indexOf('Trident') !== -1) {
17230              $(window).on('load',function(){
17231                  setTimeout(function(){
17232                sizeDetect = $('#size-detect').css('font-family');
17233                targetNavWith = _unit.width();
17234                targetNavHeight = targetNav.height();
17235                targetNav.css({ "width": targetNavWith });
17236                targetNavPos = _unit.offset().top;
17237                spMenuHeight = $(".conversion-0001-sp-head-menu").height();
17238                // alert(targetNavPos);
17239                  },100);
17240              });
17241            }
17242
17243
17244            $(window).on("load resize", function() {
17245                sizeDetect = $('#size-detect').css('font-family');
17246                var targetNavWith = _unit.width();
17247                targetNavHeight = targetNav.height();
17248                targetNav.css({ "width": targetNavWith });
17249                targetNavPos = _unit.offset().top;
17250                spMenuHeight = $(".conversion-0001-sp-head-menu").height();
17251
17252                // console.log(spMenuHeight);
17253
17254            });
17255
17256
17257            $(window).on("load scroll", function() {
17258
17259                if ($(window).scrollTop() > targetNavPos) {
17260
17261                    targetNavWrap.addClass('fixed');
17262
17263                    if ($(imageWrap).length) {
17264                        if (sizeDetect != "sp") {
17265                            imageWrap.css({ "padding-top": targetNavHeight });
17266                            targetNav.css({ "top": 0 });
17267                        } else {
17268                            imageWrap.css({ "padding-top": spMenuHeight });
17269                            targetNav.css({ "top": spMenuHeight });
17270                        }
17271                    } else {
17272                        if (sizeDetect != "sp") {
17273                            _nextUnitWrapper.css({ "padding-top": targetNavHeight });
17274                            targetNav.css({ "top": 0 });
17275                        } else {
17276                            _nextUnitWrapper.css({ "padding-top": spMenuHeight });
17277                            targetNav.css({ "top": spMenuHeight });
17278                        }
17279                    }
17280                } else {
17281
17282                    targetNavWrap.removeClass('fixed');
17283                    imageWrap.css({ "padding-top": 0 });
17284                    _nextUnitWrapper.css({ "padding-top": 0 });
17285                }
17286            });
17287        }
17288        scrollFixedNav();
17289
17290
17291        function spToggleMenu() {
17292            spMenuBtn.on("click", function() {
17293
17294                if (targetNavWrap.hasClass('sp--close')) {
17295                    targetNavWrap.removeClass('sp--close');
17296                    targetNavWrap.addClass('sp--open');
17297                } else {
17298                    targetNavWrap.removeClass('sp--open');
17299                    targetNavWrap.addClass('sp--close');
17300                }
17301            });
17302
17303            $(".conversion-0001-head-wrap .conversion-0001-snav-item a").on("click", function() {
17304                targetNavWrap.removeClass('sp--open');
17305                targetNavWrap.addClass('sp--close');
17306            });
17307
17308        }
17309        spToggleMenu();
17310
17311
17312      function pageTransitionScrollAdujust() {
17313
17314          var _sizeDetect = $('#size-detect').css('font-family');
17315          var $head_pc = $(".conversion-0001 .conversion-0001-head");
17316          var $head_sp = $(".conversion-0001 .conversion-0001-sp-head-menu");
17317          var headHeight;
17318
17319          if (_sizeDetect != "sp") {
17320              headHeight = $head_pc.height();
17321          } else {
17322              headHeight = $head_sp.height();
17323          }
17324
17325          var urlHash = location.hash.replace("#", "");
17326          var unit = $(".unit-wrapper");
17327
17328          unit.each(function() {
17329              var id = $(this).attr("id");
17330              if (id == urlHash) {
17331                  var offsettop = $(this).offset().top;
17332                  setTimeout(function() {
17333                      $("html,body").animate({
17334                          scrollTop: offsettop - headHeight
17335                      }, 0);
17336                  }, 300);
17337              }
17338          });
17339      }
17340
17341      $(window).load(function() {
17342          if ($(".conversion-0001-head-wrap").hasClass('fixed')) {
17343              pageTransitionScrollAdujust();
17344          }
17345      });
17346
17347
17348
17349    }
17350
17351});$(function () {
17352
17353	if($(".conversion-0002").length>0){
17354		var show_table= {
17355			"side":{
17356				"sp":"table-cell",
17357				"tab-normal":"table",
17358				"tab-large":"table",
17359				"pc-small":"table",
17360				"pc-normal":"table",
17361				"pc-large":"table"
17362			},
17363			"bottom":{
17364				"sp":"table-cell",
17365				"tab-normal":"block",
17366				"tab-large":"block",
17367				"pc-small":"block",
17368				"pc-normal":"block",
17369				"pc-large":"block"
17370			}
17371		};
17372		var _dev_data = {
17373			"pc":$(".conversion-wrapper").data("pc"),
17374			"tab":$(".conversion-wrapper").data("tab"),
17375			"sp":$(".conversion-wrapper").data("sp")
17376			};
17377		var getClassName = [
17378			["none","none"],
17379			["bottom","bottom-left"],
17380			["bottom","bottom-center"],
17381			["bottom","bottom-right"],
17382			["side","side-top"],
17383			["side","side-middle"],
17384			["side","side-bottom"]
17385		];
17386		var deviceButton = function(){
17387		   	var sizeDetect = $("#size-detect").css("font-family");
17388		   	var _pc_sp_flag = false;
17389		   	if(sizeDetect.indexOf("pc") >= 0){
17390		   		var classname = getClassName[_dev_data["pc"]];
17391		   		_pc_sp_flag = true;
17392		   	}else if(sizeDetect.indexOf("tab") >= 0){
17393		   		var classname = getClassName[_dev_data["tab"]];
17394		   	}else if(sizeDetect.indexOf("sp") >= 0){
17395		   		var classname = getClassName[_dev_data["sp"]];
17396		   	}
17397		   	if(!classname){
17398		   		classname = getClassName[0];
17399		   	}
17400			$(".conversion-wrapper").removeClass().addClass("conversion-wrapper").addClass("conversion-pos-"+classname[0]+" conversion-pos-"+classname[1]);
17401			
17402		   	var table_name = "side";
17403		   	if($(".conversion-wrapper").has("conversion-pos-bottom")){
17404		   		table_name = "bottom";
17405		   	}
17406			$(".conversion-0002 .button-wrapper").each(function(){
17407				var _devices = $(this).data("device");
17408				if(_devices){
17409					var _devlist = _devices.split(";");
17410					var _flag = false;
17411					for(var i=0;i<_devlist.length;i++){
17412						if(_devlist[i] && sizeDetect.indexOf(_devlist[i]) >= 0){
17413							_flag = true;
17414							break;
17415						}
17416					}
17417					if(_flag){
17418						var _para_sizedetect = getSizeDetect(sizeDetect);
17419						$(this).css("display",show_table[table_name][_para_sizedetect]).addClass("button-show");
17420					}else{
17421						$(this).hide().removeClass("button-show");
17422					}
17423				}else{
17424					$(this).hide().removeClass("button-show");
17425				}
17426				
17427				switch($(this).data("itemtype")){
17428					case 1:
17429					if(_pc_sp_flag){
17430						var _tel_ary = $(this).find("a").attr("href").split("tel:");
17431						var _tel = (_tel_ary.length >= 2) ? _tel_ary[1] : "";
17432						$(this).find(".button-label").text(_tel);
17433					}else{
17434						$(this).find(".button-label").text("電話をかける");
17435					}
17436					break;
17437					
17438					case 2:
17439					if(_pc_sp_flag){
17440						$(this).find(".button-label").text("地図を見る");
17441					}else{
17442						$(this).find(".button-label").text("地図アプリで見る");
17443					}
17444					break;
17445					
17446					case 3:
17447					break;
17448				}
17449
17450			});
17451		}
17452		var getSizeDetect = function(_str){
17453			return _str.replace('"','').replace('"','');
17454		}
17455		deviceButton();
17456		
17457		var checkFooterTop = function(){
17458		   	var sizeDetect = $("#size-detect").css("font-family");
17459			var _cvh = $(".conversion-0002 .button-list").height();
17460			$(".conversion-wrapper").css("height", _cvh);
17461			if($(".conversion-wrapper").hasClass("conversion-pos-bottom")){
17462					if($("footer").length){
17463						var _top = $("footer").offset().top;
17464					}else{
17465						var _top = $("body").outerHeight(true);
17466					}
17467				if($(window).scrollTop()+$(window).height() > _top){
17468					$(".conversion-0002").removeClass("conversion-fixed").addClass("conversion-relative");
17469					$(".conversion-0002").css("padding-right", "");
17470				}else{
17471					$(".conversion-0002").removeClass("conversion-relative").addClass("conversion-fixed");
17472					$(".conversion-0002").css("padding-right", $("#container").css("margin-left"));
17473     			}
17474				$(".conversion-0002").css("top", "auto");
17475  			}else if($(".conversion-wrapper").hasClass("conversion-pos-side")){
17476				$(".conversion-wrapper").css("height","0px");
17477
17478				var _conversion001_flag = false;
17479				var _convertion_h = 0;
17480				var _convertion_top = 0;
17481				if($("div.conversion-0001-head-wrap").width() > 0){
17482					_conversion001_flag = true;
17483					_convertion_h = $(".conversion-0001-head").height();
17484					_convertion_top = $(".conversion-0001").offset().top;
17485				}
17486  				var _wh = $(window).height();
17487  				var _sabun = 0;
17488  				if($(".conversion-wrapper").hasClass("conversion-pos-side-middle")){
17489				    if(sizeDetect.indexOf("sp") >= 0){
17490						$(".conversion-0002").css("top", "auto");
17491					}else{
17492		  				var _cvtop = (_wh - _cvh) / 2;
17493		  				_sabun = (_wh - _cvh)/2;
17494						$(".conversion-0002").css("top", _cvtop);
17495					}
17496				}
17497  				if($(".conversion-wrapper").hasClass("conversion-pos-side-bottom")){
17498					$(".conversion-0002").css("top", "auto");
17499					$(".conversion-0002").css("bottom", "0");
17500  				}
17501  				if($(".conversion-wrapper").hasClass("conversion-pos-side-top")){
17502					if(sizeDetect.indexOf("pc") < 0 || _convertion_h <= 0){
17503						$(".conversion-0002").css("top", 0);
17504					}else{
17505						if(_convertion_top > $(window).scrollTop()){
17506							$(".conversion-0002").css("top", _convertion_h+_convertion_top  - $(window).scrollTop());
17507						}else{
17508							$(".conversion-0002").css("top", _convertion_h);
17509						}
17510					}
17511	  				_sabun = (_wh - _cvh);
17512  				}
17513
17514				if(_convertion_h <= 0){
17515					$(".conversion-0002").removeClass("conversion-relative").addClass("conversion-fixed");
17516	     			}else{
17517					$(".conversion-0002").removeClass("conversion-fixed");
17518					$(".conversion-0002").removeClass("conversion-relative");
17519				}
17520  			}else{
17521  			}
17522
17523			$(".button-list li.button-show").removeClass("border-first").removeClass("border-last").removeClass("border-first-last");
17524			$(".button-list li.button-show").first().addClass("border-first");
17525			if($(".button-list li.button-show").last().hasClass("border-first")){
17526				$(".button-list li.button-show").last().removeClass("border-first").addClass("border-first-last");
17527			}else{
17528				$(".button-list li.button-show").last().addClass("border-last");
17529			}
17530		}
17531		
17532		checkFooterTop();
17533		if(!$(".conversion-wrapper").hasClass("conversion-pos-none")){
17534		 	$(".conversion-wrapper").show(); /* default is hide */
17535		}
17536		checkFooterTop();
17537		
17538		
17539		$(window).scroll(function() {
17540			checkFooterTop();
17541		});
17542		$(window).resize(function() {
17543			deviceButton();
17544			checkFooterTop();
17545			if(!$(".conversion-wrapper").hasClass("conversion-pos-none")){
17546			 	$(".conversion-wrapper").show(); /* default is hide */
17547			}
17548		});
17549	}
17550});
17551// coupon.js
17552var tDMS = tDMS || {};
17553
17554(function(namespace){
17555
17556	var QRCODE = function(){
17557
17558	}
17559
17560	QRCODE.prototype.init = function(){
17561		this.getURL();
17562	}
17563
17564	QRCODE.prototype.getURL = function(){
17565		var href = window.location.href ;
17566		// 現在表示中のページのURLで自動生成する
17567		this.makeQRcode(href);
17568
17569	}
17570
17571	QRCODE.prototype.makeQRcode = function(url){
17572		var img = $(".coupon__qr__code__inner__img");
17573
17574		img.qrcode({
17575			width : 124,
17576			height: 124,
17577			text  : url
17578		});
17579
17580	}
17581
17582	namespace.QRCODE = QRCODE;
17583
17584})(tDMS);
17585
17586$(function(){
17587
17588	var makeQR = new tDMS.QRCODE();
17589
17590	makeQR.init();
17591
17592});
17593
17594/*dekirukoto-0001*/
17595$(function () {
17596
17597    $(".dekirukoto-0001").each(function(){
17598        boxHeight( $(this) );
17599    });
17600
17601    function boxHeight(_target){
17602
17603  var boxheightAlign_1 = new DMS.BoxHeightAlign($(".dekirukoto-block.buy"),{ isAll:false });
17604  var boxheightAlign_2 = new DMS.BoxHeightAlign($(".dekirukoto-block.maintenance"),{ isAll:false });
17605  var boxheightAlign_3 = new DMS.BoxHeightAlign($(".dekirukoto-block.other"),{ isAll:false });
17606
17607
17608
17609  boxheightAlign_1.init();
17610  boxheightAlign_2.init();
17611  boxheightAlign_3.init();
17612
17613
17614
17615
17616  $(window).on('resize', function() {
17617    boxheightAlign_1.update();
17618    boxheightAlign_2.update();
17619    boxheightAlign_3.update();
17620  });
17621
17622
17623      DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
17624        boxheightAlign_1.update();
17625        boxheightAlign_2.update();
17626        boxheightAlign_3.update();
17627      });
17628
17629}
17630
17631});$(function () {
17632
17633  if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0001").length > 0) {
17634
17635
17636    // 初期時非表示
17637    var window_height = $(window).height();
17638    var democar_init_height = window_height * .5;
17639    var iframe_flg = false;
17640
17641    $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").parent(".unit-base").css({ "position": "relative" });
17642    $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").before('<div class="loading_democar"><img src="/assets/a/images/democar-exhibitioncar-0001/loading.png"></div>');
17643
17644    $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").css({
17645      "opacity": 0,
17646      "height": democar_init_height
17647    });
17648
17649
17650    if ($('.democar-exhibitioncar-0001').parent(".unit-base").data("mode") == "iframe") {
17651
17652      /**
17653       * iframe時にshoworderをURLパラメータから取得
17654       * */
17655      iframe_flg = true;
17656      var queryString = document.location.search;
17657      var params = new URLSearchParams(queryString);
17658      var paramValue = params.get('showorder');
17659      
17660
17661      var defWindowInfo = {
17662        width: 0,
17663        height: 0,
17664        isSizeUpdate: false,
17665        isContentsReady: false,
17666        dmsIframeFormMessage: true,
17667        isContentsLoad: false,//iframe内でページ遷移が発生したときに投げる
17668      }
17669
17670      var windowInfo = $.extend({}, defWindowInfo);
17671      windowInfo = $.extend({}, defWindowInfo);
17672      windowInfo.isContentsReady = true;
17673
17674      $(window).resize(function () {
17675        windowInfo = $.extend({}, defWindowInfo);
17676        windowInfo.width = $("body").width();
17677        windowInfo.height = $("body").height();
17678        windowInfo.isSizeUpdate = true;
17679        parent.postMessage(windowInfo, '*');
17680      })
17681
17682      $(document).on('democarFrameUpdate', function () {
17683        windowInfo = $.extend({}, defWindowInfo);
17684        windowInfo.width = $("body").width();
17685        windowInfo.height = $("body").height();
17686        windowInfo.isSizeUpdate = true;
17687        parent.postMessage(windowInfo, '*');
17688      })
17689
17690
17691
17692      window.onload = function () {
17693        windowInfo = $.extend({}, defWindowInfo);
17694        windowInfo.width = $("body").width();
17695        windowInfo.height = $("body").height();
17696        windowInfo.isSizeUpdate = true;
17697        windowInfo.isContentsLoad = true;
17698        parent.postMessage(windowInfo, '*');
17699      }
17700    }
17701
17702
17703    // 試乗車2期判定振り分け
17704    var app_version = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").data("app_version");
17705
17706    // チェックボックス
17707    function changeCheckBtn() {
17708      var checkBtn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-check-block .item-check");
17709      checkBtn.on("click", function () {
17710        var $this = $(this);
17711        if ($this.hasClass('active')) {
17712          $this.removeClass('active');
17713          $this.removeClass($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .item-check").data("activeclass"));
17714        } else {
17715          $this.addClass('active');
17716          $this.addClass($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .item-check").data("activeclass"));
17717        }
17718      });
17719    }
17720    changeCheckBtn();
17721
17722
17723    // dom生成
17724    var car_list;
17725    var client_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").data("client_id");
17726
17727
17728    // 環境ドメイン
17729    var envId = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").data("env_id");
17730    var envIdDomain;
17731    if (envId == "development") {
17732      envIdDomain = "https://api.eohp.bfp.co.jp";
17733    } else if (envId == "staging") {
17734      envIdDomain = "https://stg.api.t-dms.jp";
17735    } else if (envId == "checking") {
17736      envIdDomain = "https://api-chk.eohp.bfp.co.jp";
17737    } else if (envId == "production") {
17738      envIdDomain = "https://api.t-dms.jp";
17739    } else if (envId == "democar") {
17740      envIdDomain = "https://api-dem.eohp.bfp.co.jp";
17741    } else if (envId == "holding") {
17742      envIdDomain = "https://api-tmt.eohp.bfp.co.jp";
17743    } else if (envId == "staging2") {
17744      envIdDomain = "https://stg2.api.t-dms.jp";
17745    } else if (envId == "recheck") {
17746      envIdDomain = "https://api-rec.eohp.bfp.co.jp";
17747    }
17748
17749
17750    function changeDataUrlParam() {
17751      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001");
17752      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-btn .btn-search").on("click", function () {
17753
17754        var series_seq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=carname]").val();
17755        var area = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=area]").val();
17756        var shop_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=store]").val();
17757        var show_welcab_type = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=welcab]").val();
17758
17759        $wrap.attr("data-series_seq", series_seq);
17760        $wrap.attr("data-area", area);
17761        $wrap.attr("data-shop_id", shop_id);
17762        $wrap.attr("data-show_welcab_type", show_welcab_type);
17763      });
17764
17765      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-btn .btn-reset").on("click", function () {
17766        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=carname]").val("");
17767        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=area]").val("");
17768        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=store]").val("");
17769        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=welcab]").val("2");
17770
17771        $wrap.attr("data-series_seq", "");
17772        $wrap.attr("data-area", "");
17773        $wrap.attr("data-shop_id", "");
17774        $wrap.attr("data-show_welcab_type", "2");
17775        $(".sort-check-block .item-check").removeClass("active");
17776        $(".sort-check-block .item-check").removeClass($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .item-check").data("activeclass"));
17777      });
17778    }
17779    changeDataUrlParam();
17780
17781
17782    function loadRequestUrl() {
17783      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001");
17784      var series_seq = $wrap.data("series_seq");
17785      var area = $wrap.data("area");
17786      var shop_id = $wrap.data("shop_id");
17787      var show_welcab_type = $wrap.data("show_welcab_type");
17788      var limit = $wrap.data("limit");
17789      var page = $wrap.attr("data-page");
17790
17791      var area_uri = encodeURIComponent(area);
17792      var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
17793
17794      var requestUrl = envIdDomain + "/democar/" + client_id + "/list2?democar_showorder_id="+showorder+"&meta_shop_flg=1&SERIES_SEQ=" + series_seq + "&area=" + area_uri + "&shop_id=" + shop_id + "&welcab_search_type=" + show_welcab_type + "&limit=" + limit + "&page=" + page;
17795      loadDemoCar(requestUrl);
17796    }
17797    loadRequestUrl();
17798
17799
17800    function setRequestUrl() {
17801      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001");
17802      var $list_wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .democar-exhibitioncar-0001-wrap");
17803      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-btn .btn-search").on("click", function () {
17804        $wrap.attr("data-page", "1");
17805        var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .more-btn");
17806        $more_btn.css({ "opacity": "0", "display": "block" });
17807        $list_wrap.css({ "opacity": "0", "display": "block" });
17808        setTimeout(function () {
17809          $more_btn.animate({ "opacity": "1" }, 300);
17810          $list_wrap.animate({ "opacity": "1" }, 300);
17811
17812        }, 200);
17813
17814        var car_list_dom = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .democar-exhibitioncar-0001-wrap");
17815        car_list_dom.empty();
17816
17817        var series_seq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=carname]").val();
17818        var area = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=area]").val();
17819        var shop_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=store]").val();
17820        var show_welcab_type = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 [name=welcab]").val();
17821        var limit = $wrap.data("limit");
17822        var page = $wrap.attr("data-page");
17823        var democar_flg = "";
17824        if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-check-block .item-check").hasClass("active")) {
17825          democar_flg = 1;
17826        }
17827        var area_uri = encodeURIComponent(area);
17828
17829        var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
17830
17831        var requestUrl = envIdDomain + "/democar/" + client_id + "/list2?democar_showorder_id="+showorder+"&meta_shop_flg=1&SERIES_SEQ=" + series_seq + "&area=" + area_uri + "&shop_id=" + shop_id + "&welcab_search_type=" + show_welcab_type + "&democar_flg=" + democar_flg + "&limit=" + limit + "&page=" + page;
17832        loadDemoCar(requestUrl);
17833      });
17834    }
17835    setRequestUrl();
17836
17837    function resetRequestUrl() {
17838      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001");
17839      var $list_wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .democar-exhibitioncar-0001-wrap");
17840      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-btn .btn-reset").on("click", function () {
17841        $wrap.attr("data-page", "1");
17842        var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .more-btn");
17843        // $more_btn.show();
17844        $more_btn.css({ "opacity": "0", "display": "block" });
17845        $list_wrap.css({ "opacity": "0", "display": "block" });
17846        setTimeout(function () {
17847          $more_btn.animate({ "opacity": "1" }, 300);
17848          $list_wrap.animate({ "opacity": "1" }, 300);
17849        }, 200);
17850
17851        var limit = $wrap.data("limit");
17852        var page = $wrap.attr("data-page");
17853        var show_welcab_type = $wrap.attr("data-show_welcab_type");
17854        var car_list_dom = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .democar-exhibitioncar-0001-wrap");
17855        car_list_dom.empty();
17856
17857        var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
17858
17859        var requestUrl = envIdDomain + "/democar/" + client_id + "/list2?democar_showorder_id="+showorder+"&meta_shop_flg=1&welcab_search_type=" + show_welcab_type + "&limit=" + limit + "&page=" + page;
17860        loadDemoCar(requestUrl);
17861      });
17862    }
17863    resetRequestUrl();
17864
17865
17866    function loadMoreCaritem() {
17867      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001");
17868      var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .more-btn");
17869      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .more-btn a").on("click", function () {
17870        var _page = $wrap.attr("data-page");
17871        _page++;
17872        $wrap.attr("data-page", _page);
17873
17874        var democar_flg = "";
17875        if ($(".sort-check-block .item-check").hasClass("active")) {
17876          democar_flg = 1;
17877        }
17878
17879        var total_car_num = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").attr("data-total_car_num");
17880        var series_seq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").attr("data-series_seq");
17881        var area = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").attr("data-area");
17882        var shop_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").attr("data-shop_id");
17883        var show_welcab_type = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").attr("data-show_welcab_type");
17884        var limit = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").data("limit");
17885        var page_total = Math.ceil(total_car_num / limit);
17886
17887        var area_uri = encodeURIComponent(area);
17888
17889        var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
17890
17891        var requestUrl = envIdDomain + "/democar/" + client_id + "/list2?democar_showorder_id="+showorder+"&meta_shop_flg=1&SERIES_SEQ=" + series_seq + "&area=" + area_uri + "&shop_id=" + shop_id + "&welcab_search_type=" + show_welcab_type + "&democar_flg=" + democar_flg + "&limit=" + limit + "&page=" + _page;
17892
17893        var load_completed_flg = false;
17894        if (page_total >= _page) {
17895          // $more_btn.show();
17896          loadDemoCar(requestUrl);
17897          if (page_total == _page) {
17898            load_completed_flg = true;
17899          }
17900        }
17901        if (load_completed_flg) {
17902          $more_btn.hide();
17903        }
17904
17905      });
17906    }
17907    loadMoreCaritem();
17908
17909
17910    var cnt = 0;
17911    var max = 1;
17912
17913    function loadDemoCar(_url) {
17914      $.ajax({
17915        type: 'GET',
17916        url: _url,
17917        xhrFields: {
17918          withCredentials: true
17919        },
17920        dataType: 'json',
17921        timeout: 10000,
17922        success: function (json) {
17923          jsonLoaded(json);
17924
17925          if (initial_load()) {
17926            setCarnamePullDown(json);
17927            keyInputDropDown();
17928          }
17929        },
17930        error: function (json) {
17931          $(".unit-wrapper .unit-base .loading_democar").remove();
17932          $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").before('<p class="error_text">情報取得に失敗しました</p>');
17933          $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").remove();
17934          $(document).trigger("democarFrameUpdate");
17935        }
17936      });
17937    }
17938
17939    function initial_load() {
17940      cnt++;
17941      if (cnt == max) {
17942        return true;
17943      }
17944      return false;
17945    }
17946
17947
17948    function setCarnamePullDown(data) {
17949      var carSeq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").data("series_seq");
17950      var car_name_list = [];
17951      var car_name_list_origin = data["car_name_list"];
17952      // 重複を削除したリスト
17953      car_name_list = car_name_list_origin.filter(function (x, i, self) {
17954        return self.indexOf(x) === i;
17955      });
17956
17957      var carNamePullDownWrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-list .sort-carname");
17958      for (var i = 0; i < car_name_list.length; i++) {
17959        var carPullDown = "";
17960        if (carSeq == car_name_list[i]["SERIES_SEQ"]) {
17961          carPullDown += '<option selected value="' + car_name_list[i]["SERIES_SEQ"] + '">' + car_name_list[i]["CAR_NAME"] + "</option>";
17962        } else {
17963          carPullDown += '<option value="' + car_name_list[i]["SERIES_SEQ"] + '">' + car_name_list[i]["CAR_NAME"] + "</option>";
17964        }
17965        carNamePullDownWrap.append(carPullDown);
17966      }
17967    }
17968
17969
17970    function jsonLoaded(data) {
17971      car_num = data.total;
17972      car_list = data.democar_list;
17973      var limit = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").data("limit");
17974      // addIframeClass();
17975      // car_name_list = data.car_name_list;
17976      // setDemocarListHtml(car_list);
17977
17978      var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .more-btn");
17979
17980      var cnt_flg = true;
17981      if (car_num <= limit) {
17982        $more_btn.hide();
17983        cnt_flg = false;
17984      }
17985
17986      var $label = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .headline--democar-list-view");
17987      var $list_wrapper = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .democar-exhibitioncar-0001-wrap");
17988      var no_data_text = '<p class="error_text">選択された条件で掲載できる情報はございません。</p>'
17989      $(".error_text").remove();
17990
17991      if (car_num === "0") {
17992        $label.hide();
17993        $list_wrapper.hide();
17994        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-area-wrapper").append(no_data_text)
17995      } else {
17996        $label.show();
17997        $list_wrapper.show();
17998        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .error_text").remove();
17999        setDemocarListHtml(car_list);
18000        addIframeClass();
18001      }
18002
18003
18004      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").attr('data-total_car_num', car_num);
18005      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .sort-count-info .sort-count .result").html(car_num);
18006      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").parent(".unit-base").css({ "position": "static" });
18007      $(".unit-wrapper .unit-base .loading_democar").remove();
18008      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").css({
18009        "height": "auto"
18010      }).animate({
18011        "opacity": 1
18012      });
18013      $(document).trigger("democarFrameUpdate");
18014    }
18015
18016    function setDemocarListHtml(_list) {
18017      var insertTarget = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001-wrap");
18018      var c1txt = insertTarget.data("c1txt");
18019      var c1bg = insertTarget.data("c1bg");
18020      var c2bg = insertTarget.data("c2bg");
18021      var c2txt = insertTarget.data("c2txt");
18022      var c3bg = insertTarget.data("c3bg");
18023      var c3txt = insertTarget.data("c3txt");
18024      var c6txt = insertTarget.data("c6txt");
18025      var pageDesignId = insertTarget.data("designid");
18026      var unit_id = insertTarget.data("unitid");
18027      var pageTitle = $("title").html();
18028      var mode = $(".democar-exhibitioncar-0001").parent().data("mode");
18029
18030
18031      for (var i = 0; i < $(_list).length; i++) {
18032        var list = $(_list)[i];
18033
18034        var engine_id_list = {
18035          "1": "ガソリン",
18036          "2": "ディーゼル",
18037          "3": "ハイブリッド",
18038          "4": "FCEV",
18039          "5": "PHEV",
18040          "6": "BEV",
18041          "9": "その他"
18042        };
18043
18044        var democar_flg = {
18045          "1": "試乗車",
18046          "2": "展示車"
18047        };
18048
18049        var democar_flg_class = {
18050          "1": "is-democar",
18051          "2": "no-democar"
18052        };
18053
18054
18055        //image_url=null時の対応
18056        var carname_en_origin = list.CAR_NAME_EN;
18057        carname_en_origin = String(carname_en_origin);
18058        var carname_en = carname_en_origin.toLowerCase();
18059        carname_en = carname_en.replace(/\s+/g, "");
18060
18061
18062
18063        var democarListHtml = "";
18064
18065        democarListHtml += '<div class="democar-list-wrap ' + democar_flg_class[list.DEMOCAR_DIV] + ' boxheight-align-item" data-car="' + list.CAR_NAME + '" data-area="' + list.area + '" data-store="' + list.shop_name + '" data-democar-flg="' + democar_flg[list.DEMOCAR_DIV] + '">';
18066        democarListHtml += '<div class="democar-list clearfix"><div class="democar-name clearfix boxheight-align-item-element"><div class="democar-name__text">';
18067
18068        if (list.CAR_NAME) {
18069          democarListHtml += '<div class="democar-name__text-main">' + list.CAR_NAME + '</div>';
18070        } else {
18071          democarListHtml += '<div class="democar-name__text-main">-</div>';
18072        }
18073
18074
18075        //総排気量
18076        if (list.TOTAL_DISPLACEMENT) {
18077          // T_DMS-96238 ランクル排気書き換え対応
18078          // 対象の車両型式(CAR_STYLE)
18079          var targetCarStyleList = ["3BA-VJA300W-GNUZZ", "3BA-VJA300W-GNUVZ", "3BA-VJA300W-GNUAZ", "3BA-VJA300W-GMUGZ", "3BA-VJA300W-GNUSZ"];
18080          var _carStyle = list.CAR_STYLE;
18081          var _changeFlg = false;
18082
18083          for (var num = 0; num < targetCarStyleList.length; num++) {
18084            var targetCarStyleItem = targetCarStyleList[num];
18085            if (targetCarStyleItem === _carStyle) {
18086              _changeFlg = true;
18087            }
18088          }
18089
18090          var total_displacement;
18091          if (_changeFlg) {
18092            total_displacement = "3.5";//固定値
18093          } else {
18094            var threshold = 660; //閾値
18095            var total_displacement_org = list.TOTAL_DISPLACEMENT / 1000;
18096            if (list.TOTAL_DISPLACEMENT > threshold) {
18097              var n = 1; // 小数点第n位まで残す
18098              total_displacement = (Math.round(total_displacement_org * Math.pow(10, n)) / Math.pow(10, n)).toFixed(1);
18099            } else {
18100              var n = 2; // 小数点第n位まで残す
18101              total_displacement = (Math.round(total_displacement_org * Math.pow(10, n)) / Math.pow(10, n)).toFixed(2);
18102            }
18103          }
18104        }
18105
18106
18107        //パネルレイアウト時
18108        if (list.DRIVE_SYSTEM) {
18109          democarListHtml += '<div class="democar-name__text-sub">' + list.DRIVE_SYSTEM + ' / ';
18110        } else {
18111          democarListHtml += '<div class="democar-name__text-sub">- / ';
18112        }
18113
18114        if (list.TOTAL_DISPLACEMENT !== '0.0' && list.TOTAL_DISPLACEMENT) {
18115          democarListHtml += total_displacement + 'L / ';
18116        } else {
18117          democarListHtml += '- / ';
18118        }
18119
18120        if (list.RIDE_MEMBER_ADULT) {
18121          democarListHtml += + list.RIDE_MEMBER_ADULT + '人乗り</div></div>';
18122        } else {
18123          democarListHtml += '-</div></div>';
18124        }
18125
18126
18127
18128        // 車種画像
18129
18130        if (list.list_image_url) {
18131
18132          democarListHtml += '<div class="democar-name__pic"><img class="" src="' + list.list_file.url + '" alt="' + list.list_file.alt + '"></div>';
18133
18134        } else { 
18135
18136          if (list.image_url === null || !list.image_url) {
18137            democarListHtml += '<div class="democar-name__pic"><img class="" src="https://toyota.jp/pages/contents/car_image/model/' + carname_en + '/car.png" alt=""><span class="notes">※代表グレード/カラー</span></div>';
18138          } else {
18139
18140            $img_url = list.image_url;
18141
18142            if (list.image_url.indexOf('welcab/car_image') !== -1) {
18143              var catalog_cd = list.CATALOG_CD;
18144              var generation_no = ("000" + list.GENERATION_NO).slice(-3);;
18145
18146              democarListHtml += '<div class="democar-name__pic" data-image_check_type="2" data-generation_no="' + generation_no + '" data-catalog_cd="' + catalog_cd + '"><img class="sp-flg-w" src="' + list.image_url + '" alt=""></div>';
18147            } else {
18148              democarListHtml += '<div class="democar-name__pic" data-image_check_type="1"><img class="" src="' + list.image_url + '" alt=""></div>';
18149            }
18150          }
18151          
18152        }
18153
18154
18155        if (list.free_comment || list.detail1_image_url || list.detail2_image_url || list.detail3_image_url) {
18156          democarListHtml += '<div class="democar-name__btnWrap">';
18157          democarListHtml += '<div class="democar-name__moreinfoBtn key-color-2-text-' + c2txt + '  key-color-2-bg-' + c2bg + '">車両詳細<img src="/assets/a/images/democar-exhibitioncar-0001/arrow/' + pageDesignId + '/' + c2txt + '.png" alt=""></div>';
18158          democarListHtml += '</div>';
18159        }
18160        
18161
18162
18163
18164        democarListHtml += '</div>';  // /.democar-name
18165
18166
18167
18168
18169
18170        democarListHtml += '<div class="democar-panel-wrap boxheight-align-item-element clearfix"><div class="democar-grade democar-panel">';
18171        democarListHtml += '<p class="democar-item-name  key-color-6-text-' + c6txt + '">グレード</p>';
18172
18173        // グレード名
18174        if (!list.GRADE_NAME || list.GRADE_NAME === "  ") {
18175          democarListHtml += '<p class="democar-item-text">-</p></div>';
18176        } else {
18177          democarListHtml += '<p class="democar-item-text">' + list.GRADE_NAME + '</p></div>';
18178        }
18179
18180
18181        democarListHtml += '<div class="democar-engin democar-panel sp">';
18182        democarListHtml += '<p class="democar-item-name  key-color-6-text-' + c6txt + '">エンジンタイプ<span>/駆動方式/</span><span>トランスミッション</span><span class="show-panelLayout">/排気量</span></p>';
18183
18184
18185        // エンジンタイプ/駆動方式/ミッションタイプ/排気量
18186        //EG_TYPEが定義外の数値だった場合
18187        if (!engine_id_list[list.EG_TYPE]) {
18188          engine_id_list[list.EG_TYPE] = "- ";
18189        }
18190
18191        var transmissionName;
18192        if (list.transmission_type_name == null || !list.transmission_type_name) {
18193          transmissionName = " -";
18194        } else {
18195          transmissionName = list.transmission_type_name;
18196        }
18197
18198
18199        var list_total_displacement = (list.TOTAL_DISPLACEMENT !== '0.0' && list.TOTAL_DISPLACEMENT) ? total_displacement + 'L' : "-";
18200
18201        //駆動方式が空もしくはnull
18202        if (list.EG_TYPE && list.DRIVE_SYSTEM == null || !list.DRIVE_SYSTEM) {
18203          democarListHtml += '<p class="democar-item-text">' + engine_id_list[list.EG_TYPE] + '<span> -</span><span>' + transmissionName + '</span><span class="show-listLayout">' + list_total_displacement + '</span></p></div>';
18204          //エンジンタイプが空もしくはnull
18205        } else if (list.EG_TYPE == null || !list.EG_TYPE && list.DRIVE_SYSTEM) {
18206          democarListHtml += '<p class="democar-item-text">- <span>' + list.DRIVE_SYSTEM + '</span><span>' + transmissionName + '</span><span class="show-listLayout">' + list_total_displacement + '</span></p></div>';
18207          //エンジンタイプ、駆動方式両方が空もしくはnull
18208        } else if (list.EG_TYPE && list.DRIVE_SYSTEM) {
18209          democarListHtml += '<p class="democar-item-text">' + engine_id_list[list.EG_TYPE] + '<span>' + list.DRIVE_SYSTEM + '</span><span>' + transmissionName + '</span><span class="show-listLayout">' + list_total_displacement + '</span></p></div>';
18210        } else {
18211          democarListHtml += '<p class="democar-item-text">-</p></div>';
18212        }
18213
18214
18215
18216        democarListHtml += '<div class="democar-color democar-panel sp">';
18217
18218
18219        democarListHtml += '<p class="democar-item-name  key-color-6-text-' + c6txt + '">カラー</p>';
18220
18221
18222        // カラー
18223        if (list.COLOR_NAME) {
18224          democarListHtml += '<p class="democar-item-text">' + list.COLOR_NAME + '</p></div></div>';
18225        } else {
18226          democarListHtml += '<p class="democar-item-text">-</p></div></div>';
18227        }
18228
18229
18230
18231        democarListHtml += '<div class="democar-store clearfix boxheight-align-item-element"><div class="democar-store__info">';
18232
18233
18234        //shop_name空対応
18235        if (!list.shop_name) { list.shop_name = "-"; }
18236        if (mode == "iframe") {
18237          if (list.jp_shop_url) {
18238            democarListHtml += '<p class="democar-item-name2  key-color-6-text-' + c6txt + '">配備店舗</p>';
18239            democarListHtml += '<p class="democar-store__info-name"><a href="' + list.jp_shop_url + 'index.html">' + list.shop_name + '</a></p>';
18240          } else {
18241            democarListHtml += '<p class="democar-store__info-name">' + list.shop_name + '</p>';
18242          }
18243        } else {
18244          if (list.shop_url != null && list.shop_url) {
18245            democarListHtml += '<p class="democar-item-name2  key-color-6-text-' + c6txt + '">配備店舗</p>';
18246            democarListHtml += '<p class="democar-store__info-name"><a href="' + list.shop_url + '">' + list.shop_name + '</a></p>';
18247          } else {
18248            democarListHtml += '<p class="democar-store__info-name">' + list.shop_name + '</p>';
18249          }
18250        }
18251
18252
18253        if (list.shop_tel != "" && list.shop_tel[0].tel_num != null) {
18254
18255          democarListHtml += '<p class="democar-store__info-tel"><img src="/assets/a/images/democar-exhibitioncar-0001/icon/democar-store__info-tel-icon.png" alt=""><a href="tel:' + list.shop_tel[0].tel_num + '" data-galabel="' + list.shop_name + ' : ' + list.shop_tel[0].tel_num + ' (' + pageTitle + '_試乗車・展示車(データ参照))">' + list.shop_tel[0].tel_num + '</a></p>';
18256        } else {
18257          democarListHtml += '<p class="democar-store__info-tel">&nbsp;</p>';
18258        }
18259
18260        if (list.address) {
18261          democarListHtml += '<p class="democar-store__info-add">';
18262          democarListHtml += '<img src="/assets/a/images/democar-exhibitioncar-0001/icon/democar-store__info-add-icon.png" alt="">' + list.address + '</p>';
18263        }
18264
18265        if (mode == "iframe") {
18266          if (list.jp_shop_url) {
18267            democarListHtml += '<p class="democar-store__info-link  key-color-1-text-' + c1txt + ' key-color-1-bg-' + c1bg + '"><a href="' + list.jp_shop_url + 'index.html">店舗詳細<img src="/assets/a/images/democar-exhibitioncar-0001/arrow/' + pageDesignId + '/' + c1txt + '.png" alt=""></a></p></div>';
18268          } else {
18269            democarListHtml += '</div>';
18270          }
18271        } else {
18272          if (list.shop_url != null) {
18273            democarListHtml += '<p class="democar-store__info-link  key-color-1-text-' + c1txt + ' key-color-1-bg-' + c1bg + '"><a href="' + list.shop_url + '">店舗詳細<img src="/assets/a/images/democar-exhibitioncar-0001/arrow/' + pageDesignId + '/' + c1txt + '.png" alt=""></a></p></div>';
18274          } else {
18275            democarListHtml += '</div>';
18276          }
18277        }
18278
18279
18280        if (list.shoplist_cms_file.url) {
18281          democarListHtml += '<div class="democar-store__pic"><img src="' + list.shoplist_cms_file.url + '" alt=""></div></div>';
18282        } else {
18283          democarListHtml += '<div class="democar-store__pic"></div></div>';
18284        }
18285
18286
18287        //試乗車・展示車フラグ
18288        if (list.DEMOCAR_DIV === "1") {
18289
18290          //即時予約ボタン表示制御
18291          if (list.online_reserve_flg === "1" && app_version >= 2) {
18292            democarListHtml += '<div class="online-reserve key-color-3-bg-' + c3bg + '">';
18293            if (document.URL.match("/form_load/")) {
18294              democarListHtml += '<a href="/form_load/' + list.SALE_OFFICE_CD + '/onlinersv/?CAR_NUMBER=' + list.CAR_NUMBER + '&IMAGE_PATH="';
18295            } else if (document.URL.match("/form/democarlist")) {
18296              democarListHtml += '<a href="/form/onlinersv?CAR_NUMBER=' + list.CAR_NUMBER + '&IMAGE_PATH="';
18297            } else {
18298              democarListHtml += '<a href="/form/onlinersv?CAR_NUMBER=' + list.CAR_NUMBER + '&UNIT_ID=' + unit_id + '&IMAGE_PATH="';
18299            }
18300            democarListHtml += ' class="key-color-3-text-' + c3txt + '">即時予約<img src="/assets/a/images/democar-exhibitioncar-0001/arrow/' + pageDesignId + '/' + c3txt + '.png" alt=""></a></div>';
18301          } else {
18302            var _btnText = "リクエスト予約";
18303            if (app_version < 2) {
18304              _btnText = "試乗予約する"
18305            }
18306            democarListHtml += '<div class="democar-reserve  key-color-3-bg-' + c3bg + '">';
18307            if (document.URL.match("/form_load/")) {
18308              democarListHtml += '<a href="/form_load/' + list.SALE_OFFICE_CD + '/democar/?CAR_NUMBER=' + list.CAR_NUMBER + '"';
18309            } else if (document.URL.match("/form/democarlist")) {
18310              democarListHtml += '<a href="/form/democar?CAR_NUMBER=' + list.CAR_NUMBER + '"';
18311            } else {
18312              democarListHtml += '<a href="/form/democar?CAR_NUMBER=' + list.CAR_NUMBER + '&UNIT_ID=' + unit_id + '"';
18313            }
18314            democarListHtml += ' class="key-color-3-text-' + c3txt + '">' + _btnText + '<img src="/assets/a/images/democar-exhibitioncar-0001/arrow/' + pageDesignId + '/' + c3txt + '.png" alt=""></a></div>';
18315          }
18316        } else {
18317          democarListHtml += '<div class="democar-exhibition">展示車のみ</div>';
18318        }
18319
18320
18321        democarListHtml += '</div>'; // ./democar-list
18322
18323
18324
18325
18326        // ここに車両詳細用のモーダルテキスト(free_comment)が入る
18327        if (list.free_comment) {
18328          var freeComment = list.free_comment.replace(/\r?\n/g, '<br>')
18329          democarListHtml += '<div class="free_comment modal_text">' + freeComment + '</div>';
18330        }
18331        
18332        
18333        if (list.detail1_image_url || list.detail2_image_url || list.detail3_image_url) { //画像URLのみ返却する変数で有無チェック
18334          // ここに車両詳細用のモーダルスライド画像(detail[1~3]_file)が入る
18335          democarListHtml += '<div class="modal_slide"><ul class="modal_slide__list">';
18336          //url,altを返却するobjを参照
18337          if(list.detail1_file.url) democarListHtml += `<li class="modal_slide__item"><img alt="${list.detail1_file.alt}" src="${list.detail1_file.url}" /></li>`;
18338          if(list.detail2_file.url) democarListHtml += `<li class="modal_slide__item"><img alt="${list.detail2_file.alt}" src="${list.detail2_file.url}" /></li>`;
18339          if(list.detail3_file.url) democarListHtml += `<li class="modal_slide__item"><img alt="${list.detail3_file.alt}" src="${list.detail3_file.url}" /></li>`;
18340          democarListHtml += '</ul></div>';
18341        }
18342
18343        democarListHtml += '</div>'; // ./democar-list-wrap
18344
18345
18346        insertTarget.append(democarListHtml);
18347
18348        var j = $(".democar-exhibitioncar-0001 .democar-name__pic img").length;
18349        var k = j - 1; //配列のindex
18350        // console.log(k);
18351
18352
18353        var image_check_type = $($(".democar-exhibitioncar-0001 .democar-name__pic")[k]).attr("data-image_check_type");
18354        var $img_path_1 = $($(".democar-exhibitioncar-0001 .democar-name__pic img")[k]).attr("src");
18355        // console.log($img_path_1);
18356
18357
18358        var $img_path_2;
18359        if ($($(".democar-exhibitioncar-0001 .democar-name__pic img")[k]).hasClass("sp-flg-w")) {
18360
18361          //ウェルキャブの初期パスに画像が無かった時のパス生成
18362          var img_wrap = $($(".democar-exhibitioncar-0001 .democar-name__pic")[k]);
18363          generatePath(img_wrap);
18364
18365
18366          //処理が無いため初期パスを設定している
18367          $img_path_2 = $img_path_1;
18368
18369        } else {
18370          $img_path_2 = $img_path_1.substring(0, $img_path_1.lastIndexOf("_")) + ".png";
18371        }
18372        // console.log($img_path_2);
18373
18374
18375
18376        // welcab時の画像パス生成
18377        var path_parts_array;
18378        var image_path_array;
18379        function generatePath(_obj) {
18380
18381          // var origin_image_path = $(".democar-name__pic img").attr("src");
18382          // var generation_no = $(".democar-name__pic").attr("data-generation_no"); //世代
18383          // var catalog_cd = $(".democar-name__pic").attr("data-catalog_cd"); //カタログコード
18384          // var initial_catalog_cd_count = Number(catalog_cd);
18385          var origin_image_path = _obj.find("img").attr("src");
18386          var generation_no = _obj.attr("data-generation_no"); //世代
18387          var catalog_cd = _obj.attr("data-catalog_cd"); //カタログコード
18388          var initial_catalog_cd_count = Number(catalog_cd);
18389          var remaining_generation_no_count = generation_no - 1;//初期の世代番号の1つ前
18390          var max_catalog_cd = 40;
18391
18392          var count_num; //パスパターン総数
18393          if (remaining_generation_no_count >= 1) {
18394            count_num = max_catalog_cd + initial_catalog_cd_count;
18395          } else {
18396            count_num = initial_catalog_cd_count;
18397          }
18398
18399
18400          path_parts_array = [];
18401          image_path_array = [];
18402
18403          for (var i = 0; i < count_num; i++) {
18404            if (catalog_cd >= 1) {
18405              catalog_cd--;
18406              var parts_catalog_cd = catalog_cd + 1;
18407
18408              parts_catalog_cd = ("000" + parts_catalog_cd).slice(-3);
18409              path_parts_array.push(generation_no + "_" + parts_catalog_cd);
18410
18411              if (catalog_cd === 0) {
18412                catalog_cd = 40;
18413                generation_no--;
18414                generation_no = ("000" + generation_no).slice(-3);
18415              }
18416            }
18417          }
18418
18419          for (var j = 0; j < path_parts_array.length; j++) {
18420            var origin_path_split = origin_image_path.split("/");
18421            var origin_path_split_length = origin_path_split.length;
18422            var change_target_path = origin_path_split[origin_path_split_length - 2];
18423            var img_path = origin_image_path.replace(change_target_path, path_parts_array[j]);
18424            image_path_array.push(img_path);
18425          }
18426
18427        }
18428
18429
18430        // console.log(path_parts_array);
18431        // console.log(image_path_array);
18432
18433
18434
18435
18436
18437
18438        var $img_path_3;
18439        if ($($(".democar-exhibitioncar-0001 .democar-name__pic img")[k]).hasClass("sp-flg-w")) {
18440          // var src_split2 = $img_path_2.split("/");
18441          // var _path_carname = src_split2[4];
18442          var $img_path_3 = "https://toyota.jp/pages/contents/car_image/model/" + carname_en + "/car.png";
18443        } else {
18444          var $img_path_parts = $img_path_1.substring(0, $img_path_1.lastIndexOf("/"));
18445          $img_path_3 = $img_path_parts.substring(0, $img_path_parts.lastIndexOf("/")) + "/car.png";
18446        }
18447        // console.log($img_path_3);
18448
18449
18450
18451
18452        var $img_path_4 = "https://toyota.jp/pages/contents/include/common/image/tjp2016/parts/history_summary/no-result.png";
18453        // console.log($img_path_4);
18454
18455
18456
18457        var imgobj;
18458        if (!$($(".democar-exhibitioncar-0001 .democar-name__pic img")[k]).hasClass("sp-flg-w")) {
18459          imgobj = [$img_path_1, $img_path_2, $img_path_3, $img_path_4];
18460        } else {
18461          imgobj = [$img_path_1, image_path_array, $img_path_3, $img_path_4];
18462        }
18463
18464        SetPromiseImage(imgobj, k, image_check_type);
18465
18466
18467      }
18468
18469      DMS.checkImage($(".unit-wrapper .unit-base .democar-exhibitioncar-0001"));
18470
18471
18472      $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .online-reserve a").click(function () {
18473        if ($("form").length > 0) {
18474          console.log($(this).attr("href"));
18475          $("form").attr("action", $(this).attr("href"));
18476          $("form").submit();
18477          return false;
18478        } else {
18479        }
18480
18481      });
18482
18483
18484      showModal();
18485
18486
18487    }
18488
18489
18490    function SetPromiseImage(imgobj, index, check_type) {
18491      var d1 = new $.Deferred();
18492      d1.resolve();
18493      d1.promise()
18494        .then(function () {
18495          var d2 = new $.Deferred();
18496          var image = new Image();
18497          image.originSrc = imgobj[0];
18498          $(image).on('load', function () {
18499            resultPath = $(this)[0]["originSrc"];
18500            // resultPath = $(this).context.originSrc;
18501            if (check_type != 2) {
18502              $($(".democar-exhibitioncar-0001 .democar-name__pic img")[index]).attr("src", resultPath);
18503
18504              var addRsvParamHrefElm = $($(".democar-exhibitioncar-0001 .democar-name__pic")[index]).parent().parent().find(".online-reserve a");
18505              $(addRsvParamHrefElm).attr('href', $(addRsvParamHrefElm).attr('href') + resultPath);
18506            } else {
18507              $($(".democar-exhibitioncar-0001 .democar-name__pic img")[index]).attr("src", resultPath).after('<span class="notes">※写真のモデル、カラーは、実際の車両と異なります。</span>');
18508
18509              var addRsvParamHrefElm = $($(".democar-exhibitioncar-0001 .democar-name__pic")[index]).parent().parent().find(".online-reserve a");
18510              $(addRsvParamHrefElm).attr('href', $(addRsvParamHrefElm).attr('href') + resultPath);
18511            }
18512            $(document).trigger("democarFrameUpdate");
18513          });
18514
18515          $(image).on('error', function () {
18516            d2.resolve();
18517          });
18518          image.src = imgobj[0];
18519
18520          return d2;
18521        })
18522        .then(function () {
18523
18524          if (check_type == 2) {//ウェルキャブ車だった時の画像ロード
18525            var d3 = new $.Deferred();
18526
18527            var image_arry = imgobj[1];
18528            var image_length = image_arry.length;
18529            var count = 0;
18530
18531            load();
18532
18533            function load() {
18534
18535              var image2 = new Image();
18536              var loadImageName = image_arry[count];
18537
18538              image2.onload = function () {
18539                resultPath = $(this).context.src;
18540                $($(".democar-exhibitioncar-0001 .democar-name__pic img")[index]).attr("src", resultPath).after('<span class="notes">※写真のモデル、カラーは、実際の車両と異なります。</span>');
18541
18542                var addRsvParamHrefElm = $($(".democar-exhibitioncar-0001 .democar-name__pic")[index]).parent().parent().find(".online-reserve a");
18543                $(addRsvParamHrefElm).attr('href', $(addRsvParamHrefElm).attr('href') + resultPath);
18544
18545                $(document).trigger("democarFrameUpdate");
18546              };
18547
18548              image2.onerror = function () {
18549                count++;
18550                if (count >= image_length) {
18551                  //配列に読み込める画像がなかったので処理を抜ける
18552                  load_failure();
18553                } else {
18554                  load();
18555                }
18556              };
18557              image2.src = loadImageName;
18558            }
18559
18560            function load_failure() {
18561              d3.resolve();
18562            }
18563            return d3;
18564
18565
18566          } else {//welcab車じゃなかった場合の画像ロード
18567            var d3 = new $.Deferred();
18568            var image2 = new Image();
18569            image2.originSrc = imgobj[1];
18570
18571            $(image2).on('load', function () {
18572              resultPath = $(this)[0]["originSrc"];
18573              // resultPath = $(this).context.originSrc;
18574              $($(".democar-exhibitioncar-0001 .democar-name__pic img")[index]).attr("src", resultPath);
18575
18576              var addRsvParamHrefElm = $($(".democar-exhibitioncar-0001 .democar-name__pic")[index]).parent().parent().find(".online-reserve a");
18577              $(addRsvParamHrefElm).attr('href', $(addRsvParamHrefElm).attr('href') + resultPath);
18578
18579              $(document).trigger("democarFrameUpdate");
18580            });
18581
18582            $(image2).on('error', function () {
18583              // console.log('error');
18584              d3.resolve();
18585            });
18586
18587            image2.src = imgobj[1];
18588
18589            return d3;
18590          }
18591        })
18592        .then(function () {
18593          var image3 = new Image();
18594          image3.originSrc = imgobj[2];
18595
18596          $(image3).on('load', function () {
18597            resultPath = $(this)[0]["originSrc"];
18598            // resultPath = $(this).context.originSrc;
18599
18600            if (check_type != 2) {
18601              $($(".democar-exhibitioncar-0001 .democar-name__pic img")[index]).attr("src", resultPath).after('<span class="notes">※代表グレード/カラー</span>');
18602
18603              var addRsvParamHrefElm = $($(".democar-exhibitioncar-0001 .democar-name__pic")[index]).parent().parent().find(".online-reserve a");
18604              $(addRsvParamHrefElm).attr('href', $(addRsvParamHrefElm).attr('href') + resultPath);
18605
18606            } else {
18607              $($(".democar-exhibitioncar-0001 .democar-name__pic img")[index]).attr("src", resultPath).after('<span class="notes">※写真のモデル、カラーは、実際の車両と異なります。</span>');
18608
18609              var addRsvParamHrefElm = $($(".democar-exhibitioncar-0001 .democar-name__pic")[index]).parent().parent().find(".online-reserve a");
18610              $(addRsvParamHrefElm).attr('href', $(addRsvParamHrefElm).attr('href') + resultPath);
18611
18612            }
18613            $(document).trigger("democarFrameUpdate");
18614          });
18615
18616          $(image3).on('error', function () {
18617            $($(".democar-exhibitioncar-0001 .democar-name__pic img")[index]).attr("src", imgobj[3]);
18618
18619            var addRsvParamHrefElm = $($(".democar-exhibitioncar-0001 .democar-name__pic")[index]).parent().parent().find(".online-reserve a");
18620            $(addRsvParamHrefElm).attr('href', $(addRsvParamHrefElm).attr('href') + imgobj[3]);
18621
18622
18623          });
18624
18625          image3.src = imgobj[2];
18626        })
18627
18628    }
18629
18630
18631
18632
18633    //リスト・パネル選択時のcurrent設定
18634    function changeBntInitSetClass() {
18635      if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0001").hasClass('democar-list-view')) {
18636        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-change-btn.view-list").addClass('current');
18637      } else {
18638        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-change-btn.view-panel").addClass('current');
18639      }
18640    }
18641    changeBntInitSetClass();
18642
18643    //読み込み時のフェード
18644    function panelDelayDisplay() {
18645      var _target = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001-wrap");
18646      var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .more-btn");
18647      $more_btn.css({ "opacity": "0" });
18648      setTimeout(function () {
18649        _target.animate({
18650          opacity: "1"
18651        });
18652        $more_btn.animate({
18653          opacity: "1"
18654        });
18655      }, 800);
18656    }
18657    panelDelayDisplay();
18658
18659
18660    //表示切替
18661    function viewChange() {
18662      var list_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list");
18663      var pabel_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel");
18664      var _thisUnit = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001");
18665      list_btn.on("click", function () {
18666        if (!_thisUnit.hasClass('.democar-exhibitioncar-0001 democar-list-view')) {
18667          _thisUnit.removeClass('.democar-exhibitioncar-0001 democar-panel-view');
18668          _thisUnit.addClass('.democar-exhibitioncar-0001 democar-list-view');
18669          $(document).trigger("democarFrameUpdate");
18670        }
18671      });
18672      pabel_btn.on("click", function () {
18673        if (!_thisUnit.hasClass('.democar-exhibitioncar-0001 democar-panel-view')) {
18674          _thisUnit.removeClass('.democar-exhibitioncar-0001 democar-list-view');
18675          _thisUnit.addClass('.democar-exhibitioncar-0001 democar-panel-view');
18676          $(document).trigger("democarFrameUpdate");
18677        }
18678      });
18679
18680    }
18681    viewChange();
18682
18683
18684    //表示選択ボタン画像切替
18685    function viewBtnChange() {
18686      if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list").hasClass('current')) {
18687        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src').replace(/--off/g, '--on'));
18688      } else {
18689        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src').replace(/--on/g, '--off'));
18690      }
18691
18692      if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel").hasClass('current')) {
18693        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src').replace(/--off/g, '--on'));
18694      } else {
18695        $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src').replace(/--on/g, '--off'));
18696      }
18697
18698      var _targetBtn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-change-box .view-change-btn");
18699      _targetBtn.on("click", function () {
18700
18701
18702        var $this = $(this);
18703        if (!$this.hasClass('current')) {
18704          _targetBtn.removeClass('current');
18705          $this.addClass('current');
18706        }
18707        if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list").hasClass('current')) {
18708          $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src').replace(/--off/g, '--on'));
18709        } else {
18710          $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-list img.bt_l_bg").attr('src').replace(/--on/g, '--off'));
18711        }
18712        if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel").hasClass('current')) {
18713          $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src').replace(/--off/g, '--on'));
18714        } else {
18715          $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src', $(".unit-wrapper .unit-base .democar-exhibitioncar-0001 .view-panel img.bt_r_bg").attr('src').replace(/--on/g, '--off'));
18716        }
18717      });
18718    }
18719    viewBtnChange();
18720
18721
18722
18723
18724    //試乗予約へID追加
18725    // $(".unit-wrapper .unit-base .democar-exhibitioncar-0001").each(function (index, el) {
18726    //     getUnitId($(this));
18727    // });
18728
18729    // function getUnitId(target) {
18730    //     var unit_unique_id = target.parent().parent().attr("id");
18731
18732    //     var insertTarget = target.find(".democar-reserve a");
18733
18734    //     insertTarget.each(function () {
18735    //         var initUrl = $(this).attr("href");
18736    //         var parmId = "&unit-wrapper_id=" + unit_unique_id;
18737    //         var valid_url = initUrl + parmId;
18738    //         $(this).attr("href", valid_url);
18739    //     });
18740
18741    // }
18742
18743    function addIframeClass() {
18744
18745      if ($('.democar-exhibitioncar-0001').parent(".unit-base").data("mode") == "iframe") {
18746        $(".democar-exhibitioncar-0001 .democar-store__info-name").addClass('iframe_link');
18747        $(".democar-exhibitioncar-0001 .democar-store__info-name a").attr('target', '_blank');
18748        $(".democar-exhibitioncar-0001 .democar-store__info-link").addClass('iframe_link');
18749        $(".democar-exhibitioncar-0001 .democar-store__info-link a").attr('target', '_blank');
18750      }
18751    }
18752
18753
18754    function keyInputDropDown() {
18755      var sizeDetect = $("#size-detect").css("font-family");
18756      //load時SPだった場合、key入力によるプルダウンを実行しない
18757      if (sizeDetect != "sp") {
18758        $('.democar-exhibitioncar-0001 .sort-list-form .ui.dropdown').dropdown(
18759          {
18760            clearable: true,
18761            match: 'text',
18762            fullTextSearch: true,
18763            forceSelection: false,
18764            message: {
18765              noResults: '該当車種はありません'
18766            }
18767          }
18768        );
18769
18770        //resetボタンを押したときに表示されている値をclearする
18771        $(".democar-exhibitioncar-0001 .sort-btn .btn-reset").on("click", function () {
18772          $(".democar-exhibitioncar-0001 .sort-list-form .ui.dropdown").dropdown("clear");
18773          $(".democar-exhibitioncar-0001 .sort-list-form .dropdown.icon").removeClass("clear");
18774        });
18775      } else {
18776        $(".democar-exhibitioncar-0001 .sort-list-form .ui.dropdown .spHide").remove();
18777      }
18778
18779    }
18780
18781
18782
18783
18784
18785
18786
18787
18788
18789    function showModal() {
18790      var _modalOpenBtn = $(".democar-exhibitioncar-0001 .democar-name__moreinfoBtn");
18791      var close = $('.democar-exhibitioncar-0001 .modal-close');
18792      var container = $('.democar-exhibitioncar-0001 .modal-container');
18793
18794      _modalOpenBtn.off('click');
18795      _modalOpenBtn.on("click", (e) => {
18796        var _target = e.currentTarget;
18797        //クリックした要素のモーダルテキストを取得
18798        var _modalText = $(_target).parents(".democar-list-wrap").find(".free_comment").html();
18799        var _modalSlide = $(_target).parents(".democar-list-wrap").find(".modal_slide__list").html();
18800        var _thisUnit = $(_target).parents(".democar-exhibitioncar-0001");
18801        
18802        
18803        // コメントが登録されていた時
18804        if (_modalText) { 
18805          // モーダルにテキストを突っ込む
18806          _thisUnit.find(".modal-content p").html(_modalText);
18807          _thisUnit.find(".modal-body").addClass("js-comment")
18808        }
18809
18810
18811        // 詳細画像が登録されていた時
18812        if (_modalSlide) {
18813          _thisUnit.find(".modal-body").addClass("js-slide")
18814          _thisUnit.find(".modal-content .modal .slide").html(_modalSlide);
18815        }
18816        // container.addClass('active');
18817
18818        //slickをセット
18819        $('.slick').slick({
18820          arrows: true,
18821          prevArrow: '<div class="slide-arrow prev-arrow"></div>',
18822          nextArrow: '<div class="slide-arrow next-arrow"></div>'
18823        });
18824
18825        
18826        container.fadeIn(200)
18827        $('html, body').css('overflow', 'hidden').addClass("showed-modal");
18828        return false;
18829      })
18830      //閉じるボタンをクリックしたらモーダルを閉じる
18831      close.on('click', () => {
18832
18833        if (!$('html, body').hasClass("showed-modal")) return;
18834
18835        container.removeClass('active');
18836        container.fadeOut(200, () => {
18837          _reset();
18838        })
18839      });
18840
18841      //モーダルの外側をクリックしたらモーダルを閉じる
18842      $(document).on('click', function (e) {
18843
18844        if (!$('html, body').hasClass("showed-modal")) return;
18845
18846        if (!$(e.target).closest('.modal-body').length) {
18847          container.removeClass('active');
18848          container.fadeOut(200, () => {
18849            _reset();
18850          })
18851        }
18852      });
18853
18854      function _reset() {
18855        $(".democar-exhibitioncar-0001 .slick").slick('unslick');
18856        $('html, body').css('overflow', 'visible');
18857        $(".democar-exhibitioncar-0001 .modal-body").removeClass("js-comment");
18858        $(".democar-exhibitioncar-0001 .modal-body").removeClass("js-slide");
18859        $(".democar-exhibitioncar-0001 .modal-content p").html("");
18860        $(".democar-exhibitioncar-0001 .modal-content .modal .slide").html("");
18861      }
18862
18863    }
18864
18865
18866    // }
18867  }
18868
18869});$(function () {
18870  if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0002").length > 0) {
18871    // 初期時非表示
18872    var window_height = $(window).height();
18873    var democar_init_height = window_height * 0.5;
18874    var iframe_flg = false;
18875
18876    $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").parent(".unit-base").css({ position: "relative" });
18877    $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").before('<div class="loading_democar"><img src="/assets/a/images/democar-exhibitioncar-0002/loading.png"></div>');
18878
18879    $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").css({
18880      opacity: 0,
18881      height: democar_init_height,
18882    });
18883
18884    if ($(".democar-exhibitioncar-0002").parent(".unit-base").data("mode") == "iframe") {
18885
18886			/**
18887			 * iframe時にshoworderをURLパラメータから取得
18888			 * */
18889			iframe_flg = true;
18890			var queryString = document.location.search;
18891			var params = new URLSearchParams(queryString);
18892      var paramValue = params.get('showorder');
18893      
18894
18895      var defWindowInfo = {
18896        width: 0,
18897        height: 0,
18898        isSizeUpdate: false,
18899        isContentsReady: false,
18900        dmsIframeFormMessage: true,
18901        isContentsLoad: false, //iframe内でページ遷移が発生したときに投げる
18902      };
18903
18904      var windowInfo = $.extend({}, defWindowInfo);
18905      windowInfo = $.extend({}, defWindowInfo);
18906      windowInfo.isContentsReady = true;
18907
18908      $(window).resize(function () {
18909        windowInfo = $.extend({}, defWindowInfo);
18910        windowInfo.width = $("body").width();
18911        windowInfo.height = $("body").height();
18912        windowInfo.isSizeUpdate = true;
18913        parent.postMessage(windowInfo, "*");
18914      });
18915
18916      $(document).on("democarFrameUpdate", function () {
18917        windowInfo = $.extend({}, defWindowInfo);
18918        windowInfo.width = $("body").width();
18919        windowInfo.height = $("body").height();
18920        windowInfo.isSizeUpdate = true;
18921        parent.postMessage(windowInfo, "*");
18922      });
18923
18924      window.onload = function () {
18925        windowInfo = $.extend({}, defWindowInfo);
18926        windowInfo.width = $("body").width();
18927        windowInfo.height = $("body").height();
18928        windowInfo.isSizeUpdate = true;
18929        windowInfo.isContentsLoad = true;
18930        parent.postMessage(windowInfo, "*");
18931      };
18932    }
18933
18934    // 試乗車2期判定振り分け
18935    var app_version = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").data("app_version");
18936
18937    // チェックボックス
18938    // function changeCheckBtn() {
18939    //   var checkBtn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-check-block .item-check");
18940    //   checkBtn.on("click", function () {
18941    //     var $this = $(this);
18942    //     if ($this.hasClass("active")) {
18943    //       $this.removeClass("active");
18944    //       $this.removeClass($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .item-check").data("activeclass"));
18945    //     } else {
18946    //       $this.addClass("active");
18947    //       $this.addClass($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .item-check").data("activeclass"));
18948    //     }
18949    //   });
18950    // }
18951    // changeCheckBtn();
18952
18953    // dom生成
18954    var noracar_list;
18955    var client_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").data("client_id");
18956
18957    // 環境ドメイン
18958    var envId = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").data("env_id");
18959    var envIdDomain;
18960    if (envId == "development") {
18961      envIdDomain = "https://api.eohp.bfp.co.jp";
18962    } else if (envId == "staging") {
18963      envIdDomain = "https://stg.api.t-dms.jp";
18964    } else if (envId == "checking") {
18965      envIdDomain = "https://api-chk.eohp.bfp.co.jp";
18966    } else if (envId == "production") {
18967      envIdDomain = "https://api.t-dms.jp";
18968    } else if (envId == "democar") {
18969      envIdDomain = "https://api-dem.eohp.bfp.co.jp";
18970    } else if (envId == "holding") {
18971      envIdDomain = "https://api-tmt.eohp.bfp.co.jp";
18972    } else if (envId == "staging2") {
18973      envIdDomain = "https://stg2.api.t-dms.jp";
18974    } else if (envId == "recheck") {
18975      envIdDomain = "https://api-rec.eohp.bfp.co.jp";
18976    }
18977
18978    function changeDataUrlParam() {
18979      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002");
18980      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-btn .btn-search").on("click", function () {
18981        // var series_seq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=carname]").val();
18982        var input_car_name = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=carname]").val();
18983        var area = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=area]").val();
18984        var shop_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=store]").val();
18985        var show_welcab_type = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=welcab]").val();
18986        var demoFlg = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=demoFlg]").val();
18987
18988        $wrap.attr("data-input_car_name", input_car_name);
18989        $wrap.attr("data-area", area);
18990        $wrap.attr("data-shop_id", shop_id);
18991        $wrap.attr("data-show_welcab_type", show_welcab_type);
18992        $wrap.attr("data-demo_flg", demoFlg);
18993      });
18994
18995      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-btn .btn-reset").on("click", function () {
18996        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=carname]").val("");
18997        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=area]").val("");
18998        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=store]").val("");
18999        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=welcab]").val("2");
19000        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=demoFlg]").val("3");
19001
19002
19003        $wrap.attr("data-input_car_name", "");
19004        $wrap.attr("data-area", "");
19005        $wrap.attr("data-shop_id", "");
19006        $wrap.attr("data-show_welcab_type", "2");
19007        $wrap.attr("data-demo_flg", "1");
19008        // $(".sort-check-block .item-check").removeClass("active");
19009        // $(".sort-check-block .item-check").removeClass($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .item-check").data("activeclass"));
19010      });
19011    }
19012    changeDataUrlParam();
19013
19014    function loadRequestUrl() {
19015      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002");
19016      var input_car_name = $wrap.data("input_car_name");
19017      var area = $wrap.data("area");
19018      var shop_id = $wrap.data("shop_id");
19019      var show_welcab_type = $wrap.data("show_welcab_type");
19020      var demoFlg = $wrap.data("demo_flg");
19021      var limit = $wrap.data("limit");
19022      var page = $wrap.attr("data-page");
19023      var area_uri = encodeURIComponent(area);
19024      var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
19025
19026      var requestUrl = envIdDomain + "/democar/" + client_id + "/outmst?democar_showorder_id="+showorder+"&meta_shop_flg=1&car_name=" + input_car_name + "&area=" + area_uri + "&shop_id=" + shop_id + "&welcab_flg=" + show_welcab_type + "&democar_flg=" + demoFlg + "&limit=" + limit + "&page=" + page;
19027      loadDemoCar(requestUrl);
19028    }
19029    loadRequestUrl();
19030
19031    function setRequestUrl() {
19032      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002");
19033      var $list_wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .democar-exhibitioncar-0002-wrap");
19034      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-btn .btn-search").on("click", function () {
19035        $wrap.attr("data-page", "1");
19036        var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .more-btn");
19037        $more_btn.css({ opacity: "0", display: "block" });
19038        $list_wrap.css({ opacity: "0", display: "block" });
19039        setTimeout(function () {
19040          $more_btn.animate({ opacity: "1" }, 300);
19041          $list_wrap.animate({ opacity: "1" }, 300);
19042        }, 200);
19043
19044        var car_list_dom = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .democar-exhibitioncar-0002-wrap");
19045        car_list_dom.empty();
19046
19047        // var series_seq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=carname]").val();
19048        var input_car_name = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=carname]").val();
19049        var area = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=area]").val();
19050        var shop_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=store]").val();
19051        var show_welcab_type = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=welcab]").val();
19052        var demoFlg = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=demoFlg]").val();
19053        var limit = $wrap.data("limit");
19054        var page = $wrap.attr("data-page");
19055        // var democar_flg = "";
19056        // if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-check-block .item-check").hasClass("active")) {
19057        //   democar_flg = 1;
19058        // }
19059        var area_uri = encodeURIComponent(area);
19060
19061        var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
19062
19063        var requestUrl = envIdDomain + "/democar/" + client_id + "/outmst?democar_showorder_id="+showorder+"&meta_shop_flg=1&car_name=" + input_car_name + "&area=" + area_uri + "&shop_id=" + shop_id + "&welcab_flg=" + show_welcab_type + "&democar_flg=" + demoFlg + "&limit=" + limit + "&page=" + page;
19064        loadDemoCar(requestUrl);
19065      });
19066    }
19067    setRequestUrl();
19068
19069    function resetRequestUrl() {
19070      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002");
19071      var $list_wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .democar-exhibitioncar-0002-wrap");
19072      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-btn .btn-reset").on("click", function () {
19073        $wrap.attr("data-page", "1");
19074        var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .more-btn");
19075        // $more_btn.show();
19076        $more_btn.css({ opacity: "0", display: "block" });
19077        $list_wrap.css({ opacity: "0", display: "block" });
19078        setTimeout(function () {
19079          $more_btn.animate({ opacity: "1" }, 300);
19080          $list_wrap.animate({ opacity: "1" }, 300);
19081        }, 200);
19082
19083        var limit = $wrap.data("limit");
19084        var page = $wrap.attr("data-page");
19085        var show_welcab_type = $wrap.attr("data-show_welcab_type");
19086        var car_list_dom = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .democar-exhibitioncar-0002-wrap");
19087        car_list_dom.empty();
19088
19089        var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
19090
19091        var requestUrl = envIdDomain + "/democar/" + client_id + "/outmst?democar_showorder_id="+showorder+"&meta_shop_flg=1&welcab_flg=" + show_welcab_type + "&limit=" + limit + "&page=" + page;
19092        loadDemoCar(requestUrl);
19093      });
19094    }
19095    resetRequestUrl();
19096
19097    function loadMoreCaritem() {
19098      var $wrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002");
19099      var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .more-btn");
19100      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .more-btn a").on("click", function () {
19101        var _page = $wrap.attr("data-page");
19102        _page++;
19103        $wrap.attr("data-page", _page);
19104
19105        // var democar_flg = "";
19106        // if ($(".sort-check-block .item-check").hasClass("active")) {
19107        //   democar_flg = 1;
19108        // }
19109
19110        var total_car_num = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").attr("data-total_car_num");
19111        // var series_seq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").attr("data-series_seq");
19112        var input_car_name = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=carname]").val();
19113        var area = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").attr("data-area");
19114        var shop_id = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").attr("data-shop_id");
19115        var show_welcab_type = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").attr("data-show_welcab_type");
19116        var demoFlg = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 [name=demoFlg]").val();
19117        var limit = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").data("limit");
19118        var page_total = Math.ceil(total_car_num / limit);
19119
19120        var area_uri = encodeURIComponent(area);
19121
19122        var showorder = iframe_flg ? paramValue : $wrap.data("showorder");
19123
19124        var requestUrl = envIdDomain + "/democar/" + client_id + "/outmst?democar_showorder_id="+showorder+"&meta_shop_flg=1&car_name=" + input_car_name + "&area=" + area_uri + "&shop_id=" + shop_id + "&welcab_flg=" + show_welcab_type + "&democar_flg=" + demoFlg + "&limit=" + limit + "&page=" + _page;
19125
19126        var load_completed_flg = false;
19127        if (page_total >= _page) {
19128          // $more_btn.show();
19129          loadDemoCar(requestUrl);
19130          if (page_total == _page) {
19131            load_completed_flg = true;
19132          }
19133        }
19134        if (load_completed_flg) {
19135          $more_btn.hide();
19136        }
19137      });
19138    }
19139    loadMoreCaritem();
19140
19141    var cnt = 0;
19142    var max = 1;
19143
19144    function loadDemoCar(_url) {
19145      $.ajax({
19146        type: "GET",
19147        url: _url,
19148        xhrFields: {
19149          withCredentials: true,
19150        },
19151        dataType: "json",
19152        timeout: 10000,
19153        success: function (noradata) {
19154          jsonLoaded(noradata);
19155
19156          if (initial_load()) {
19157            // setCarnamePullDown(json);
19158            keyInputDropDown();
19159          }
19160        },
19161        error: function (json) {
19162          $(".unit-wrapper .unit-base .loading_democar").remove();
19163          $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").before('<p class="error_text">情報取得に失敗しました</p>');
19164          $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").remove();
19165          $(document).trigger("democarFrameUpdate");
19166        },
19167      });
19168    }
19169
19170    function initial_load() {
19171      cnt++;
19172      if (cnt == max) {
19173        return true;
19174      }
19175      return false;
19176    }
19177
19178    // function setCarnamePullDown(data) {
19179    //   console.log(data);
19180    //   // var carSeq = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").data("series_seq");
19181    //   var car_name_list = [];
19182    //   var car_name_list_origin = [];
19183    //   for (var i = 0; i < data.democar_list.length; i++){
19184    //     var _carName = data.democar_list[i]["car_name"];
19185    //     car_name_list_origin.push(_carName);
19186    //   }
19187
19188    //   // console.log(car_name_list_origin);
19189    //   // 重複を削除したリスト
19190    //   car_name_list = car_name_list_origin.filter(function (x, i, self) {
19191    //     return self.indexOf(x) === i;
19192    //   });
19193    //   // console.log(car_name_list);
19194
19195    //   var carNamePullDownWrap = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-list .sort-carname");
19196    //   for (var i = 0; i < car_name_list.length; i++) {
19197    //     var carPullDown = "";
19198    //     carPullDown += '<option value="' + car_name_list[i] + '">' + car_name_list[i] + '</option>';
19199
19200    //     // if (carSeq == car_name_list[i]["SERIES_SEQ"]) {
19201    //     //   carPullDown += '<option selected value="' + car_name_list[i]["SERIES_SEQ"] + '">' + car_name_list[i]["CAR_NAME"] + "</option>";
19202    //     // } else {
19203    //     //   carPullDown += '<option value="' + car_name_list[i]["SERIES_SEQ"] + '">' + car_name_list[i]["CAR_NAME"] + "</option>";
19204    //     // }
19205    //     carNamePullDownWrap.append(carPullDown);
19206    //   }
19207    // }
19208
19209    function jsonLoaded(noradata) {
19210      car_num = noradata.total;
19211      noracar_list = noradata.democar_list;
19212      var limit = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").data("limit");
19213      // addIframeClass();
19214      // car_name_list = data.car_name_list;
19215      // setDemocarListHtml(noracar_list);
19216
19217      var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .more-btn");
19218
19219      var cnt_flg = true;
19220      if (car_num <= limit) {
19221        $more_btn.hide();
19222        cnt_flg = false;
19223      }
19224
19225      var $label = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .headline--democar-list-view");
19226      var $list_wrapper = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .democar-exhibitioncar-0002-wrap");
19227      var no_data_text = '<p class="error_text">選択された条件で掲載できる情報はございません。</p>';
19228      $(".error_text").remove();
19229
19230      if (car_num == "0") {
19231        $label.hide();
19232        $list_wrapper.hide();
19233        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-area-wrapper").append(no_data_text);
19234      } else {
19235        $label.show();
19236        $list_wrapper.show();
19237        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .error_text").remove();
19238        setDemocarListHtml(noracar_list);
19239        addIframeClass();
19240      }
19241
19242      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").attr("data-total_car_num", car_num);
19243      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .sort-count-info .sort-count .result").html(car_num);
19244      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").parent(".unit-base").css({ position: "static" });
19245      $(".unit-wrapper .unit-base .loading_democar").remove();
19246      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002")
19247        .css({
19248          height: "auto",
19249        })
19250        .animate({
19251          opacity: 1,
19252        });
19253      $(document).trigger("democarFrameUpdate");
19254    }
19255
19256    function setDemocarListHtml(noracar_list) {
19257      var insertTarget = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002-wrap");
19258      var c1txt = insertTarget.data("c1txt");
19259      var c1bg = insertTarget.data("c1bg");
19260      var c2bg = insertTarget.data("c2bg");
19261      var c2txt = insertTarget.data("c2txt");
19262      var c3bg = insertTarget.data("c3bg");
19263      var c3txt = insertTarget.data("c3txt");
19264      var c6txt = insertTarget.data("c6txt");
19265      var pageDesignId = insertTarget.data("designid");
19266      var unit_id = insertTarget.data("unitid");
19267      var pageTitle = $("title").html();
19268      var mode = $(".democar-exhibitioncar-0002").parent().data("mode");
19269
19270      for (var i = 0; i < $(noracar_list).length; i++) {
19271        var _noralist = $(noracar_list)[i];
19272
19273        // console.log(_noralist);
19274
19275        var engine_id_list = {
19276          1: "ガソリン",
19277          2: "ディーゼル",
19278          3: "ハイブリッド",
19279          4: "FCEV",
19280          5: "PHEV",
19281          6: "BEV",
19282          9: "その他",
19283        };
19284
19285        var democar_flg = {
19286          1: "試乗車",
19287          2: "展示車",
19288        };
19289
19290        var democar_flg_class = {
19291          1: "is-democar",
19292          2: "no-democar",
19293        };
19294
19295        //image_url=null時の対応
19296        var carname_en_origin = _noralist.CAR_NAME_EN;
19297        carname_en_origin = String(carname_en_origin);
19298        var carname_en = carname_en_origin.toLowerCase();
19299        carname_en = carname_en.replace(/\s+/g, "");
19300
19301        var democarListHtml = "";
19302
19303        democarListHtml += '<div class="democar-list-wrap ' + democar_flg_class[_noralist.democar_flg] + ' boxheight-align-item" data-car="' + _noralist.car_name + '" data-area="' + _noralist.area + '" data-store="' + _noralist.shop_name + '" data-democar-flg="' + democar_flg[_noralist.democar_flg] + '">';
19304        democarListHtml += '<div class="democar-list clearfix"><div class="democar-name clearfix boxheight-align-item-element"><div class="democar-name__text">';
19305
19306        if (_noralist.car_name) {
19307          democarListHtml += '<div class="democar-name__text-main">' + _noralist.car_name + "</div>";
19308        } else {
19309          democarListHtml += '<div class="democar-name__text-main">-</div>';
19310        }
19311
19312        //総排気量
19313        if (_noralist.total_displacement) {
19314          var threshold = 660; //閾値
19315          var total_displacement_org = _noralist.total_displacement / 1000;
19316          if (_noralist.total_displacement > threshold) {
19317            var n = 1; // 小数点第n位まで残す
19318            _total_displacement = (Math.round(total_displacement_org * Math.pow(10, n)) / Math.pow(10, n)).toFixed(1);
19319          } else {
19320            var n = 2; // 小数点第n位まで残す
19321            _total_displacement = (Math.round(total_displacement_org * Math.pow(10, n)) / Math.pow(10, n)).toFixed(2);
19322          }
19323        }
19324
19325        //パネルレイアウト時
19326        if (_noralist.drive_system_name) {
19327          democarListHtml += '<div class="democar-name__text-sub">' + _noralist.drive_system_name + " / ";
19328        } else {
19329          democarListHtml += '<div class="democar-name__text-sub">- / ';
19330        }
19331
19332        if (_noralist.total_displacement !== "0" && _noralist.total_displacement) {
19333          democarListHtml += _total_displacement + "L / ";
19334        } else {
19335          democarListHtml += '- / ';
19336        }
19337
19338        if (_noralist.ride_member) {
19339          democarListHtml += +_noralist.ride_member + "人乗り</div></div>";
19340        } else {
19341          democarListHtml += "-</div></div>";
19342        }
19343
19344        // 車種画像
19345        // console.log(_noralist.car_file.url);
19346        if (_noralist.car_file.url === null || !_noralist.car_file.url) {
19347          democarListHtml += '<div class="democar-name__pic"><img class="" src="https://toyota.jp/pages/contents/include/common/image/tjp2016/parts/history_summary/no-result.png" alt="NO IMAGE"></div>';
19348        } else {
19349          $img_url = _noralist.car_file.url;
19350          democarListHtml += '<div class="democar-name__pic" data-image_check_type="1"><img class="" src="' + _noralist.car_file.url + '" alt="' + _noralist.car_file.alt + '"></div>';
19351        }
19352
19353        if (_noralist.free_comment) {
19354          democarListHtml += '<div class="democar-name__btnWrap">';
19355          democarListHtml += '<div class="democar-name__moreinfoBtn key-color-2-text-' + c2txt + '  key-color-2-bg-' + c2bg + '">車両詳細<img src="/assets/a/images/democar-exhibitioncar-0001/arrow/' + pageDesignId + '/' + c2txt + '.png" alt=""></div>';
19356          democarListHtml += '</div>';
19357        }
19358
19359
19360        democarListHtml += '</div>';  // /.democar-name
19361
19362
19363
19364
19365
19366
19367
19368        democarListHtml += '<div class="democar-panel-wrap boxheight-align-item-element clearfix"><div class="democar-grade democar-panel">';
19369        democarListHtml += '<p class="democar-item-name  key-color-6-text-' + c6txt + '">グレード</p>';
19370
19371        // グレード名
19372        if (!_noralist.grade_name || _noralist.grade_name === "  ") {
19373          democarListHtml += '<p class="democar-item-text">-</p></div>';
19374        } else {
19375          democarListHtml += '<p class="democar-item-text">' + _noralist.grade_name + "</p></div>";
19376        }
19377
19378        democarListHtml += '<div class="democar-engin democar-panel sp">';
19379        democarListHtml += '<p class="democar-item-name  key-color-6-text-' + c6txt + '">エンジンタイプ<span>/駆動方式</span></span><span class="show-panelLayout">
19379/排気量</span></p>';
19380
19381        // エンジンタイプ/駆動方式/排気量
19382        //EG_TYPEが定義外の数値だった場合
19383        if (!engine_id_list[_noralist.eg_type]) {
19384          engine_id_list[_noralist.eg_type] = "- ";
19385        }
19386
19387        /* 排気量が0以外で値有無チェック */
19388        var list_total_displacement = (_noralist.total_displacement !== '0' && _noralist.total_displacement) ? _total_displacement + 'L' : "-";
19389
19390        if (list_total_displacement) {
19391          //駆動方式が空もしくはnull
19392          if ((_noralist.eg_type && _noralist.drive_system_name == null) || !_noralist.drive_system_name) {
19393            democarListHtml += '<p class="democar-item-text">' + engine_id_list[_noralist.eg_type] + '/<span> -</span><span class="show-listLayout">/' + list_total_displacement + '</span></p></div>';
19394            //エンジンタイプが空もしくはnull
19395          } else if (_noralist.eg_type == null || (!_noralist.eg_type && _noralist.drive_system_name)) {
19396            democarListHtml += '<p class="democar-item-text">- /<span>' + _noralist.drive_system_name + '</span><span class="show-listLayout">/' + list_total_displacement + '</span></p></div>';
19397            //エンジンタイプ、駆動方式両方が空もしくはnull
19398          } else if (_noralist.eg_type && _noralist.drive_system_name) {
19399            democarListHtml += '<p class="democar-item-text">' + engine_id_list[_noralist.eg_type] + '/<span>' + _noralist.drive_system_name + '</span><span class="show-listLayout">/' + list_total_displacement + '</span></p></div>';
19400          } else {
19401            democarListHtml += '<p class="democar-item-text">-</p></div>';
19402          }
19403        } else {
19404          //駆動方式が空もしくはnull
19405          if ((_noralist.eg_type && _noralist.drive_system_name == null) || !_noralist.drive_system_name) {
19406            democarListHtml += '<p class="democar-item-text">' + engine_id_list[_noralist.eg_type] + '/<span> -</span></p></div>';
19407            //エンジンタイプが空もしくはnull
19408          } else if (_noralist.eg_type == null || (!_noralist.eg_type && _noralist.drive_system_name)) {
19409            democarListHtml += '<p class="democar-item-text">- /<span>' + _noralist.drive_system_name + '</span></p></div>';
19410            //エンジンタイプ、駆動方式両方が空もしくはnull
19411          } else if (_noralist.eg_type && _noralist.drive_system_name) {
19412            democarListHtml += '<p class="democar-item-text">' + engine_id_list[_noralist.eg_type] + '/<span>' + _noralist.drive_system_name + '</span></p></div>';
19413          } else {
19414            democarListHtml += '<p class="democar-item-text">-</p></div>';
19415          }
19416        }
19417
19418        democarListHtml += '<div class="democar-color democar-panel sp">';
19419
19420        democarListHtml += '<p class="democar-item-name  key-color-6-text-' + c6txt + '">カラー</p>';
19421
19422        // カラー
19423        if (_noralist.body_color) {
19424          democarListHtml += '<p class="democar-item-text">' + _noralist.body_color + "</p></div></div>";
19425        } else {
19426          democarListHtml += '<p class="democar-item-text">-</p></div></div>';
19427        }
19428
19429        democarListHtml += '<div class="democar-store clearfix boxheight-align-item-element"><div class="democar-store__info">';
19430
19431        //shop_name空対応
19432        if (!_noralist.shop_name) {
19433          _noralist.shop_name = "-";
19434        }
19435        if (mode == "iframe") {
19436          if (_noralist.jp_shop_url) {
19437            democarListHtml += '<p class="democar-item-name2  key-color-6-text-' + c6txt + '">配備店舗</p>';
19438            democarListHtml += '<p class="democar-store__info-name"><a href="' + _noralist.jp_shop_url + 'index.html">' + _noralist.shop_name + "</a></p>";
19439          } else {
19440            democarListHtml += '<p class="democar-store__info-name">' + _noralist.shop_name + "</p>";
19441          }
19442        } else {
19443          if (_noralist.shop_url != null && _noralist.shop_url) {
19444            democarListHtml += '<p class="democar-item-name2  key-color-6-text-' + c6txt + '">配備店舗</p>';
19445            democarListHtml += '<p class="democar-store__info-name"><a href="' + _noralist.shop_url + '">' + _noralist.shop_name + "</a></p>";
19446          } else {
19447            democarListHtml += '<p class="democar-store__info-name">' + _noralist.shop_name + "</p>";
19448          }
19449        }
19450
19451        if (_noralist.shop_tel != "" && _noralist.shop_tel[0].tel_num != null) {
19452          democarListHtml += '<p class="democar-store__info-tel"><img src="/assets/a/images/democar-exhibitioncar-0002/icon/democar-store__info-tel-icon.png" alt=""><a href="tel:' + _noralist.shop_tel[0].tel_num + '" data-galabel="' + _noralist.shop_name + " : " + _noralist.shop_tel[0].tel_num + " (" + pageTitle + '_試乗車・展示車(データ参照))">' + _noralist.shop_tel[0].tel_num + "</a></p>";
19453        } else {
19454          democarListHtml += '<p class="democar-store__info-tel">&nbsp;</p>';
19455        }
19456
19457        if (_noralist.address) {
19458          democarListHtml += '<p class="democar-store__info-add">';
19459          democarListHtml += '<img src="/assets/a/images/democar-exhibitioncar-0002/icon/democar-store__info-add-icon.png" alt="">' + _noralist.address + "</p>";
19460        }
19461
19462        if (mode == "iframe") {
19463          if (_noralist.jp_shop_url) {
19464            democarListHtml += '<p class="democar-store__info-link  key-color-1-text-' + c1txt + " key-color-1-bg-" + c1bg + '"><a href="' + _noralist.jp_shop_url + 'index.html">店舗詳細<img src="/assets/a/images/democar-exhibitioncar-0002/arrow/' + pageDesignId + "/" + c1txt + '.png" alt=""></a></p></div>';
19465          } else {
19466            democarListHtml += "</div>";
19467          }
19468        } else {
19469          if (_noralist.shop_url != null) {
19470            democarListHtml += '<p class="democar-store__info-link  key-color-1-text-' + c1txt + " key-color-1-bg-" + c1bg + '"><a href="' + _noralist.shop_url + '">店舗詳細<img src="/assets/a/images/democar-exhibitioncar-0002/arrow/' + pageDesignId + "/" + c1txt + '.png" alt=""></a></p></div>';
19471          } else {
19472            democarListHtml += "</div>";
19473          }
19474        }
19475
19476        if (_noralist.shoplist_cms_file.url) {
19477          democarListHtml += '<div class="democar-store__pic"><img src="' + _noralist.shoplist_cms_file.url + '" alt=""></div></div>';
19478        } else {
19479          democarListHtml += '<div class="democar-store__pic"></div></div>';
19480        }
19481
19482        //試乗車・展示車フラグ
19483        if (_noralist.democar_flg === "1") {
19484          //即時予約ボタン表示制御
19485          if (_noralist.online_reserve_flg === "1" && app_version >= 2) {
19486            democarListHtml += '<div class="online-reserve key-color-3-bg-' + c3bg + '">';
19487            if (document.URL.match("/form_load/")) {
19488              democarListHtml += '<a href="/form_load/' + _noralist.client_id + '/onlinersv/?outmst=1&CAR_NUMBER=' + _noralist.car_number + '&IMAGE_PATH=' + _noralist.image_url + '"';
19489            } else if (document.URL.match("/form/democarlist")) {
19490              democarListHtml += '<a href="/form/onlinersv?outmst=1&CAR_NUMBER=' + _noralist.car_number + '&IMAGE_PATH=' + _noralist.image_url + '"';
19491            } else {
19492              democarListHtml += '<a href="/form/onlinersv?outmst=1&CAR_NUMBER=' + _noralist.car_number + "&UNIT_ID=" + unit_id + '&IMAGE_PATH=' + _noralist.image_url + '"';
19493            }
19494            democarListHtml += ' class="key-color-3-text-' + c3txt + '">即時予約<img src="/assets/a/images/democar-exhibitioncar-0002/arrow/' + pageDesignId + "/" + c3txt + '.png" alt=""></a></div>';
19495          } else {
19496            var _btnText = "リクエスト予約";
19497            if (app_version < 2) {
19498              _btnText = "試乗予約する";
19499            }
19500            democarListHtml += '<div class="democar-reserve  key-color-3-bg-' + c3bg + '">';
19501            if (document.URL.match("/form_load/")) {
19502              democarListHtml += '<a href="/form_load/' + _noralist.client_id + "/democar/?outmst=1&CAR_NUMBER=" + _noralist.car_number + '"';
19503            } else if (document.URL.match("/form/democarlist")) {
19504              democarListHtml += '<a href="/form/democar?outmst=1&CAR_NUMBER=' + _noralist.car_number + '"';
19505            } else {
19506              democarListHtml += '<a href="/form/democar?outmst=1&CAR_NUMBER=' + _noralist.car_number + "&UNIT_ID=" + unit_id + '"';
19507            }
19508            democarListHtml += ' class="key-color-3-text-' + c3txt + '">' + _btnText + '<img src="/assets/a/images/democar-exhibitioncar-0002/arrow/' + pageDesignId + "/" + c3txt + '.png" alt=""></a></div>';
19509          }
19510        } else {
19511          democarListHtml += '<div class="democar-exhibition">展示車のみ</div>';
19512        }
19513
19514        democarListHtml += '</div>'; // ./democar-list
19515
19516        // ここに車両詳細用のモーダルテキスト(free_comment)が入る
19517        if (_noralist.free_comment) {
19518          var freeComment = _noralist.free_comment.replace(/\r?\n/g, '<br>')
19519          democarListHtml += '<div class="free_comment modal_text">' + freeComment + '</div>';
19520        }
19521
19522        democarListHtml += '</div>'; // ./democar-list-wrap
19523
19524
19525        insertTarget.append(democarListHtml);
19526
19527
19528
19529      }
19530
19531      DMS.checkImage($(".unit-wrapper .unit-base .democar-exhibitioncar-0002"));
19532
19533      $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .online-reserve a").click(function () {
19534        if ($("form").length > 0) {
19535          console.log($(this).attr("href"));
19536          $("form").attr("action", $(this).attr("href"));
19537          $("form").submit();
19538          return false;
19539        } else {
19540        }
19541      });
19542
19543
19544      showModal();
19545
19546
19547    }
19548
19549
19550    //リスト・パネル選択時のcurrent設定
19551    function changeBntInitSetClass() {
19552      if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0002").hasClass("democar-list-view")) {
19553        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-change-btn.view-list").addClass("current");
19554      } else {
19555        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-change-btn.view-panel").addClass("current");
19556      }
19557    }
19558    changeBntInitSetClass();
19559
19560    //読み込み時のフェード
19561    function panelDelayDisplay() {
19562      var _target = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002-wrap");
19563      var $more_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .more-btn");
19564      $more_btn.css({ opacity: "0" });
19565      setTimeout(function () {
19566        _target.animate({
19567          opacity: "1",
19568        });
19569        $more_btn.animate({
19570          opacity: "1",
19571        });
19572      }, 800);
19573    }
19574    panelDelayDisplay();
19575
19576    //表示切替
19577    function viewChange() {
19578      var list_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list");
19579      var pabel_btn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel");
19580      var _thisUnit = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002");
19581      list_btn.on("click", function () {
19582        if (!_thisUnit.hasClass(".democar-exhibitioncar-0002 democar-list-view")) {
19583          _thisUnit.removeClass(".democar-exhibitioncar-0002 democar-panel-view");
19584          _thisUnit.addClass(".democar-exhibitioncar-0002 democar-list-view");
19585          $(document).trigger(".democar-exhibitioncar-0002 democarFrameUpdate");
19586        }
19587      });
19588      pabel_btn.on("click", function () {
19589        if (!_thisUnit.hasClass(".democar-exhibitioncar-0002 democar-panel-view")) {
19590          _thisUnit.removeClass(".democar-exhibitioncar-0002 democar-list-view");
19591          _thisUnit.addClass(".democar-exhibitioncar-0002 democar-panel-view");
19592          $(document).trigger(".democar-exhibitioncar-0002 democarFrameUpdate");
19593        }
19594      });
19595    }
19596    viewChange();
19597
19598    //表示選択ボタン画像切替
19599    function viewBtnChange() {
19600      if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list").hasClass("current")) {
19601        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src").replace(/--off/g, "--on"));
19602      } else {
19603        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src").replace(/--on/g, "--off"));
19604      }
19605
19606      if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel").hasClass("current")) {
19607        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src").replace(/--off/g, "--on"));
19608      } else {
19609        $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src").replace(/--on/g, "--off"));
19610      }
19611
19612      var _targetBtn = $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-change-box .view-change-btn");
19613      _targetBtn.on("click", function () {
19614        var $this = $(this);
19615        if (!$this.hasClass("current")) {
19616          _targetBtn.removeClass("current");
19617          $this.addClass("current");
19618        }
19619        if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list").hasClass("current")) {
19620          $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src").replace(/--off/g, "--on"));
19621        } else {
19622          $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-list img.bt_l_bg").attr("src").replace(/--on/g, "--off"));
19623        }
19624        if ($(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel").hasClass("current")) {
19625          $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src").replace(/--off/g, "--on"));
19626        } else {
19627          $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src", $(".unit-wrapper .unit-base .democar-exhibitioncar-0002 .view-panel img.bt_r_bg").attr("src").replace(/--on/g, "--off"));
19628        }
19629      });
19630    }
19631    viewBtnChange();
19632
19633    //試乗予約へID追加
19634    // $(".unit-wrapper .unit-base .democar-exhibitioncar-0002").each(function (index, el) {
19635    //     getUnitId($(this));
19636    // });
19637
19638    // function getUnitId(target) {
19639    //     var unit_unique_id = target.parent().parent().attr("id");
19640
19641    //     var insertTarget = target.find(".democar-reserve a");
19642
19643    //     insertTarget.each(function () {
19644    //         var initUrl = $(this).attr("href");
19645    //         var parmId = "&unit-wrapper_id=" + unit_unique_id;
19646    //         var valid_url = initUrl + parmId;
19647    //         $(this).attr("href", valid_url);
19648    //     });
19649
19650    // }
19651
19652    function addIframeClass() {
19653      if ($(".democar-exhibitioncar-0002").parent(".unit-base").data("mode") == "iframe") {
19654        $(".democar-exhibitioncar-0002 .democar-store__info-name").addClass("iframe_link");
19655        $(".democar-exhibitioncar-0002 .democar-store__info-name a").attr("target", "_blank");
19656        $(".democar-exhibitioncar-0002 .democar-store__info-link").addClass("iframe_link");
19657        $(".democar-exhibitioncar-0002 .democar-store__info-link a").attr("target", "_blank");
19658      }
19659    }
19660
19661    function keyInputDropDown() {
19662      var sizeDetect = $("#size-detect").css("font-family");
19663      //load時SPだった場合、key入力によるプルダウンを実行しない
19664      if (sizeDetect != "sp") {
19665        $(".democar-exhibitioncar-0002 .sort-list-form .ui.dropdown").dropdown({
19666          clearable: true,
19667          match: "text",
19668          fullTextSearch: true,
19669          forceSelection: false,
19670          message: {
19671            noResults: "該当車種はありません",
19672          },
19673        });
19674
19675        //resetボタンを押したときに表示されている値をclearする
19676        $(".democar-exhibitioncar-0002 .sort-btn .btn-reset").on("click", function () {
19677          $(".democar-exhibitioncar-0002 .sort-list-form .ui.dropdown").dropdown("clear");
19678          $(".democar-exhibitioncar-0002 .sort-list-form .dropdown.icon").removeClass("clear");
19679        });
19680      } else {
19681        $(".democar-exhibitioncar-0002 .sort-list-form .ui.dropdown .spHide").remove();
19682      }
19683    }
19684
19685    function showModal() {
19686      var _modalOpenBtn = $(".democar-exhibitioncar-0002 .democar-name__moreinfoBtn");
19687      var close = $('.democar-exhibitioncar-0002 .modal-close');
19688      var container = $('.democar-exhibitioncar-0002 .modal-container');
19689
19690      _modalOpenBtn.off('click');
19691      _modalOpenBtn.on("click", (e) => {
19692        var _target = e.currentTarget;
19693        //クリックした要素のモーダルテキストを取得
19694        var _modalText = $(_target).parents(".democar-list-wrap").find(".free_comment").html();
19695        // モーダルにテキストを突っ込む
19696        $(".democar-exhibitioncar-0002 .modal-content p").html(_modalText);
19697        // container.addClass('active');
19698        container.fadeIn(200)
19699        $('html, body').css('overflow', 'hidden');
19700        return false;
19701      })
19702      //閉じるボタンをクリックしたらモーダルを閉じる
19703      close.on('click', () => {
19704        container.removeClass('active');
19705        container.fadeOut(200, () => {
19706          _reset();
19707        })
19708      });
19709
19710      //モーダルの外側をクリックしたらモーダルを閉じる
19711      $(document).on('click', function (e) {
19712        if (!$(e.target).closest('.modal-body').length) {
19713          container.removeClass('active');
19714          container.fadeOut(200, () => {
19715            _reset();
19716          })
19717        }
19718      });
19719
19720      function _reset() {
19721        $('html, body').css('overflow', 'visible');
19722        $(".democar-exhibitioncar-0002 .modal-content p").html("");
19723      }
19724
19725    }
19726
19727
19728
19729
19730  }
19731});$(function() {
19732
19733	var siteMapAvarage = function() {
19734
19735		this.block = $(".occ-footer-block");
19736		this.blockLength = this.block.length;
19737		this.blockHeightAve = 0;
19738
19739	}
19740
19741	//カラム振り分け
19742	siteMapAvarage.prototype.makeCol = function(column) {
19743		$(".occ-footer-block").hide();
19744		$(".occ-footer-col").empty();
19745
19746//console.log("makeCol "+column);
19747		var footerWrap = $(".occ-footer-sitemap-wrap");
19748
19749		this.block.css("margin-bottom", 0);
19750
19751		footerWrap.append(this.block);
19752
19753		this.heightAve(column);
19754
19755		var _block_num = 0;
19756		var _target_block_num = 0;
19757		var _li_num = 0;
19758		var _append_mode = 0; // 0 - ul tag , 1- li tag
19759		var _blocks = $(".occ-footer-sitemap-wrap .occ-footer-block");
19760		var _li_list;
19761		var footerCol = $(".occ-footer-col").eq(_target_block_num);
19762		var footerColUl;
19763		var _check_mode = true;
19764		var _check_count = 0;
19765		var _last_type;
19766
19767		var _appendFooterBlock = function() {
19768			var _element = _li_list[_li_num++];
19769			//console.log($(_element).prop("outerHTML"));
19770			//			footerColUl.append(_element);
19771			var _target_element = $($(_element).prop("outerHTML"));
19772			footerColUl.append(_target_element);
19773			_last_type = 1; // li tag
19774			_check_count++;
19775			if ($(_target_element).hasClass("occ-footer-title")) {
19776				_last_type = 2; // ul tag
19777				if (_block_num > 0) {
19778					if (column === 4) {
19779						_target_element.css("margin-top", 20);
19780					} else if (column === 3) {
19781						_target_element.css("margin-top", 20);
19782					}
19783
19784					if (_check_mode) {
19785						if (_check_count <= 6) {
19786
19787							var prevFooterCol = $(".occ-footer-col").eq(_target_block_num - 1);
19788							var prevFooterColUl = prevFooterCol.find(".occ-footer-block");
19789							var _li_temp_list = $(footerColUl).find("li");
19790							for (var i = 0; i < _li_temp_list.length - 1; i++) {
19791								prevFooterColUl.append(_li_temp_list[i]);
19792							}
19793							$(_li_temp_list[_li_temp_list.length - 1]).css("margin-top", "");
19794
19795						}
19796					}
19797
19798				}
19799				_check_mode = false;
19800
19801			}
19802
19803		}
19804
19805		var _loop_flag = true;
19806		_li_list = $(_blocks[0]).find("li");
19807		footerCol.append('<ul class="occ-footer-block" ></ul>');
19808		footerColUl = footerCol.find(".occ-footer-block");
19809		_check_mode = true;
19810		_check_count = 0;
19811		do {
19812			_appendFooterBlock();
19813			//console.log("_block_num="+_block_num+" _li_num="+_li_num+" _h="+_h+" blockHeightAve="+this.blockHeightAve);
19814			var _h = $(footerCol).height();
19815//			console.log("_h="+_h+" "+this.blockHeightAve+" "+_target_block_num);
19816			if (_h > this.blockHeightAve && _target_block_num < column - 1) {
19817				if (_last_type == 2) {
19818					var _last_block_list = $(footerColUl).find("li");
19819					var _last_block = _last_block_list[_last_block_list.length - 1];
19820					//					$(_last_block).css("margin-top", "");
19821				}
19822//console.log("target next "+_last_type);
19823				_target_block_num++;
19824				var footerCol = $(".occ-footer-col").eq(_target_block_num);
19825				footerCol.append('<ul class="occ-footer-block" ></ul>');
19826				footerColUl = footerCol.find(".occ-footer-block");
19827				if (_last_type == 2) {
19828					$(footerColUl).append(_last_block);
19829				}
19830				_check_mode = true;
19831				_check_count = 0;
19832			}
19833
19834			if (_li_num > _li_list.length) {
19835				_block_num++;
19836				_li_list = $(_blocks[_block_num]).find("li");
19837				_li_num = 0;
19838				if (_block_num > _blocks.length) {
19839					_loop_flag = false;
19840				}
19841			}
19842		} while (_loop_flag);
19843
19844		var footerCol = $(".occ-footer-col").eq(0);
19845		var footerColUl = footerCol.find(".occ-footer-block");
19846		var _li_temp_list = $(footerColUl).find("li");
19847		var _check_flag = false;
19848		var _title_count = 0;
19849		for (var i = 0; i < _li_temp_list.length; i++) {
19850			if ($(_li_temp_list[i]).hasClass("occ-footer-title")) {
19851				_title_count++;
19852			}
19853		}
19854		if (_title_count <= 1) {
19855			_check_flag = true;
19856		}
19857
19858		if (_check_flag && $(".occ-footer-col").eq(0).height() < $(".occ-footer-col").eq(1).height()) {
19859			var _target0_ul = $(".occ-footer-col").eq(0).find("ul");
19860			var _target1_ul = $(".occ-footer-col").eq(1).find("ul");
19861			var _target0 = $(".occ-footer-col").eq(0).find("li");
19862			var _target1 = $(".occ-footer-col").eq(1).find("li");
19863			var _count = 0;
19864			do {
19865				if ($(_target1[_count]).hasClass("occ-footer-title")) break;
19866				_target0_ul.append(_target1[_count++]);
19867			} while ($(".occ-footer-col").eq(0).height() < $(".occ-footer-col").eq(1).height());
19868		}
19869
19870		for (var i = 0; i < column; i++) {
19871			var footerCol = $(".occ-footer-col").eq(i);
19872			var footerColUl = footerCol.find(".occ-footer-block");
19873			var _li_temp_list = $(footerColUl).find("li");
19874			if ($(_li_temp_list[0]).hasClass("occ-footer-title")) {
19875				$(_li_temp_list[0]).css("margin-top", "");
19876				//console.log("margin none");
19877			}
19878		}
19879
19880	}
19881
19882
19883	//一つのカラムの高さの平均
19884	siteMapAvarage.prototype.heightAve = function(column) {
19885
19886		var _blocks = $(".occ-footer-sitemap-wrap .occ-footer-block");
19887		var _total = 0;
19888		for (var i = 0; i < _blocks.length; i++) {
19889			var _h = $(_blocks[i]).height();
19890//console.log(i+" _h="+_h)
19891			_total += _h;
19892		}
19893		var _mt = 48;
19894		if (column === 4) {
19895			_mt = 48;
19896		} else if (column === 3) {
19897			_mt = 20;
19898		}
19899		this.blockHeightAve = _total / column + _blocks.length * _mt / column;
19900//console.log("blockHeightAve="+_total+" "+this.blockHeightAve +" "+_blocks.length+" "+column);
19901
19902		return this.blockHeightAve;
19903	}
19904
19905
19906	siteMapAvarage.prototype.onResize = function() {
19907
19908		var that = this;
19909
19910		var pcFlag;
19911		var tabFlag;
19912		var spFlag;
19913
19914		var resizeMain = function() {
19915//console.log("flag "+pcFlag+" "+tabFlag+" "+spFlag);
19916//console.log("is "+that.isPC()+" "+that.isTAB()+" "+that.isSP());
19917			if (that.isPC() && pcFlag != false) {
19918//console.log("resizeMain1");
19919				pcFlag = false;
19920				//PCの処理
19921
19922				that.makeCol(4);
19923				$(".occ-footer-sitemap-list").removeClass("column-3").removeClass("column-1").addClass("column-4");
19924
19925				tabFlag = true;
19926				spFlag = true;
19927				DMS.setClickTagListener($("footer .clicktag"));
19928
19929			} else if (that.isTAB() && tabFlag != false) {
19930//console.log("resizeMain2");
19931				tabFlag = false;
19932				//tabの処理
19933
19934				that.makeCol(3);
19935				$(".occ-footer-sitemap-list").removeClass("column-4").removeClass("column-1").addClass("column-3");
19936
19937				pcFlag = true;
19938				spFlag = true;
19939				DMS.setClickTagListener($("footer .clicktag"));
19940
19941			}
19941 else if (that.isSP() && spFlag != false) {
19942//console.log("resizeMain3");
19943				spFlag = false;
19944				//spの処理
19945				$(".occ-footer-sitemap-list").removeClass("column-4").removeClass("column-3").addClass("column-1");
19946
19947				pcFlag = true;
19948				tabFlag = true;
19949				DMS.setClickTagListener($("footer .clicktag"));
19950			}
19951//console.log("resizeMain");
19952		}
19953
19954		$(window).on("load", resizeMain);
19955		$(window).resize(function() {
19956			resizeMain();
19957		});
19958		resizeMain();
19959
19960	}
19961
19962
19963	//size判別
19964	siteMapAvarage.prototype.isPC = function() {
19965		return $("#size-detect").css("fontFamily").indexOf("pc") != -1;
19966	}
19967
19968	siteMapAvarage.prototype.isTAB = function() {
19969		return $("#size-detect").css("fontFamily").indexOf("tab") != -1;
19970	}
19971
19972	siteMapAvarage.prototype.isSP = function() {
19973		return $("#size-detect").css("fontFamily").indexOf("sp") != -1;
19974	}
19975
19976	sitemap = new siteMapAvarage();
19977	sitemap.onResize();
19978
19979
19980	var closeFooterSiteMap = function(){
19981		$(".occ-footer-sitemap-list").addClass("occ-footer-sitemap-close");
19982		$(".occ-footer-sitemap-list").css("height","0px");
19983	}
19984	var _last_device="";
19985	var checkDevice = function(){
19986		var _device = $("#size-detect").css("fontFamily");
19987		if(_device.indexOf("sp") != -1){
19988			if(_last_device != _device){
19989				closeFooterSiteMap();
19990			}
19991		}else{
19992			$(".occ-footer-sitemap-list").css("height","auto");
19993		}
19994		_last_device = _device;
19995	}
19996	$(".sp-button").click(function(){
19997		if($(".occ-footer-sitemap-list").hasClass("occ-footer-sitemap-close")){
19998			$(".occ-footer-sitemap-list").removeClass("occ-footer-sitemap-close");
19999			$(".occ-footer-sitemap-list").css("height",$(".occ-footer-sitemap-wrap").outerHeight()+"px");
20000		}else{
20001			closeFooterSiteMap();
20002		}
20003	});
20004	
20005	$(window).resize(function() {
20006		checkDevice();
20007	});
20008	checkDevice();
20009
20010});
20011 var DMS = DMS || {};
20012$(function(){
20013    Number.isNaN = Number.isNaN || function(value) {
20014        return typeof value === "number" && value !== value;
20015    }
20016    
20017    DMS.isFormInputScene = function(el){return $(el).find('.form-scene--input').length > 0};
20018    DMS.isFormConfirmScene = function(el){return $(el).find('.form-scene--confirm').length > 0};
20019    DMS.isFormCompleteScene = function(el){return $(el).find('.form-scene--complete').length > 0};
20020    DMS.isFormPreview = function(el){return $(el).data("form-p-mode")};
20021    
20022    function detectIOS(){
20023        var ua = navigator.userAgent
20024        var isIOS = ua.indexOf("iPhone") >= 0
20025          || ua.indexOf("iPad") >= 0
20026          || navigator.userAgent.indexOf("iPod") >= 0;
20027          
20028        return isIOS;
20029    }
20030
20031    DMS.parentWindowInfo = {};
20032
20033    $('.form-0001').each(function(index, el) {
20034        if(detectIOS()){
20035            $(el).addClass('form-ua-ios');
20036        }
20037        if($(el).hasClass('form-mode-iframe')){
20038            $('html').addClass('form-iframe');
20039        }
20040        //車種選択のところだけページ遷移しないのでjsでプロセスを切り替える
20041        window.addEventListener("message", receiveMessage, false);
20042        function receiveMessage(e)
20043        {
20044            DMS.parentWindowInfo = e.data;
20045            $(document).trigger("parentWindowUpdate");
20046        }
20047
20048        var container = $(el);
20049        var $processItem = container.find('.form-cmn-process__item');
20050        var $processItemAfter = container.find('.form-cmn-process__arrow-after');
20051        var activeId = container.find(".form-cmn-process__container").data('active');
20052        var inactiveId = container.find(".form-cmn-process__container").data('inactive');
20053        var inactiveTextColor = container.find('.form-cmn-process__container').data("inactive-text");
20054        var activeColor = 'process-color-'+activeId;
20055        var inactiveColor = 'process-color-'+inactiveId;
20056        var activeText = container.find(".form-cmn-process__container").data('active-text');
20057                
20058        function resetProcessView(){
20059            $processItem.addClass(inactiveTextColor);
20060            $processItem.addClass(inactiveColor);
20061
20062            $processItem.removeClass(activeColor);
20063            $processItem.removeClass(activeText);
20064            $processItemAfter.removeClass(activeColor);
20065            $processItemAfter.addClass(inactiveColor);
20066        }
20067
20068        DMS.formProcessUpdate = function(){
20069            var type = container.find(".form-scene.current-scene").data("scene");
20070            resetProcessView();
20071            var $activeTarget = container.find(".form-cmn-process__item--"+type);
20072            $activeTarget.addClass(activeColor);
20073            $activeTarget.addClass(activeText);
20074            $activeTarget.removeClass(inactiveTextColor);
20075            $activeTarget.removeClass(inactiveColor);
20076            $activeTarget.find(".form-cmn-process__arrow-after").removeClass(inactiveColor);
20077            $activeTarget.find(".form-cmn-process__arrow-after").addClass(activeColor);
20078        }
20079        
20080        if(container.find('.car-list-0001').length == 0){
20081            container.find(".form-scene").addClass('current-scene');
20082        }
20083
20084        DMS.formProcessUpdate();
20085
20086
20087        if(isInlineframe()){
20088            //iframeで埋め込まれた時にはiframe内のアンカー処理がうまくいかないケースがあるので親とのやりとりで解決する
20089            //またできる限りスクロールバーを見せたくないためiframeの高さをコンテンツの高さに応じて動的に変更する
20090
20091            var defWindowInfo = {
20092                width:0,
20093                height:0,
20094                form_unitid:container.data("form_unitid"),
20095                isSizeUpdate:false,
20096                isContentsReady:false,
20097                isContentsLoad:false,//iframe内でページ遷移が発生したときに投げる
20098                isAnchor:false,//アンカーリンクを発生させたいときに投げる
20099                anchorOffset:0,//アンカーリンクのiframe内での位置
20100                isIOS:detectIOS(),
20101                dmsIframeFormMessage:true
20102            }
20103
20104            var windowInfo = $.extend({},defWindowInfo);
20105            windowInfo = $.extend({},defWindowInfo);
20106            windowInfo.isContentsReady = true;
20107
20108           $(window).resize(function(){
20109                windowInfo = $.extend({},defWindowInfo);
20110                windowInfo.width = $("body").width();
20111                windowInfo.height = $("body").height();
20112                windowInfo.isSizeUpdate = true;
20113                parent.postMessage(windowInfo,'*');
20114           })
20115
20116           $(document).on('formFrameUpdate',function(){
20117                windowInfo = $.extend({},defWindowInfo);
20118                windowInfo.width = $("body").width();
20119                windowInfo.height = $("body").height();
20120                windowInfo.isSizeUpdate = true;
20121                parent.postMessage(windowInfo,'*');
20122           })
20123
20124           DMS.formScroll = function(offset){
20125                windowInfo = $.extend({},defWindowInfo);
20126                windowInfo.anchorOffset = offset;
20127                windowInfo.isAnchor = true;
20128                windowInfo.width = $("body").width();
20129                windowInfo.height = $("body").height();
20130                parent.postMessage(windowInfo,'*');
20131
20132                $(window).scrollTop(offset);
20133           }
20134
20135           window.onload = function(){
20136                windowInfo = $.extend({},defWindowInfo);
20137                windowInfo.width = $("body").width();
20138                windowInfo.height = $("body").height();
20139                windowInfo.isSizeUpdate = true;
20140                windowInfo.isContentsLoad = true;
20141                parent.postMessage(windowInfo,'*');
20142            }
20143
20144
20145        }else{
20146            //iframeではないときには通常のスクロールをする
20147             DMS.formScroll = function(offset,isSkip){
20148                var duration = 0;
20149                if(!isSkip){
20150                    duration = 300;
20151                }
20152                $('html,body').animate({
20153                    scrollTop:offset
20154                },duration);
20155             }
20156        }
20157
20158        function isInlineframe(){
20159            //api.に直接アクセスする場合は親がいない状態になる
20160            return container.data("mode") != "normal" && window!=parent;
20161        }
20162
20163        DMS.isInlineframe = isInlineframe;
20164
20165        function getAPIUrl(mode){
20166            var api;
20167			var _type = $(el).data("type");
20168			if(_type == "onlinersv") {
20169				_type = "democar";
20170			}
20171            if(mode == "normal"){
20172                api = "//"+location.host+"/api/form/"+_type+"/save";    
20173            }else{
20174                api = "//"+location.host+"/form_save/"+$(el).data("client")+"/"+_type;
20175            }
20176            return api;
20177        }
20178        DMS.getAPIUrl = getAPIUrl;
20179
20180
20181    });
20182
20183
20184    var _form_scene_type = $('.form-scene').data("scene");
20185    console.log("form_scene_type="+_form_scene_type);
20186	if(_form_scene_type && _form_scene_type == "complete"){
20187		var _ga_action = window["ga_action"] ? window["ga_action"] : "";
20188		var _ga_label = window["ga_label"] ? window["ga_label"] : "";
20189		var _ga_category = window["ga_category"] ? window["ga_category"] : "link";
20190
20191		if((typeof gtag).indexOf("undefined") < 0){
20192      gtag("event", _ga_action, { event_category: _ga_category, event_label: _ga_label, non_interaction: true });
20193      console.log("ga_action="+_ga_action);
20194      console.log("ga_label="+_ga_label);
20195      console.log("ga_category=" + _ga_category);
20196      
20197      // ga('send', 'event', 'link', _ga_action, _ga_label, 1, { 'nonInteraction': 1 }); //旧記述
20198
20199      
20200		}
20201	}
20202
20203}); jQuery(document).ready(function($) {
20204    var excludeOnetagList = [
20205        "recruit"
20206    ];
20207
20208    $('.form-0001').each(function(index, el) {
20209        if (!DMS.isFormConfirmScene(el)) return;
20210
20211        var container = $(el);
20212        var complete = container.find("form").data("complete");
20213        var DMS_API = "";
20214        var reportAgree = 0;
20215        var isShowReportModal = false;
20216        var fancyboxOption;
20217        var normalFancyboxOption = {
20218            helpers : { 
20219                overlay : {
20220                    closeClick: false
20221                } 
20222            },
20223            keys : {
20224                close: null
20225            }
20226         };
20227
20228         var iframeFancyboxOptions = {
20229            autoCenter:false,
20230            topRatio: 0,
20231            margin: [200,0,0,0],
20232            helpers : { 
20233                overlay : {
20234                    closeClick: false
20235                } 
20236            },
20237            keys : {
20238                close: null
20239            }
20240         }
20241
20242        DMS_API = DMS.getAPIUrl($(el).data("mode"));
20243        
20244        //そもそも販社の設定でレポートを受け入れるかどうか
20245        var isCallOneTag = container.find(".form-scene--confirm").data('use_onetag');
20246
20247        //除外リストに含まれているかどうか
20248        isCallOneTag = isCallOnetagFormType() ? isCallOneTag : 0;
20249/*
20250        if(DMS.isInlineframe()){
20251            
20252            $(document).on('parentWindowUpdate',function(e){
20253                
20254                fancyboxOption = iframeFancyboxOptions;
20255                showReportModal();
20256            })
20257        }else{
20258            fancyboxOption = normalFancyboxOption;
20259            showReportModal();    
20260        }
20261*/        
20262        if(container.find('form').find("input[name=REPORT_AGREE]").length == 0){
20263			$(el).find("form").append('<input name="REPORT_AGREE" type="hidden" value="
202630">');
20264		}
20265
20266        function showReportModal(){
20267            if(isShowReportModal) return;
20268            isShowReportModal = true;
20269            if(isCallOneTag == 1){
20270            
20271                //もしすでに選択されていたら表示しない。
20272                if(container.find('form').find("input[name=REPORT_AGREE]").length == 0){
20273                   
20274                     $.fancybox("#select-onetag",fancyboxOption);
20275
20276                     $('.btn-select-onetag__ok a').on('click',function(){
20277                        reportAgree = 1;
20278                        setReportAgreeValue(reportAgree);
20279                        $.fancybox.close();
20280                        return false;
20281                     });
20282
20283                     $('.btn-select-onetag__no a').on('click',function(){
20284                        reportAgree = 0;
20285                        setReportAgreeValue(reportAgree);
20286                        $.fancybox.close();
20287                        return false;
20288                     });
20289                }
20290            }
20291        }
20292
20293        
20294
20295        $(document).on('click','.btn-select-error-ok a',function(e){
20296            $.fancybox.close();
20297            return false;
20298        })
20299
20300        function isCallOnetagFormType(){
20301            for (var i = 0; i < excludeOnetagList.length; i++) {
20302                if($(el).data("type") == excludeOnetagList[i]){
20303                    return false;
20304                }
20305            }
20306            return true;
20307        }
20308
20309        function setReportAgreeValue(value){
20310            $(el).find("form").append('<input name="REPORT_AGREE" type="hidden" value="'+value+'">');
20311        }
20312
20313
20314        function nextScene(){
20315            container.find('form').attr("action",complete);
20316            container.find('form').submit();        
20317        }
20318
20319
20320        function errorShow(errorCode,errorMessage){
20321            var message = "";
20322            if(errorCode == 9999){
20323				message = "予期せぬエラーが発生しました。しばらくしてからもう一度お試しください。";
20324            	var _type = $(".form-0001").data("type");
20325            	if(_type == "onlinersv" || _type == "democar"){
20326					message = "予期せぬエラーが発生しました。車種選択に戻ります。";
20327				}
20328
20329                $(document).off('click','.btn-select-error-ok a');
20330                $(document).on('click','.btn-select-error-ok a',function(e){
20331                	var _type = $(".form-0001").data("type");
20332                	if(_type == "onlinersv"){
20333						container.find('form').attr("action","/form/onlinersvlist");;
20334						container.find('form').submit();        
20335					}else if(_type == "democar"){
20336						location.href="/form/democarlist/";
20337					}else{
20338                        $.fancybox.close();
20339					}
20340                    return false;
20341                });
20342			}else if(String(errorCode).substr(0,3) == "404"){
20343				var btntype = 1;
20344				switch(errorCode){
20345				case 401001:
20346				message = "セッションの有効期限が切れています。再度入力してください。";
20347				break;
20348				case 404005:
20349				case 404010:
20350				message = "選択いただいた車両の情報が変更されたため予約ができなくなりました。大変申し訳ございませんが車両の再選択をお願いいたします。";
20351				btntype = 2;
20352				break;
20353				case 404006:
20354				message = "車両の予約に失敗しました。";
20355				btntype = 2;
20356				break;
20357				case 404007:
20358				message = "車両が所属する店舗の情報がありません。";
20359				btntype = 2;
20360				break;
20361				case 404008:
20362				message = "希望の日時の予約は既に取得されています。";
20363				btntype = 3;
20364				break;
20365				case 404009:
20366				message = "希望の日時の予約は予約可能数を超えています。";
20367				btntype = 3;
20368				break;
20369				}
20370                $(document).off('click','.btn-select-error-ok a');
20371                if(btntype == 3 || btntype == 2){
20372	                $(document).on('click','.btn-select-error-ok a',function(e){
20373	                	if($(".form-0001").data("type") == "onlinersv"){
20374							if(btntype == 2){
20375								$('input[name="HOPE_DATE"]').remove();
20376								$('input[name="HOPE_TIME"]').remove();
20377
20378
20379                                $('input[name="HOPE_STORE_ID"]').remove();
20380                                $('input[name="HOPE_STORE"]').remove();
20381                                $('input[name="HOPE_STORE_CD_DMS"]').remove();
20382
20383                                $('input[name="RESERVE_CAR"]').remove();
20384                                $('input[name="RESERVE_CAR_COLOR"]').remove();
20385                                $('input[name="RESERVE_CAR_GRADE"]').remove();
20386                                $('input[name="RESERVE_CAR_GRADE_NAME"]').remove();
20387                                $('input[name="RESERVE_CAR_DISPLACEMENT"]').remove();
20388                                $('input[name="RESERVE_CAR_SYSTEM"]').remove();
20389                                $('input[name="RESERVE_TRANSMISSION_TYPE_NAME"]').remove();
20390                                $('input[name="RESERVE_CAR_NUMBER"]').remove();
20391                                $('input[name="IMAGE_PATH"]').remove();
20392                                $('input[name="SEX"]').remove();
20393                                $('input[name="TOKEN"]').remove();
20394                                $('input[name="form_agreement"]').remove();
20395                                $('input[name="STORE_CD"]').remove();
20396                                $('input[name="CHANNEL_CD"]').remove();
20397                                $('input[name="democarlist_url"]').remove();
20398                                $('input[name="IS_ONLINE_RSV"]').remove();
20399                                $('input[name="IS_MOBILE"]').remove();
20400
20401								if(location.pathname.indexOf("/form_load/") >= 0){
20402									if($('input[name="outmst"]').val() == 1){
20403										container.find('form').attr("action","/form_load/"+$(".form-0001").data("client")+"/onlinersvoutmst/list"+window.location.search);
20404									}else{
20405										container.find('form').attr("action","/form_load/"+$(".form-0001").data("client")+"/onlinersv/list"+window.location.search);
20406									}
20407								}else{							
20408									if($('input[name="outmst"]').val() == 1){
20409										container.find('form').attr("action","/form/onlinersvoutmstlist");;
20410									}else{
20411										container.find('form').attr("action","/form/onlinersvlist");;
20412									}
20413								}
20414                                $('input[name="outmst"]').remove();
20415								container.find('form').submit();        
20416							}else{
20417								container.find('form').submit();        
20418							}
20419						}else{
20420							if(location.pathname.indexOf("/form_load/") >= 0){
20421								if($('input[name="outmst"]').val() == 1){
20422									location.href="/form_load/"+$(".form-0001").data("client")+"/democaroutmst/list"+window.location.search;
20423								}else{
20424									location.href="/form_load/"+$(".form-0001").data("client")+"/democar/list"+window.location.search;
20425								}
20426							}else{
20427								if($('input[name="outmst"]').val() == 1){
20428									location.href="/form/democaroutmstlist/";
20429								}else{
20430									location.href="/form/democarlist/";
20431								}
20432							}
20433		                }
20434	                    return false;
20435	                });
20436	            }else{
20437	                $(document).on('click','.btn-select-error-ok a',function(e){
20438	                    container.find('form').submit();
20439	                    return false;
20440	                });
20441				}
20442
20443			}else{
20444				switch(errorCode){
20445				case 500001:
20446				message = "接続エラーが発生しました。しばらくしてからもう一度お試しください。";
20447				break;
20448				case 500002:
20449				message = "接続エラーが発生しました。しばらくしてからもう一度お試しください。";
20450				break;
20451				case 599999:
20452				message = "予期せぬエラーが発生しました。しばらくしてからもう一度お試しください。";
20453				break;
20454				default:
20455				message = "エラーが発生しました。";
20456				console.log(errorCode,errorMessage);
20457				break;
20458				}
20459	        }
20460            $('#error-message').text(message,{
20461                    helpers : { 
20462                        overlay : {
20463                            closeClick: false
20464                        } 
20465                    },
20466                    keys : {
20467                        close: null
20468                    }
20469                 });
20470            $.fancybox("#form-send-error");
20471        }
20472
20473        setNextEvent();
20474
20475        function setNextEvent(){
20476            container.find('.form-btn-next').on('click',function(){
20477                //連打対応
20478                container.find('.form-btn-next').off('click');
20479                
20480                if(DMS.isFormPreview(el) == 1){
20481                    nextScene();
20482                    return;
20483                }
20484                setStockService();
20485                trimSendValue();
20486                $("*[name=IMG_DATA_TMP_1]").prop('disabled', true);
20487                $("*[name=IMG_DATA_TMP_2]").prop('disabled', true);
20488                $("*[name=IMG_DATA_TMP_3]").prop('disabled', true);
20489				$.fancybox("#form-0001-loading",{
20490				    helpers : { 
20491				        overlay : {
20492				            closeClick: false
20493				        } 
20494				    },
20495				    keys : {
20496				        close: null
20497				    }
20498				 });
20499
20500
20501				var _serialize_obj = container.find("form").serialize().replace(/\+/g,'%20').split("&");
20502				var _send_obj = [];
20503				for(var i=0;i<_serialize_obj.length;i++){
20504					var _key_value_obj = _serialize_obj[i].split("=");
20505					_send_obj.push(_key_value_obj[0]+"="+encodeURIComponent(escapeHtml(decodeURIComponent(_key_value_obj[1]))) );
20506				}
20507				
20508
20509            	var _type = $(".form-0001").data("type");
20510				if(_type == "stock" && window["stock_service_setting_json"]){
20511					if(stock_service_setting_json["service_select_type"]){
20512						var _send_obj2 = [];
20513						var _service_short_label_ary = [];
20514						var _service_full_label_ary = [];
20515						if(stock_service_setting_json["service_select_type"] == 1 || true){
20516							for(var i=0;i<_send_obj.length;i++){
20517								var _flag = false;
20518								for(var j=0;j<50;j++){
20519									var _chk_label = "SERVICE_NAME"+j;
20520									if(_send_obj[i].indexOf(_chk_label+"=") >= 0){
20521										_flag = true;
20522										var _num = parseInt(_send_obj[i].split("=")[0].split("SERVICE_NAME")[1], 10);
20523										var _n1 = Math.floor(_num / 10)+1;
20524										var _n2 = (_num % 10)+1;
20525										if(_n1 == 5) _n1 = "";
20526										_service_short_label_ary.push(stock_service_setting_json["service_any"+_n1+"_item"+_n2+"_short_label"]);
20527										_service_full_label_ary.push(stock_service_setting_json["service_any"+_n1+"_item"+_n2+"_label"]);
20528										break;
20529									}
20530								}
20531								if(!_flag){
20532									_send_obj2.push(_send_obj[i]);
20533								}
20534							}
20535							if(_service_short_label_ary.length > 0){
20536								_service_key_value = _service_short_label_ary.join("、");
20537								_service_full_key_value = _service_full_label_ary.join("、");
20538								_send_obj2.push("SERVICE_NAME="+encodeURIComponent(escapeHtml(_service_key_value)) );
20539								_send_obj2.push("SERVICE_NAME_ORG="+encodeURIComponent(escapeHtml(_service_full_key_value)) );
20540							}else{
20541								_send_obj2.push("SERVICE_NAME=" );
20542								_send_obj2.push("SERVICE_NAME_ORG=" );
20543							}
20544							_send_obj = _send_obj2;
20545
20546						}
20547					}
20548				}
20549
20550                $.ajax({
20551                    url: DMS_API,
20552                    type: 'POST',
20553                    dataType: 'json',
20554                    data:_send_obj.join("&")
20555                })
20556                .done(function(data) {
20557                    container.find("form").append('<input type="hidden" name="RESERVE_ID" value="'+data["RESERVE_ID"]+'">');
20558                    if(data["HOPE_STORE_CD_G"]){
20559                        container.find("form").append('<input type="hidden" name="HOPE_STORE_CD_G" value="'+data["HOPE_STORE_CD_G"]+'">');
20560                    }
20561                    if(data["HOPE_STORE_CD"]){
20562                        container.find("form").append('<input type="hidden" name="HOPE_STORE_CD" value="'+data["HOPE_STORE_CD"]+'">');
20563                    }
20564                    if(data["CLIENT_ID"]){
20565                        $('input[name="STORE_CD"]').val(data["CLIENT_ID"]);
20566                    }
20567                    nextScene();   
20568                })
20569                .fail(function(data, textStatus, errorThrown) {
20570					$.fancybox.close();
20571	                $("*[name=IMG_DATA_TMP_1]").prop('disabled', false);
20572	                $("*[name=IMG_DATA_TMP_2]").prop('disabled', false);
20573	                $("*[name=IMG_DATA_TMP_3]").prop('disabled', false);
20574                    if(data["responseJSON"]){
20575                        errorShow(data["responseJSON"]["ERROR_CD"],data["responseJSON"]["ERROR_MSG"]);
20576                    }else{
20577                        errorShow(9999,"");
20578					}
20579                    setNextEvent();
20580                    console.log(data);
20581                    console.log(textStatus);
20582                    console.log(errorThrown);
20583                })
20584                .always(function() {
20585                    
20586                });
20587
20588
20589                return false;
20590            });
20591        }
20592
20593		function escapeHtml(str) {
20594			str = str.replace(/&/g, '&amp;');
20595			str = str.replace(/</g, '&lt;');
20596			str = str.replace(/>/g, '&gt;');
20597			str = str.replace(/"/g, '&quot;');
20598			str = str.replace(/'/g, '&#39;');
20599			return str;
20600		}	
20601
20602        function setStockService(){
20603            //上記以外のサービスが選択されていたら service_name_otherの名前を値として使う
20604            if(DMS.service_other_label){
20605                if($('input[name=SERVICE_NAME]').val() == DMS.service_other_label){
20606                    $('input[name=SERVICE_NAME]').val($('input[name=SERVICE_NAME_OTHER]').val());
20607                }
20608            }
20609        }
20610
20611        //データ連動のものなどこちらでバリデーションできないものを最大文字数で省略する
20612        //戻るボタンをおしてもどったときに影響がないように送信する直前で処理をおこなう
20613        function trimSendValue(){
20614            if($('input[name=PAGE_URL]').length > 0){
20615                $('input[name=PAGE_URL]').val(trimString($('input[name=PAGE_URL]').val(),100));    
20616            }
20617
20618            if($('input[name=PAGE_NAME]').length > 0){
20619                $('input[name=PAGE_NAME]').val(trimString($('input[name=PAGE_NAME]').val(),100));    
20620            }
20621
20622            if($('input[name=UNIT_NAME]').length > 0){
20623                $('input[name=UNIT_NAME]').val(trimString($('input[name=UNIT_NAME]').val(),100));    
20624            }
20625
20626            if($('input[name=RESERVE_CAR]').length > 0){
20627                $('input[name=RESERVE_CAR]').val(trimString($('input[name=RESERVE_CAR]').val(),30));    
20628            }
20629
20630            if($('input[name=RESERVE_CAR_GRADE]').length > 0){
20631                $('input[name=RESERVE_CAR_GRADE]').val(trimString($('input[name=RESERVE_CAR_GRADE]').val(),50));    
20632            }
20633
20634            if($('input[name=RESERVE_CAR_GRADE_NAME]').length > 0){
20635                $('input[name=RESERVE_CAR_GRADE_NAME]').val(trimString($('input[name=RESERVE_CAR_GRADE_NAME]').val(),50));    
20636            }
20637
20638            if($('input[name=RESERVE_CAR_COLOR]').length > 0){
20639                $('input[name=RESERVE_CAR_COLOR]').val(trimString($('input[name=RESERVE_CAR_COLOR]').val(),50));    
20640            }
20641
20642            if($('input[name=RESERVE_CAR_DISPLACEMENT]').length > 0){
20643                $('input[name=RESERVE_CAR_DISPLACEMENT]').val(trimString($('input[name=RESERVE_CAR_DISPLACEMENT]').val(),20));    
20644            }
20645
20646            if($('input[name=RESERVE_CAR_SYSTEM]').length > 0){
20647                $('input[name=RESERVE_CAR_SYSTEM]').val(trimString($('input[name=RESERVE_CAR_SYSTEM]').val(),20));    
20648            }
20649
20650            if($('input[name=RESERVE_TRANSMISSION_TYPE_NAME]').length > 0){
20651                $('input[name=RESERVE_TRANSMISSION_TYPE_NAME]').val(trimString($('input[name=RESERVE_TRANSMISSION_TYPE_NAME]').val(),20));    
20652            }
20653
20654            if($('input[name=RESERVE_CAR_NUMBER]').length > 0){
20655                $('input[name=RESERVE_CAR_NUMBER]').val(trimString($('input[name=RESERVE_CAR_NUMBER]').val(),20));    
20656            }
20657
20658            if($('input[name=SERVICE_NAME]').length > 0){
20659                $('input[name=SERVICE_NAME]').val(trimString($('input[name=SERVICE_NAME]').val(),20));    
20660            }
20661            
20662        }
20663        function trimString(str,max){
20664            return String(str).substring(0,max);
20665        }
20666    });
20667});var DMS = DMS || {};
20668DMS.HOLIDAY = [101,102]; //定休日コード
20669DMS.RECRUIT_INFORM_KEY = "同じ";//リクルートの連絡先の入力周りチェック用のキー
20670$(function() {
20671    $('.form-0001').each(function(index, el) {
20672
20673        var fancyboxOption;
20674        var normalFancyboxOption = {
20675            helpers : { 
20676                overlay : {
20677                    closeClick: false
20678                } 
20679            },
20680            keys : {
20681                close: null
20682            }
20683         };
20684
20685         var iframeFancyboxOptions = {
20686            autoCenter:false,
20687            topRatio: 0,
20688            margin: [200,0,0,0],
20689            helpers : { 
20690                overlay : {
20691                    closeClick: false
20692                } 
20693            },
20694            keys : {
20695                close: null
20696            }
20697         }
20698
20699        var form;
20700
20701
20702
20703        
20704        if (!DMS.isFormInputScene(el)) return;
20705
20706        if(DMS.isFormPreview(el) != 1){
20707            checkMaintainance();
20708        }
20709
20710        //車種選択シーンがある場合は処理を分ける
20711        if ($(el).find('.car-list-0001').length > 0) {
20712            DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function(){
20713                DMS.BoxHeightAlign.update();
20714            });
20715            form = new DMS.FormHasCarselect($(el));
20716        }else{
20717            form = new DMS.Form($(el));
20718        }
20719
20720        form.init();
20721        form.initValidater();
20722        form.initReplaceText();
20723
20724
20725				var _shopname = decodeURI(DMS.getQuery("shop-name"));
20726
20727				//url query
20728				$('.form-input-container select[name="HOPE_STORE_ID"] option').each(function(a , b){
20729					if(_shopname == $(b).text()){
20730						_shopcode = $(b).attr("value");
20731						$('.form-input-container select[name="HOPE_STORE_ID"]').val(_shopcode);
20732						return false;
20733					}
20734				});
20735
20736
20737        form.initCheckDate();
20738        form.initArea();
20739        form.initCheckDateFirst();
20740        form.initServiceCheckBox();
20741        DMS.formProcessUpdate();
20742
20743        //全角カタカナチェック
20744        jQuery.validator.addMethod("katakana", function(value, element) {
20745
20746            return this.optional(element) || /^[ァ-ヾ]+$/.test(value);
20747        }, "カナは全角カタカナ文字で入力してください。");
20748
20749         jQuery.validator.addMethod("requiredName1", function(value, element) {
20750            if($(element).parents(".form-cmn-name-container").find("input[name=NAME1_SEI]").val() != "" && $(element).val() == ""){
20751                return false;
20752            }
20753            return true;
20754        }, "姓を入力してください。");
20755
20756         jQuery.validator.addMethod("requiredName2", function(value, element) {
20757            if($(element).parents(".form-cmn-name-container").find("input[name=NAME1_MEI]").val() != "" && $(element).val() == ""){
20758                return false;
20759            }
20760            return true;
20761        }, "名を入力してください1。");
20762
20763         jQuery.validator.addMethod("requiredName4", function(value, element) {
20764            if($(element).parents(".form-cmn-name-container").find("input[name=C_NAME_MEI]").val() != "" && $(element).val() == ""){
20765                return false;
20766            }
20767            return true;
20768        }, "名を入力してください。");
20769         jQuery.validator.addMethod("requiredName5", function(value, element) {
20770			var _viewnumber = $(element).parents(".form-cmn-section-wrapper").find(".form-cmn-section-button-remove").data("viewnumber");
20771			var _num_str="";
20772			if(_viewnumber){
20773				_num_str = "_"+("00"+_viewnumber).substr(-2);
20774			}
20775
20776            if($(element).parents(".form-cmn-name-container").find("input[name=F_NAME_MEI"+_num_str+"]").val() != "" && $(element).val() == ""){
20777                return false;
20778            }
20779            return true;
20780        }, "名を入力してください。");
20781
20782         jQuery.validator.addMethod("requiredName6", function(value, element) {
20783            if($(element).parents(".form-cmn-name-container").find("input[name=C_NAME_SEI]").val() != "" && $(element).val() == ""){
20784                return false;
20785            }
20786            return true;
20787        }, "姓を入力してください。");
20788         jQuery.validator.addMethod("requiredName7", function(value, element) {
20789			var _viewnumber = $(element).parents(".form-cmn-section-wrapper").find(".form-cmn-section-button-remove").data("viewnumber");
20790			var _num_str="";
20791			if(_viewnumber){
20792				_num_str = "_"+("00"+_viewnumber).substr(-2);
20793			}
20794            if($(element).parents(".form-cmn-name-container").find("input[name=F_NAME_SEI"+_num_str+"]").val() != "" && $(element).val() == ""){
20795                return false;
20796            }
20797            return true;
20798        }, "姓を入力してください。");
20799
20800         jQuery.validator.addMethod("requiredKana3", function(value, element) {
20801            if($(element).parents(".form-cmn-name-container").find("input[name=C_NAME_MEI_KANA]").val() != "" && $(element).val() == ""){
20802                return false;
20803            }
20804            return true;
20805        }, "メイをカタカナで入力してください。");
20806
20807         jQuery.validator.addMethod("requiredKana4", function(value, element) {
20808            if($(element).parents(".form-cmn-name-container").find("input[name=C_NAME_SEI_KANA]").val() != "" && $(element).val() == ""){
20809                return false;
20810            }
20811            return true;
20812        }, "セイをカタカナで入力してください。");
20813         jQuery.validator.addMethod("requiredKana5", function(value, element) {
20814			var _viewnumber = $(element).parents(".form-cmn-section-wrapper").find(".form-cmn-section-button-remove").data("viewnumber");
20815			var _num_str="";
20816			if(_viewnumber){
20817				_num_str = "_"+("00"+_viewnumber).substr(-2);
20818			}
20819            if($(element).parents(".form-cmn-name-container").find("input[name=F_NAME_MEI_KANA"+_num_str+"]").val() != "" && $(element).val() == ""){
20820                return false;
20821            }
20822            return true;
20823        }, "メイをカタカナで入力してください。");
20824
20825         jQuery.validator.addMethod("requiredKana6", function(value, element) {
20826			var _viewnumber = $(element).parents(".form-cmn-section-wrapper").find(".form-cmn-section-button-remove").data("viewnumber");
20827			var _num_str="";
20828			if(_viewnumber){
20829				_num_str = "_"+("00"+_viewnumber).substr(-2);
20830			}
20831            if($(element).parents(".form-cmn-name-container").find("input[name=F_NAME_SEI_KANA"+_num_str+"]").val() != "" && $(element).val() == ""){
20832                return false;
20833            }
20834            return true;
20835        }, "セイをカタカナで入力してください。");
20836
20837
20838
20839
20840
20841
20842         jQuery.validator.addMethod("requiredKana1", function(value, element) {
20843            if($(element).parents(".form-cmn-name-container").find("input[name=NAME2_SEI]").val() != "" && $(element).val() == ""){
20844                return false;
20845            }
20846            return true;
20847        }, "メイをカタカナで入力してください。");
20848
20849         jQuery.validator.addMethod("requiredKana2", function(value, element) {
20850            if($(element).parents(".form-cmn-name-container").find("input[name=NAME2_MEI]").val() != "" && $(element).val() == ""){
20851                return false;
20852            }
20853            return true;
20854        }, "セイをカタカナで入力してください。");
20855
20856
20857        jQuery.validator.addMethod("prohibited", function(value, element) {
20858            if(/^$/.test(value)) return true;
20859            return /^[^”\"\'\,\?\t]+$/.test(value);
20860        }, "『”』『\"』『'』『,』『?』 TABはシステム禁止文字です。");
20861
20862        //utf-8に存在してsjisにない言語を除外する
20863        jQuery.validator.addMethod("checkSjis", function(value, element) {
20864            if(ECL.pickupNotSJIS(String(value)).length == 0) return true;
20865            return false;
20866        }, function(params, element) {
20867            var notSjis = ECL.pickupNotSJIS(String($(element).val()));
20868            var notSjis = notSjis.filter(function (x, i, self) {
20869                return self.indexOf(x) === i;
20870            });
20871            var str = "";
20872            for (var i = 0; i < notSjis.length; i++) {
20873                str += "『"+notSjis[i]+"』";
20874            }
20875          return str+'はシステム禁止文字です。';
20876        });
20877
20878        jQuery.validator.addMethod("recruit_tel", function(value, element) {
20879           
20880            if(form.dom.find("input[name=RECRUIT_INFORM]").val().indexOf(DMS.RECRUIT_INFORM_KEY) > -1 ){
20881                if(!isInputRecruitTel()){
20882                    if(!$(element).val()){
20883                       return false
20884                    }
20885                }
20886                
20887                //recruitContactValidate();
20888            }
20889            return true;
20890        }, "連絡先を入力してください");
20891
20892        jQuery.validator.addMethod("recruit_address", function(value, element) {
20893           
20894            if(form.dom.find("input[name=RECRUIT_INFORM]").val().indexOf(DMS.RECRUIT_INFORM_KEY) > -1 ){
20895                if(!isInputRecruitAddress()){
20896                    if(!$(element).val()){
20897                       return false
20898                    }
20899                }
20900
20901                
20902                //recruitContactValidate();
20903            }
20904            return true;
20905        }, "連絡先を入力してください");
20906
20907        jQuery.validator.addMethod("recruit_address", function(value, element) {
20908           
20909            if(form.dom.find("input[name=RECRUIT_INFORM]").val().indexOf(DMS.RECRUIT_INFORM_KEY) > -1 ){
20910                if(!isInputRecruitAddress()){
20911                    if(!$(element).val()){
20912                       return false
20913                    }
20914                }
20915
20916                
20917                //recruitContactValidate();
20918            }
20919            return true;
20920        }, "連絡先を入力してください");
20921        jQuery.validator.addMethod("service_name_all", function(value, element) {
20922
20923			var _result = $('input[name^="SERVICE_NAME"]:checked');
20924			if(_result.length == 0){
20925	            return false;
20926			}else{
20927	            return true;
20928			}
20929        }, "ご希望のサービスを選択してください。");
20930
20931        jQuery.validator.addClassRules("service_name_all", {
20932		  "service_name_all": true
20933		});
20934
20935
20936
20937        function recruitAddressValidate(){
20938            form.dom.find('input[name=RECURUIT_ZIP]').valid();
20939            form.dom.find('input[name=RECURUIT_PREF]').valid();
20940            form.dom.find('input[name=RECURUIT_STREET]').valid();
20941
20942
20943        }
20944
20945        function checkMaintainance(){
20946            var api = DMS.getAPIUrl($(el).data("mode"));
20947            $.ajax({
20948                url: api,
20949                type: 'POST',
20950                dataType: 'json',
20951                data:""
20952            })
20953            .done(function(data) {
20954            })
20955            .fail(function(data, textStatus, errorThrown) {
20956                if(data){
20957                    if(data.status == 503){
20958                        showMaintainView();
20959                    }
20960                }
20961
20962               
20963            })
20964            .always(function() {
20965                
20966            });
20967        }
20968
20969        function showMaintainView(){
20970            $('.form-0001-maintain').show();
20971            $('.form-cmn-process').hide();
20972            $('.form-scene').hide();
20973        }
20974
20975         function recruitTelValidate(){
20976
20977            form.dom.find('input[name=RECURUIT_TEL]').valid();
20978
20979        }
20980        function isInputRecruitAddress(){
20981            if(!form.dom.find('input[name=RECURUIT_ZIP]').val() && !form.dom.find('select[name=RECURUIT_PREF]').val() && !form.dom.find('select[name=RECURUIT_STREET]').val()){
20982                return false;
20983            }else{
20984                return true;
20985            }
20986        }
20987
20988        function isInputRecruitTel(){
20989            if(!form.dom.find('input[name=RECURUIT_TEL]').val()){
20990                return false;
20991            }else{
20992                return true;
20993            }
20994        }
20995
20996        jQuery.validator.addMethod("email", function(value, element) {
20997            return this.optional( element ) || /^([a-z0-9_\-]+)(\.[a-z0-9_\-]+)*@([a-z0-9_\-]+\.)+[a-z]+$/.test( value );
20998        }, "メールアドレスの形式で入力してください。");
20999
21000        jQuery.validator.addMethod("birthday", function(value, element) {
21001            if(form.dom.find("select[name=BIRTH_DATE_Y]").val() || form.dom.find("select[name=BIRTH_DATE_M]").val() || form.dom.find("select[name=BIRTH_DATE_D]").val()){
21002                if(!$(element).val()){
21003                   return false
21004                }
21005            }
21006            return true;
21007        }, "生年月日を入力してください");
21008
21009        jQuery.validator.addMethod("f_birthday", function(value, element) {
21010            var _number = $(element).parents(".form-cmn-section-wrapper").data("viewnumber");
21011			var _suf = "";
21012			if(_number){
21013				_suf = "_"+("00"+_number).substr(-2);
21014			}
21015			
21016            if(form.dom.find("select[name=F_BIRTH_DATE_Y"+_suf+"]").val() || form.dom.find("select[name=F_BIRTH_DATE_M"+_suf+"]").val() || form.dom.find("select[name=F_BIRTH_DATE_D"+_suf+"]").val()){
21017                if(!$(element).val()){
21018                   return false
21019                }
21020            }
21021            return true;
21022        }, "生年月日を入力してください");
21023
21024        jQuery.validator.addMethod("c_check_date", function(value, element) {
21025            if(form.dom.find("select[name=C_CHECK_DATE_Y]").val() || form.dom.find("select[name=C_CHECK_DATE_M]").val() || form.dom.find("select[name=C_CHECK_DATE_D]").val()){
21026                if(!$(element).val()){
21027                   return false
21028                }
21029            }
21030            return true;
21031        }, "次回車検日を選択してください");
21032
21033        jQuery.validator.addMethod("f_check_date", function(value, element) {
21034            var _number = $(element).parents(".form-cmn-section-wrapper").data("viewnumber");
21035			var _suf = "";
21036			if(_number){
21037				_suf = "_"+("00"+_number).substr(-2);
21038			}
21039
21040            if(form.dom.find("select[name=F_CHECK_DATE_Y"+_suf+"]").val() || form.dom.find("select[name=F_CHECK_DATE_M"+_suf+"]").val() || form.dom.find("select[name=F_CHECK_DATE_D"+_suf+"]").val()){
21041                if(!$(element).val()){
21042                   return false
21043                }
21044            }
21045            return true;
21046        }, "次回車検日を選択してください");
21047
21048        jQuery.validator.addMethod("telseparate", function(value, element) {
21049            var container = $(element).parents(".form-input-container");
21050            if(container.find(".tel-input:nth-child(1)").val() || container.find(".tel-input:nth-child(2)").val() || container.find(".tel-input:nth-child(3)").val()){
21051                if(!$(element).val()){
21052                   return false
21053                }
21054            }
21055            return true;
21056        }, "電話番号を入力してください");
21057
21058        jQuery.validator.addMethod("tel2separate", function(value, element) {
21059            var container = $(element).parents(".form-input-container");
21060            if(container.find(".tel-input:nth-child(1)").val() || container.find(".tel-input:nth-child(2)").val() || container.find(".tel-input:nth-child(3)").val()){
21061                if(!$(element).val()){
21062                   return false
21063                }
21064            }
21065            return true;
21066        }, "電話番号(携帯)を入力してください");
21067
21068
21069        jQuery.validator.addMethod("telmax", function(value, element) {
21070            var container = $(element).parents(".form-input-container");
21071            var len1 = $(container.find(".tel-input")[0]).val() ? String($(container.find(".tel-input")[0]).val()).length : 0;
21072            var len2 = $(container.find(".tel-input")[1]).val() ? String($(container.find(".tel-input")[1]).val()).length : 0;
21073            var len3 = $(container.find(".tel-input")[2]).val() ? String($(container.find(".tel-input")[2]).val()).length : 0;
21074            
21075            if(len1+len2+len3 > 13){
21076                if($(element).is($(container.find(".tel-input")[0]))){
21077                    return false
21078                }
21079            }
21080            return true;
21081        }, "電話番号を13桁以内で入力してください");
21082        jQuery.validator.addMethod("tel2max", function(value, element) {
21083            var container = $(element).parents(".form-input-container");
21084            var len1 = $(container.find(".tel-input")[0]).val() ? String($(container.find(".tel-input")[0]).val()).length : 0;
21085            var len2 = $(container.find(".tel-input")[1]).val() ? String($(container.find(".tel-input")[1]).val()).length : 0;
21086            var len3 = $(container.find(".tel-input")[2]).val() ? String($(container.find(".tel-input")[2]).val()).length : 0;
21087            
21088            if(len1+len2+len3 > 13){
21089                if($(element).is($(container.find(".tel-input")[0]))){
21090                    return false
21091                }
21092            }
21093            return true;
21094        }, "電話番号(携帯)を13桁以内で入力してください");
21095
21096        //郵便番号チェック
21097        jQuery.validator.addMethod("zipcode", function(value, element) {
21098            $(element).parents(".form-zip").find(".error-view .error").remove();
21099            if (form.isSearchAdressFromZip) {
21100                //if (value == "") return false;
21101            }
21102            return this.optional(element) || /^[0-9]{3}[\-]?[0-9]{4}$/.test(value);
21103        }, "郵便番号を正しく入力してください。");
21104
21105		if($(".form-0001").data("type") == "onlinersv"){
21106			var _obj = {
21107				"setDate": function( _val){
21108					var _el = $('select[name="HOPE_DATE"]');
21109					_el.find("option").remove();
21110					if(_val != ""){
21111					_el.append($('<option>').html(_val.substr(0,4)+"年"+_val.substr(4,2)+"月"+_val.substr(6,2)+"日").val(_val));
21112					}
21113				},
21114				"setTime": function( _val){
21115					var _el = $('select[name="HOPE_TIME"]');
21116					_el.find("option").remove();
21117					if(_val != ""){
21118					_el.append($('<option>').html(_val.substr(0,2)+"時"+_val.substr(2,2)+"分").val(_val));
21119					}
21120				},
21121				"defaultData":{
21122					date:$("select[name='HOPE_DATE']").val(),
21123					time:$("select[name='HOPE_TIME']").val()
21124				},
21125				"image_path":$('input[name="IMAGE_PATH"]').val(),
21126				"errorListener":function(_func){
21127					DMS.onlineRsvUiErrorListener = _func;
21128				}
21129				
21130			};
21131
21132			DMS.onlineRsvUi(online_rsv_data, $(".online_rsv_ui"), _obj);
21133		}
21134
21135
21136		$(el).find(".form-cmn-button-add").click(function(){
21137
21138			for(var i=9;i>=0;i--){
21139				var _suffix_i = "";
21140				if(i > 0){
21141					_suffix_i = "-"+i;
21142				}
21143				var _familyset = $(".form-0001 .form-cmn-familyset"+_suffix_i);
21144				if(_familyset.length > 0){
21145					if(_familyset.is(":visible")){
21146						var _familyset = $(".form-0001 .form-cmn-familyset-"+(i+1));
21147						_familyset.show();
21148
21149						DMS.FormCommon.addFamilySetRule(_familyset);
21150
21151
21152
21153						if(i+1 >= 9){
21154							$(this).hide();
21155						}
21156						break;
21157					}
21158				}
21159			}
21160		});
21161
21162
21163
21164		$(el).find(".form-cmn-section-button-remove").click(function(){
21165			var _num = parseInt($(this).data("viewnumber"), 10);
21166	        if(DMS.isInlineframe()){
21167	            $(document).on('parentWindowUpdate',function(e){
21168	                fancyboxOption = iframeFancyboxOptions;
21169					_last_num = _num
21170	                showRemoveModal();
21171	            })
21172	        }else{
21173	            fancyboxOption = normalFancyboxOption;
21174				_last_num = _num
21175	            showRemoveModal();    
21176	        }
21177		});
21178
21179
21180		var _type = $(el).data("type");
21181		if(_type == "stock"){
21182			$(el).find(".form-service input").change(function(){
21183				var _count = 0;
21184				$(el).find(".form-service input").each(function(_index, _element){
21185					var _v = $(_element).prop('checked');
21186					if(_v) _count++;
21187				});
21188				if(_count > 0){
21189					$(".form-service .error-view label").addClass("valid").text("");
21190				}
21191			});
21192		}
21193
21194		function sortFamilySet(_num){
21195			for(var i=9;i>=_num;i--){
21196				var _lastset = $(".form-0001 .form-cmn-familyset-"+i);
21197				if(_lastset.is(":visible")){
21198					_lastset.hide();
21199
21200					DMS.FormCommon.removeFamilySetRule(_lastset);
21201
21202
21203					for(var j=_num;j<=9;j++){
21204						var _el1 = $(".form-0001 .form-cmn-familyset-"+(j+1));	
21205						var _el2 = $(".form-0001 .form-cmn-familyset-"+j);	
21206						DMS.FormCommon.copyAndClearFamilySet(_el1, _el2);
21207					}
21208					break;
21209				}
21210			}
21211
21212			for(var i=0;i<=9;i++){
21213				var _suffix_i = "";
21214				if(i > 0){
21215					_suffix_i = "-"+i;
21216				}
21217				var _familyset = $(".form-0001 .form-cmn-familyset"+_suffix_i);
21218				var _el1_input = $(_familyset).find("input");
21219				for(var j=0;j<_el1_input.length;j++){
21220					var _type = $(_el1_input[j]).attr("type") ;
21221					if(_type  == "text"){
21222						if( $(_el1_input[j]).val() || $(_el1_input[j]).hasClass("error") ){
21223							$(_el1_input[j]).valid();
21224						}
21225					}else if(_type == "radio"){
21226						if($(_el1_input[j]).prop('checked') || $(_el1_input[j]).hasClass("error") ){
21227							$(_el1_input[j]).valid();
21228						}
21229					}
21230				}
21231				var _el1_select = $(_familyset).find("select");
21232				for(var j=0;j<_el1_select.length;j++){
21233					if($(_el1_select[j]).val()  || $(_el1_select[j]).hasClass("error") ){
21234						$(_el1_select[j]).valid();
21235					}
21236				}
21237			}
21238
21239
21240			$(".form-0001 .form-cmn-button-add").show();
21241		}
21242
21243
21244
21245        function showRemoveModal(){
21246             $.fancybox("#select-remove",fancyboxOption);
21247        }
21248
21249		if($(".form-0001").data("type") == "enquete"){
21250			//modal button
21251			var _last_num = undefined;
21252	         $('.btn-select-remove__yes div').on('click',function(){
21253				sortFamilySet(_last_num);
21254	            $.fancybox.close();
21255	            return false;
21256	         });
21257	
21258	         $('.btn-select-remove__cancel div').on('click',function(){
21259	            $.fancybox.close();
21260	            return false;
21261	         });
21262
21263			// 10人目まで初期表示している場合は追加ボタン or 家族情報セットがない場合 は表示しない
21264			if($(".form-cmn-familyset-9").is(":visible") || !$(".form-cmn-familyset").is(":visible")){
21265				$(".form-0001 .form-cmn-button-add").hide();
21266			}
21267
21268			var _el = $(".form-cmn-familyset");
21269			for(var j=0;j<_el.length;j++){
21270				var _target = $(_el[j]).find(".form-cmn-table__title");
21271				for(var k=0;k<_target.length;k++){
21272					$(_target[k]).append("<div class='form-cmn-table__number'>1人目</div>");
21273				}
21274			}
21275			for(var i=1;i<=9;i++){
21276				var _el = $(".form-cmn-familyset-"+i);
21277				//初期表示状態で値が入っている場合は表示(確認画面から戻る場合)
21278				if(DMS.FormCommon.checkEmptyInFamilySet(_el)){
21279					_el.show();
21280
21281					DMS.FormCommon.addFamilySetRule(_el);
21282
21283				}else{
21284				}
21285				for(var j=0;j<_el.length;j++){
21286					var _target = $(_el[j]).find(".form-cmn-table__title");
21287	//console.log("title "+i+" "+j+" "+_target.length);
21288					for(var k=0;k<_target.length;k++){
21289						$(_target[k]).append("<div class='form-cmn-table__number'>"+($(_el[j]).data("viewnumber")+1)+"人目</div>");
21290					}
21291				}
21292			}
21293		}
21294
21295		if(window["FORM_REST_DATA"] && typeof window["FORM_REST_DATA"] == "object"){
21296				var _start_time = parseInt(window["FORM_REST_DATA"].START.replaceAll(":",""),10);
21297				var _end_time = parseInt(window["FORM_REST_DATA"].END.replaceAll(":",""),10);
21298
21299				function checkOptionTimeAndDisable(_name){
21300					var _el = $("select[name="+_name+"]");
21301					if(_el && $(_el).length){
21302						var _option = $(_el).find("option");
21303	//					console.log(_option.length);
21304						for(var i=0;i<_option.length;i++){
21305							var _value = $(_option[i]).attr("value");
21306	//						console.log(_value);
21307							if(_start_time <= _value && _value < _end_time){
21308	//							console.log("disabled");
21309								$(_option[i]).attr("disabled", "disabled").attr("selected", false);
21310							}
21311						}
21312					}
21313				}
21314
21315				checkOptionTimeAndDisable("HOPE_TIME");
21316				checkOptionTimeAndDisable("HOPE_TIME2");
21317				checkOptionTimeAndDisable("HOPE_TIME3");
21318		}
21319    });
21320});
21321
21322(function(global) {
21323
21324    function inherit(p) {
21325        if (p == null) throw TypeError();
21326        if (Object.create) return Object.create(p);
21327
21328        var t = typeof p;
21329        if (t !== "object" && t !== "function") throw TypeError();
21330
21331        function f() {};
21332        f.prototype = p;
21333        return new f();
21334    }
21335
21336    global.inherit = inherit;
21337
21338
21339    /* =========================================================
21340    
21341     Form
21342     
21343    ========================================================= */
21344    var Form = (function() {
21345        function Form(dom) {
21346            this.dom = dom;
21347            this.formObject = this.dom.find('.form');
21348            this.isAgreement = false;
21349            this.isSearchAdressFromZip = false;
21350            this.nextButton = this.dom.find(".form-btn-next");
21351            this.checkAgreement = this.dom.find("input[name=form_agreement]");
21352            this.isSubmitActive = this.checkAgreement.prop("checked");
21353        }
21354
21355        Form.prototype.init = function() {
21356            var that = this;
21357            
21358            //次へを押した時
21359            this.dom.find('.form-btn-next').on('click',function(){
21360                if(!that.isSubmitActive) return false;
21361                if(that.formObject.valid()){
21362					if($(".form-0001").data("type") == "enquete"){
21363						DMS.FormCommon.removeAndSortFamilySet();
21364					}
21365                    that.formObject[0].submit();
21366                }
21367                return false;
21368            });
21369
21370            if(this.dom.find('input[name=RECRUIT_INFORM]').length > 0){
21371                that.checkRecruitContact(this.dom.find('input[name=RECRUIT_INFORM]:checked').val());
21372
21373                this.dom.find('input[name=RECRUIT_INFORM]').on('change',function(e){
21374                    that.checkRecruitContact($(this).val());
21375                });    
21376            }
21377            
21378            if(this.dom.find('input[name=img_placeholder]').length > 0){
21379                this.dom.find('input[name=img_placeholder]').on('change',function(e){
21380                    var previewArea = $(this).parents(".form-cmn-img-upload").find(".form-cmn-img-preview");
21381                    var hidden = $(this).parents(".form-cmn-img-upload").find(".form-cmn-img-value");
21382                    var file = this.files[0];
21383                    var img = new Image();
21384                    var preview = new Image();
21385                    var reader  = new FileReader();
21386                    var labelButton = $(this).parents(".form-cmn-img-upload").find("label.select-image");
21387                    var deleteButton = $(this).parents(".form-cmn-img-upload").find("div.delete-button");
21388					$(this).parents(".form-cmn-img-upload").find(".error-view").empty();
21389					var _file_prop = $(this).prop('files')[0];
21390					
21391					
21392					if(_file_prop["size"] > 10485760){
21393						// size check
21394						$(this).val('');
21395						deleteButton.hide();
21396						$(this).parents(".form-cmn-img-upload").find(".error-view").append('<label class="error" >容量が10MB以内の画像を選択してください。</label>');
21397						return;
21398					}
21399					if (! file.type.match('image.*') ) {
21400						// image check
21401						$(this).val('');
21402						deleteButton.hide();
21403						$(this).parents(".form-cmn-img-upload").find(".error-view").append('<label class="error" >jpg,png,gifのいずれかを選択してください。</label>');
21404						return;
21405					}else if(file.type != "image/jpeg" && file.type != "image/gif" && file.type != "image/png" ) {
21406						$(this).val('');
21407						deleteButton.hide();
21408						$(this).parents(".form-cmn-img-upload").find(".error-view").append('<label class="error" >jpg,png,gifのいずれかを選択してください。</label>');
21409						return;
21410					}
21411                    reader.addEventListener("load", function () {
21412
21413						var target_size = 2560;
21414				        var image = new Image();
21415				        image.onload = function(){
21416
21417							var _ret = EXIF.getData(image, function() {
21418						        var _tags = EXIF.getAllTags(this);
21419								var _orientation = 1;
21420
21421								if(_tags["Orientation"]){
21422									_orientation = _tags["Orientation"];
21423								}else{
21424								}
21425
21426
21427								var m_canvas = document.createElement('canvas');
21428								var _w;
21429								var _h;
21430								if(image.width < target_size && image.height < target_size){
21431									_w = image.width;
21432									_h = image.height;
21433								}else{
21434									if(image.width > image.height){
21435										var _w = target_size;
21436										var _h = image.height / image.width * target_size;
21437									}else{
21438										var _w = image.width / image.height * target_size;
21439										var _h = target_size;
21440									}
21441								}
21442
21443								var ctx = m_canvas.getContext("2d");
21444								ctx.save();
21445								switch(_orientation){
21446									case 2:
21447										m_canvas.width = _w;
21448										m_canvas.height = _h;
21449										ctx.transform(-1,0,0,1,_w,0); // 水平反転
21450										ctx.drawImage(image, 0,0, _w, _h);
21451										break;
21452									case 3:
21453										m_canvas.width = _w;
21454										m_canvas.height = _h;
21455										ctx.transform(-1,0,0,-1,_w,_h); // 水平垂直反転
21456										ctx.drawImage(image, 0,0, _w, _h);
21457										break;
21458									case 4:
21459										m_canvas.width = _w;
21460										m_canvas.height = _h;
21461										ctx.transform(1,0,0,-1,0,_h); // 垂直反転
21462										ctx.drawImage(image, 0,0, _w, _h);
21463										break;
21464									case 5:
21465										// 反転270度回転
21466										m_canvas.width = _h;
21467										m_canvas.height = _w;
21468										ctx.rotate(270 * Math.PI/180);
21469										ctx.transform(-1,0,0,1,_w,0); // 水平反転
21470										ctx.drawImage(image, _w, 0, _w, _h);
21471										break;
21472									case 8:
21473										// 270度回転
21474										m_canvas.width = _h;
21475										m_canvas.height = _w;
21476										ctx.rotate(270 * Math.PI/180);
21477										ctx.drawImage(image, -_w, 0, _w, _h);
21478										break;
21479									case 7:
21480										// 反転90度回転
21481										m_canvas.width = _h;
21482										m_canvas.height = _w;
21483										ctx.transform(-1,0,0,1,_h,0); // 水平反転
21484										ctx.rotate(-90 * Math.PI/180);
21485										ctx.drawImage(image,-_w, 0, _w, _h);
21486										break;
21487									case 6:
21488										// 90度回転 
21489										m_canvas.width = _h;
21490										m_canvas.height = _w;
21491										ctx.rotate(90 * Math.PI/180);
21492										ctx.drawImage(image, 0, -Math.floor(_h), _w, _h);
21493										break;
21494									default:
21495									case 1:
21496										m_canvas.width = _w;
21497										m_canvas.height = _h;
21498										ctx.drawImage(image, 0,0, _w, _h);
21499										break;
21500								}
21501
21502
21503								var originalBinary = m_canvas.toDataURL("image/jpeg", 0.8);
21504
21505								if(_file_prop["size"] > originalBinary.length || _orientation != 1){
21506				                    preview.src = originalBinary;
21507				                    previewArea.html(preview);
21508				                    hidden.val(originalBinary);
21509								}else{
21510				                    preview.src = reader.result;
21511				                    previewArea.html(preview);
21512				                    hidden.val(reader.result);
21513								}
21514				                $(document).trigger("formFrameUpdate");
21515
21516
21517						    });
21518						}
21519				        image.src = reader.result;
21520
21521
21522
21523                        labelButton.hide();
21524                        deleteButton.show();
21525                    }, false);
21526                    if (file) {
21527                        reader.readAsDataURL(file);
21528                    }
21529                });
21530            }
21531            this.dom.find("div.delete-button").click(function(){
21532            	$(this).parent().find('input[name=img_placeholder]').val(null);
21533            	$(this).parent().find(".form-cmn-img-preview").empty();
21534            	$(this).parent().find("label.select-image").show();
21535            	$(this).parent().find(".form-cmn-img-value").val('');
21536            	$(this).hide();
21537            });
21538            this.dom.find("div.form-cmn-img-preview img").each(function(){
21539                var labelButton = $(this).parents(".form-cmn-img-upload").find("label.select-image");
21540                var deleteButton = $(this).parents(".form-cmn-img-upload").find("div.delete-button");
21541                labelButton.hide();
21542                deleteButton.show();
21543            });
21544            
21545            this.checkUnitWrapperId();
21546
21547            //規約に同意するチェックボックス
21548            this.checkAgreement.on('change', function() {
21549                that.isSubmitActive = that.checkAgreement.prop("checked");
21550                that.checkNextBtn();
21551            });
21552
21553            this.checkNextBtn();
21554            this.dom.find('.js-get-address-from-zip').on('click',function(e){
21555                that.getAddressByZipcode(this);
21556                return false;
21557            });
21558        };
21559        Form.prototype.checkUnitWrapperId = function() {
21560            var id = this.dom.parents(".unit-wrapper").attr('id');
21561            if(id){
21562                var hidden = '<input type="hidden" name="unit-wrapper_id" value="'+id+'" />';
21563                this.dom.find('form').append(hidden);    
21564            }
21565        }
21566
21567        Form.prototype.checkRecruitContact = function(value) {
21568            var that = this;
21569            if(value.indexOf(DMS.RECRUIT_INFORM_KEY) > -1){
21570                that.dom.find('input[name=RECURUIT_ZIP]').prop('disabled',true);
21571                that.dom.find('select[name=RECURUIT_PREF]').prop('disabled',true);
21572                that.dom.find('input[name=RECURUIT_CITY]').prop('disabled',true);
21573                that.dom.find('input[name=RECURUIT_STREET]').prop('disabled',true);
21574                that.dom.find('input[name=RECURUIT_BUILDING]').prop('disabled',true);
21575                that.dom.find('input[name=RECURUIT_TEL]').prop('disabled',true);
21576            }else{
21577               that.dom.find('input[name=RECURUIT_ZIP]').prop('disabled',false);
21578                that.dom.find('select[name=RECURUIT_PREF]').prop('disabled',false);
21579                that.dom.find('input[name=RECURUIT_CITY]').prop('disabled',false);
21580                that.dom.find('input[name=RECURUIT_STREET]').prop('disabled',false);
21581                that.dom.find('input[name=RECURUIT_BUILDING]').prop('disabled',false);
21582                that.dom.find('input[name=RECURUIT_TEL]').prop('disabled',false);
21583            }
21584        };
21585
21586        //次へボタンのアクティブ非アクティブの設定
21587        Form.prototype.checkNextBtn = function() {
21588            if (this.isSubmitActive) {
21589                this.nextButton.removeClass('is-disable');
21590            } else {
21591                this.nextButton.addClass('is-disable');
21592            }
21593        };
21594
21595        //iframeの場合と通常の場合で処理を分けるため抽象化
21596        Form.prototype.scrollTo = function(offset,isSkip) {
21597            DMS.formScroll(offset,isSkip);
21598        };
21599
21600		//店舗のエリア絞り込み
21601        Form.prototype.initArea = function() {
21602            var that = this;
21603           
21604           // event check
21605            this.dom.find('select[name=HOPE_AREA_ID]').on('change',function(e){
21606				that.initAreaMain($(this));
21607            })
21608            // first check
21609            this.dom.find('select[name=HOPE_AREA_ID]').each(function(){
21610
21611							var optionsArray = $('select[name=HOPE_STORE_ID]').children().map(function() {
21612							  return {
21613							    value: $(this).val(),
21614							    text: $(this).text()
21615							  };
21616							}).get();
21617
21618							var jsonResult = JSON.stringify(optionsArray);
21619
21620							$(this).data("json", jsonResult);
21621	            var target_value = that.dom.find('select[name=HOPE_STORE_ID] option:selected').val();
21622            	that.initAreaMain($(this), target_value);
21623            });
21624
21625        };
21626        Form.prototype.initAreaMain = function(_target, _target_value) {
21627            var that = this;
21628			var _all_flag = false;
21629			if(!_target.val()){
21630				_all_flag = true;
21631			}
21632			var _shop_id_set = _target.val().split(":");
21633			if(_shop_id_set.length > 1){
21634				var _shop_id_ary = _shop_id_set[1].split(";");
21635			}else{
21636				var _shop_id_ary = "";
21637			}
21638
21639			var _this_dom = this.dom.find('select[name=HOPE_STORE_ID]')
21640			$(_this_dom).empty();
21641			var jsonData = JSON.parse(this.dom.find('select[name=HOPE_AREA_ID]').data('json'));
21642
21643			jsonData.forEach(function(_obj){
21644
21645				var _flag = false;
21646				if(_obj.value){
21647					for(var i=0;i<_shop_id_ary.length;i++){
21648						if(_shop_id_ary[i] == _obj.value){
21649							_flag = true;
21650						}
21651					}
21652				}
21653				if(!_flag && !_all_flag){
21654
21655				}else{
21656					var _tag = '<option value="'+_obj.value+'">'+_obj.text+'</option>';
21657					$(_this_dom).append(_tag)
21658				}
21659			});
21660			this.dom.find('select[name=HOPE_STORE_ID]').each(function(){
21661				if(_target_value){
21662					    $(this).find("option[value='"+_target_value+"']").prop('selected',true);
21663				}else{
21664					$(this).val("");
21665				}
21666			});
21667		}
21668
21669        //店舗選択時の営業日チェック
21670        Form.prototype.initCheckDate = function() {
21671            var that = this;
21672           
21673            this.dom.find('select[name=HOPE_STORE_ID]').on('change',function(e){
21674                that.setDateOption();
21675                that.checkDate($(this).val());
21676            })
21677
21678            if(this.dom.find('select[name=HOPE_STORE_ID]').length <= 0 || this.dom.find('select[name=HOPE_STORE_ID]').val()){
21679	            that.setDateOption();
21680							this.dom.find('select[name=HOPE_STORE_ID]').each(function(){
21681	                that.checkDate($(this).val());
21682							});
21683						}
21684
21685        };
21686
21687        //
21688        Form.prototype.initCheckDateFirst = function() {
21689            var that = this;
21690            
21691            if(this.dom.find('select[name=HOPE_STORE_ID]').length > 0){
21692                if(!window.formShopList) return;
21693                var val = this.dom.find('select[name=HOPE_STORE_ID]').val();
21694
21695                this.checkDate(val);
21696            }
21697            if(this.dom.find('input[type=hidden][name=HOPE_STORE_ID]').length > 0){
21698                if(!window.formShopList) return;
21699                var val = this.dom.find('input[type=hidden][name=HOPE_STORE_ID]').val();
21700
21701                this.checkDate(val);
21702            }
21703
21704						if(window["hope_date_json"]){
21705							if(hope_date_json["hope_date_1"]){
21706								this.dom.find('select[name=HOPE_DATE]').val(hope_date_json["hope_date_1"]);
21707							}
21708							if(hope_date_json["hope_date_2"]){
21709								this.dom.find('select[name=HOPE_DATE2]').val(hope_date_json["hope_date_2"]);
21710							}
21711							if(hope_date_json["hope_date_3"]){
21712								this.dom.find('select[name=HOPE_DATE3]').val(hope_date_json["hope_date_3"]);
21713							}
21714						}
21715        }
21716        Form.prototype.initServiceCheckBox = function() {
21717
21718			var that = this;
21719			$('input[name^="SERVICE_NAME"]').change(function(){
21720				that.checkServiceCheckBox();
21721			});
21722			
21723			this.checkServiceCheckBox();
21724
21725		}
21726
21727        Form.prototype.checkServiceCheckBox = function() {
21728				var _result = $('input[name^="SERVICE_NAME"]:checked');
21729				if(_result.length < 4){
21730					$('input[name^="SERVICE_NAME"]').each(function(index, element){
21731						$(element).parents(".form-cmn-radio-box").removeClass("no-select-checkbox");
21732					$(element).attr("tabindex", 0);
21733					});
21734				}else{
21735					$('input[name^="SERVICE_NAME"]').each(function(index, element){
21736						var _r = $(element).prop('checked');
21737						if(_r){
21738							$(element).parents(".form-cmn-radio-box").removeClass("no-select-checkbox");
21739						$(element).attr("tabindex", 0);
21740						}else{
21741							$(element).parents(".form-cmn-radio-box").addClass("no-select-checkbox");
21742						$(element).attr("tabindex", -1);
21743						}
21744					});
21745				}
21746			
21747		}
21748
21749				Form.prototype.setDateOption = function(){ // henkou
21750					var _youbi = ["日", "月", "火", "水", "木", "金", "土"];
21751					if($(".form-0001").data("visit-after-day")){
21752						var _afterday = parseInt($(".form-0001").data("visit-after-day"),10);
21753					}else{
21754						var _afterday = 0;
21755					}
21756					if($(".form-0001").data("visit-after-day-kind")){
21757						var _afterdaykind = parseInt($(".form-0001").data("visit-after-day-kind"),10);
21758					}else{
21759						var _afterdaykind = 1;
21760					}
21761					var _html = '<option value="" selected=""></option>\n'
21762						var _sd = new Date();
21763            var _store_id = this.dom.find('select[name=HOPE_STORE_ID]').val();
21764						if(!_store_id){
21765							_store_id = this.dom.find('input[name=HOPE_STORE_ID]').val();
21766						}
21767						var _option_cnt = 0;
21768						var _option_first_skip_cnt = 0;
21769						if($(".form-0001").data("visit-select-num")){
21770							var _select_num = parseInt($(".form-0001").data("visit-select-num"),10);
21771						}else{
21772							var _select_num = 50;
21773						}
21774		        for(var i=0;i<200 && _option_cnt < _select_num;i++){
21775						  var _d_y = _sd.getFullYear();
21776						  var _d_m = _sd.getMonth() + 1;
21777						  var _d_d = _sd.getDate();
21778							var _dt_str = _d_y+String(_d_m).padStart(2,"0")+String(_d_d).padStart(2,"0");
21779//							console.log(_dt_str);
21780							if(_option_first_skip_cnt < _afterday){
21781								if(_afterdaykind != 2){
21782										_option_first_skip_cnt++;
21783								}else{
21784									var _chk_ret = this.checkHolidayInOption(_store_id, _dt_str)
21785									if(!_chk_ret) {
21786										// 定休日ではない
21787										_option_first_skip_cnt++;
21788									}
21789								}
21790							}else{
21791									_html += '<option value="'+_dt_str+'" >'+_d_y+'年'+String(_d_m).padStart(2,"0")+'月'+String(_d_d).padStart(2,"0")+'('+_youbi[_sd.getDay()] +')</option>\n';
21792									_option_cnt++;
21793							}
21794							_sd.setDate(_sd.getDate() + 1);
21795						}
21796
21797						var val = this.dom.find('select[name=HOPE_DATE]').val();
21798						var val2 = this.dom.find('select[name=HOPE_DATE2]').val();
21799						var val3 = this.dom.find('select[name=HOPE_DATE3]').val();
21800           this.dom.find('select[name=HOPE_DATE]').empty();
21801           this.dom.find('select[name=HOPE_DATE2]').empty();
21802           this.dom.find('select[name=HOPE_DATE3]').empty();
21803           this.dom.find('select[name=HOPE_DATE]').append(_html);
21804           this.dom.find('select[name=HOPE_DATE2]').append(_html);
21805           this.dom.find('select[name=HOPE_DATE3]').append(_html);
21806           this.dom.find('select[name=HOPE_DATE]').val(val);
21807           this.dom.find('select[name=HOPE_DATE2]').val(val2);
21808           this.dom.find('select[name=HOPE_DATE3]').val(val3);
21809				}
21810        Form.prototype.checkHolidayInOption = function(_shop_id, _dt_str) {
21811            selectStore = formShopList["shop_id_"+_shop_id];
21812            if(selectStore && selectStore["shop_event"]){
21813	            for (var key in selectStore.shop_event){
21814	                if(key == 300001) continue;
21815	                var shopEventList = selectStore.shop_event[key];
21816
21817	                for (var i = 0; i < shopEventList.length; i++) {
21818	                    var eventItem = shopEventList[i];
21819											
21820	                    if(this.isHoliday(eventItem.info)){
21821	//											console.log(eventItem);
21822												var _holiday_date = eventItem.event_date.replace(/-/g,"");
21823//												console.log(_holiday_date+" "+_dt_str);
21824												if(_holiday_date == _dt_str){
21825													return true;
21826												}
21827	                    }
21828	                };
21829	            }
21830							return false;
21831						}else{
21832							return false;
21833						}
21834				}
21835
21836        Form.prototype.checkDate = function(val) {
21837            var that = this;
21838            var selectStore;
21839            var holidayList = [];
21840
21841            holidayList = [];
21842            selectStore = formShopList["shop_id_"+val];
21843            if(selectStore && selectStore["shop_event"]){
21844	            for (var key in selectStore.shop_event){
21845	                if(key == 300001) continue;
21846	                var shopEventList = selectStore.shop_event[key];
21847
21848	                for (var i = 0; i < shopEventList.length; i++) {
21849	                    var eventItem = shopEventList[i];
21850	                    if(that.isHoliday(eventItem.info)){
21851	                        var date = eventItem.event_date.replace(/-/g,"");
21852	                        holidayList.push(date);
21853	                    }
21854	                };
21855	            }
21856            }
21857            
21858            that.checkDisable(holidayList);
21859            that.checkDisableHopeTimeSelect(holidayList);
21860        }
21861
21862        //営業日が先に選択されていて店舗を選んだ時にそれが定休日だった時
21863        Form.prototype.checkDisable = function(holidayList) {
21864            for (var i = 0; i < holidayList.length; i++) {
21865              
21866                if(this.dom.find('select[name=HOPE_DATE]').val() == holidayList[i]){
21867                    this.dom.find('select[name=HOPE_DATE]').val("");
21868                }
21869                if(this.dom.find('select[name=HOPE_DATE2]').val() == holidayList[i]){
21870                    this.dom.find('select[name=HOPE_DATE2]').val("");
21871                }
21872                if(this.dom.find('select[name=HOPE_DATE3]').val() == holidayList[i]){
21873                    this.dom.find('select[name=HOPE_DATE3]').val("");
21874                }
21875            };
21876            
21877        }
21878        //各希望日時のチェック
21879        Form.prototype.checkDisableHopeTimeSelect = function(holidayList) {
21880            this.disableOption(this.dom.find('select[name=HOPE_DATE] option'),holidayList);
21881            this.disableOption(this.dom.find('select[name=HOPE_DATE2] option'),holidayList);
21882            this.disableOption(this.dom.find('select[name=HOPE_DATE3] option'),holidayList);
21883            
21884        };
21885
21886        //holidaylistから該当の選択肢を非アクティブにするか判定
21887        Form.prototype.disableOption = function(optionObject,holidayList){
21888            optionObject.each(function(index, el) {
21889                $(el).removeAttr('disabled');
21890                for (var i = 0; i < holidayList.length; i++) {
21891                    if($(el).attr('value') == holidayList[i]){
21892                        $(el).attr('disabled','disabled');
21893                    }
21894                };
21895            });
21896        }
21897
21898        //event infoをみて休日を意味するのか判定
21899        Form.prototype.isHoliday = function(info) {
21900            for (var i = 0; i < DMS.HOLIDAY.length; i++) {
21901                if(info["type_id"] == DMS.HOLIDAY[i]){
21902                    return true;
21903                }
21904            }
21905            return false;
21906
21907        };
21908
21909        function setCommonRule(ruleName,value,exclude){
21910            if(!exclude) exclude = [];
21911            for(var formName in DMS["form_validation_rules"].rules){
21912                var isExclude = false;
21913                for (var i = 0; i < exclude.length; i++) {
21914                    if(exclude[i] == formName){
21915                        isExclude = true;
21916                    }
21917                }
21918                if(isExclude) continue;
21919                DMS["form_validation_rules"].rules[formName][ruleName] = value;
21920            }
21921        }
21922
21923
21924        Form.prototype.checkObjectAndValid = function(_element){
21925			if(_element.length){
21926				_element.valid();
21927			}
21928		}
21929
21930       //リアルタイムバリデーションの初期化
21931        Form.prototype.initValidater = function() {
21932            var that = this;
21933            $.validator.setDefaults({ ignore: [] });
21934            setCommonRule("prohibited",true,[
21935                "IMG_DATA_TMP_1","IMG_DATA_TMP_2","IMG_DATA_TMP_3"
21936            ]);
21937            setCommonRule("checkSjis",true);
21938
21939			if($(".form-policy-toyota-terms input[name=JP_AGREEMENT_FLG]").val()){
21940				DMS["form_validation_rules"].rules["JP_AGREEMENT_FLG"] = {required:true};
21941				DMS["form_validation_rules"].messages ["JP_AGREEMENT_FLG"] = {required:"ご希望を選択してください。"};
21942			}
21943
21944
21945			var _tel_target=["TEL1_1","TEL1_2","TEL1_3","TEL2_1","TEL2_2","TEL2_3"];
21946			for(var i=0;i<_tel_target.length;i++){
21947	            this.dom.find("input[name="+_tel_target[i]+"]").on('blur',function(){
21948					that.checkObjectAndValid($(this));
21949            });
21950			}
21951
21952			var _kanji_target=[	"NAME1_SEI","NAME1_MEI","C_NAME_SEI","C_NAME_MEI","C_FAMILY_NAME","F_NAME_SEI","F_NAME_MEI","F_FAMILY_NAME"];
21953			for(var i=0;i<_kanji_target.length;i++){
21954	            this.dom.find(".form-name-kanji input[name="+_kanji_target[i]+"]").on('blur',function(){
21955					that.checkObjectAndValid($(this));
21956            });
21957			}	
21958
21959			var _katakana_target=["NAME2_SEI","NAME2_MEI","C_NAME_SEI_KANA","C_NAME_MEI_KANA","F_NAME_SEI_KANA","F_NAME_MEI_KANA"];
21960			for(var i=0;i<_katakana_target.length;i++){
21961				this.dom.find(".form-name-katakana input[name="+_katakana_target[i]+"]").on('blur',function(){
21962					that.checkObjectAndValid($(this));
21963            });
21964			}	
21965
21966var _validate_obj = {
21967                //ルールとメッセージはPHPの値をもとにhtmlに出力されているものを使用
21968                rules: DMS["form_validation_rules"].rules,
21969                messages: DMS["form_validation_rules"].messages,
21970                // groups:{
21971                //  telset:"TEL1_1 TEL1_2 TEL1_3"
21972                // },
21973                errorPlacement: function(error, element) {
21974                    error.appendTo(element.parents('.form-input-container').find(".error-view"));
21975                },
21976                success: "valid",
21977                focusInvalid: false,
21978                onfocusout: function( element ) {
21979                    if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {
21980                        this.element( element );
21981                    }
21982                    $(document).trigger("formFrameUpdate");
21983                },
21984                invalidHandler: function(form, validator) {
21985
21986                    if (!validator.numberOfInvalids())
21987                        return;
21988
21989					var _min_scroll_target ;
21990					var _min_scroll_top = 99999999;
21991					var _targeterrortype;
21992					for(var i=0;i<validator.errorList.length;i++){
21993						var _tagname = $(validator.errorList[i].element).prop("tagName") ;
21994						var _tag_type = $(validator.errorList[i].element).attr("type");
21995						var _target;
21996						if(_tagname.toLowerCase() == "input" && _tag_type == "hidden"){
21997							_target= $(validator.errorList[i].element).parent();
21998						}else{
21999							_target= validator.errorList[i].element;
22000						}
22001						var _scroll_top = 99999999;
22002						if($(_target).is(":hidden")){
22003							var _scrolltarget = $(_target).parents(".form-cmn-table").data("scrolltarget");
22004							if(_scrolltarget){
22005		                        _scroll_top = $("."+_scrolltarget).offset().top;
22006								_targeterrortype = $(_target).parents(".form-cmn-table").data("targeterrortype");
22007							}
22008						}else{
22009	                        _scroll_top = $(_target).offset().top;
22010	                    }
22011
22012						if(_scroll_top < _min_scroll_top){
22013							_min_scroll_top = _scroll_top;
22014							_min_scroll_target = _scrolltarget;
22015						}
22016						
22017					}
22018
22019					setTimeout(function(){
22020						that.scrollTo(_min_scroll_top);
22021                        if(_targeterrortype){
22022							switch(_targeterrortype){
22023								case 1://即時予約カレンダーUI
22024								if(DMS.onlineRsvUiErrorListener){
22025									DMS.onlineRsvUiErrorListener.call();
22026								}
22027								break;
22028							}
22029						}
22030					},10);
22031                }
22032            };
22033			
22034            this.dom.find('.form').validate(_validate_obj);
22035			global.FormCommon.validate_obj = _validate_obj;
22036
22037			if($(".form-0001").data("type") == "enquete"){
22038				for(var i=1;i<=9;i++){
22039					var _familyset = $(".form-0001 .form-cmn-familyset-"+i);
22040
22041					DMS.FormCommon.removeFamilySetRule(_familyset);
22042				}
22043			}
22044
22045
22046        };
22047
22048
22049        //半角全角変換などの処理系初期化
22050        Form.prototype.initReplaceText = function() {
22051            var that = this;
22052            var stc = $.SuperTextConverter({
22053                zenkakuHyphen: '-'
22054            });
22055            this.dom.find('.form input').on('blur',function(){
22056                if($(this).hasClass('zenkaku') || $(this).hasClass('hankaku') ){
22057                    var originalString = $(this).val();
22058                    var afterString = "";
22059                    var converterOptions = {
22060                        convert: {
22061                            punctuation: true,
22062                            tilda: true,
22063                            exclamation: true,
22064                            question: true,
22065                            space: true,
22066                            hyphen: true
22067                        },
22068                        hyphen:"-",
22069                        zenkakuHyphen: '-',
22070                        zenkakuChilda: '〜'
22071                    };
22072
22073                    if($(this).hasClass('zenkaku')){
22074                        afterString = stc.toZenkaku(originalString, converterOptions);
22075                    }
22076
22077                    if($(this).hasClass('hankaku')){
22078                        afterString = stc.toHankaku(originalString, converterOptions);
22079                    }
22080
22081                    if($(this).hasClass('no-hyphen')){
22082                        afterString = afterString.replace(/\-/g, "");
22083                    }
22084                    
22085                    //伸ばし棒関連の変換
22086                    if($(this).attr('id')=="address_2"){
22087                         afterString.replace(/ー/g, "-");
22088                    }
22089                    if($(this).attr("name")=="NAME2_SEI" || $(this).attr("name")=="NAME2_MEI" || $(this).attr("name")=="NAME1_SEI" || $(this).attr("name")=="NAME1_MEI"){
22090                        afterString = afterString.replace(/-/g, "ー");
22091                    }
22092                    if($(this).attr('id')=="name2_1" || $(this).attr('id')=="name2_2" ){
22093                        afterString = afterString.replace(/-/g, "ー");
22094                    }
22095                    $(this).val(afterString);
22096                }
22097                $(this).valid();
22098            })
22099        };
22100
22101        //mapmasterのAPIを使用して郵便番号から住所を設定する
22102        Form.prototype.getAddressByZipcode = function(clicked) {
22103            var mapmasterApi = DMS.searchAddressApi;
22104            this.isSearchAdressFromZip = true;
22105            var sectonContainer =  $(clicked).parents(".form-cmn-table-cotainer");
22106            sectonContainer.find('.zipcode-error').remove();
22107            var zipContainer = sectonContainer.find(".form-zip");
22108            
22109            if(sectonContainer.find('.form-zip__code input').val() == "") return false;
22110            if (!sectonContainer.find('.form-zip__code input').valid()) return false;
22111            var zip = sectonContainer.find('.form-zip__code input').val();
22112
22113            $.ajax({
22114                url: mapmasterApi,
22115                type: 'GET',
22116                dataType: 'json',
22117                data: {
22118                    zip:zip,
22119                    zl:1,
22120                    ndBase:1
22121                },
22122            })
22123            .done(function(data) {
22124                setAddress(data);
22125            })
22126            .fail(function() {
22127                console.log("error");
22128            })
22129            .always(function() {
22130                console.log("complete");
22131            });
22132            
22133
22134            function setAddress(data){
22135                
22136                if (data["ServerResult"]["Result"]) {
22137                    if (data["ServerResult"]["Result"]["Items"]) {
22138                        var info = data["ServerResult"]["Result"]["Items"][0]["Names"];
22139                        sectonContainer.find(".form-address__pref select option").filter(function(index) {
22140                            return $(this).text() === info.Pref;
22141                        }).prop("selected", true);
22142                        sectonContainer.find(".form-address__city input").val(info.City + info.Oaza + info.Koaza + info.Gaiku);
22143                        return;
22144                    }
22145                }
22146
22147                //郵便番号に誤りがある
22148                if (zipContainer.find(".error").not(".valid").length == 0) {
22149                    zipContainer.find(".error-view").append('<label class="error zipcode-error" for="zip">郵便番号を確認してください。</label>')
22150                }
22151            }
22152            this.isSearchAdressFromZip = false;
22153            return false;
22154        };
22155
22156
22157        global.Form = Form;
22158        return Form;
22159    }());
22160
22161    
22162
22163    /* =========================================================
22164    
22165     FormHasCarselect
22166     
22167    ========================================================= */
22168    var FormHasCarselect = (function(_super) {
22169
22170        function FormHasCarselect(dom) {
22171            _super.apply(this, arguments);
22172            this.selectedCarId = null;
22173            this.carScene = this.dom.find(".form-scene--car");
22174            this.inputScene = this.dom.find(".form-scene--input");
22175        }
22176
22177        FormHasCarselect.prototype = inherit(_super.prototype);
22178        FormHasCarselect.prototype.constructor = FormHasCarselect;
22179
22180        FormHasCarselect.prototype.init = function(){
22181            _super.prototype.init.apply(this);
22182            this.initCarScene();
22183        }
22184
22185
22186        FormHasCarselect.prototype.initCarScene = function(){
22187            var that = this;
22188            that.addCarItemSelectEvent();
22189            setBackButton();
22190
22191            //初期値でCAR_NUMBERが入っていた場合はphpで仮にhiddenタグを出力している
22192            if (that.dom.find('input[name=TMP_RESERVE_CAR]').length > 0 && this.checkCarExist(that.dom.find('input[name=TMP_RESERVE_CAR]').val())) {
22193                //あらかじめ車種のページにいるときには車を選択した状態にする
22194                that.carScene.addClass('is-hide');
22195                that.inputScene.addClass('current-scene');
22196                that.selectedCarID = $('input[name=TMP_RESERVE_CAR]').val();
22197                that.addCarArea();
22198                DMS.formProcessUpdate();
22199            } else {
22200                //車種が選択されていないとき
22201                that.inputScene.addClass('is-hide');
22202                that.carScene.addClass('current-scene');                    
22203            }
22204
22205            function setBackButton(){
22206                $('.form-btn-back').on('click', function() {
22207                    that.dom.find(".current-scene").removeClass('current-scene');
22208                    selectedCarID = null;
22209                    that.inputScene.addClass('is-hide');
22210                    that.carScene.removeClass('is-hide').addClass('current-scene');
22211                    DMS.formProcessUpdate();
22212                    that.removeCarArea();
22213                    that.scrollTo(that.dom.offset().top,true);
22214                    DMS.BoxHeightAlign.update(); //高さの再調整
22215                });
22216            }
22217            that.dom.find('.carlist-body-anchor-item a,.carlist-engine-anchor-item a,.carlist-name-anchor-item a').off('click');
22218            that.dom.find('.carlist-body-anchor-item a,.carlist-engine-anchor-item a,.carlist-name-anchor-item a').on('click',function(e){
22219                var target = $(this).attr('href');
22220                that.scrollTo(that.dom.find(target).offset().top);
22221                return false;
22222            })
22223        }
22224
22225
22226        //車種を選択したときの挙動
22227        FormHasCarselect.prototype.addCarItemSelectEvent = function(){
22228            var that = this;
22229            that.dom.find('.carlist-item a').on('click', function() {
22230                that.dom.find(".current-scene").removeClass('current-scene');
22231                that.inputScene.addClass('current-scene');
22232                DMS.formProcessUpdate();
22233                that.selectedCarID = $(this).data('car_id');
22234                that.carScene.addClass('is-hide');
22235                that.inputScene.removeClass('is-hide');
22236                that.addCarArea();
22237                that.scrollTo(that.dom.offset().top,true);
22238               
22239            })   
22240        }
22241
22242        //getCarListの内容をscriptタグ内に出力しているのでその値をもとにidから車種名を特定
22243        FormHasCarselect.prototype.getCarInfo = function(id){
22244            for (var i = 0; i < DMS["form_car_list"].length; i++) {
22245                if (DMS["form_car_list"][i]["car_id"] == id) {
22246                    return DMS["form_car_list"][i];
22247                }
22248            }
22249        }
22250
22251        FormHasCarselect.prototype.checkCarExist = function(car_id){
22252            var isExist = false;
22253            this.dom.find('.carlist-item').each(function(index, el) {
22254                
22255                if($(el).find("a").data("car_id") == car_id){
22256                    isExist = true;
22257                }
22258            });
22259
22260            return isExist;
22261        }
22262        
22263        //ご希望の車種欄に名前を表示。また、postで送っていけるようにhiddenタグに値を設定
22264        FormHasCarselect.prototype.addCarArea = function(){
22265            var info = this.getCarInfo(this.selectedCarID);
22266            this.selectedCarName = info["series"]["CAR_NAME"];
22267            this.dom.find("input[name=RESERVE_CAR]").val(this.selectedCarName);
22268            this.dom.find("input[name=RESERVE_CAR_ID]").val(this.selectedCarID);
22269            this.dom.find(".form-table-select_car .form-cmn-table__body").append('<p>'+this.selectedCarName+'</p>');
22270        }
22271
22272        //ご希望の車種欄の情報を初期化
22273        FormHasCarselect.prototype.removeCarArea = function(){
22274            this.dom.find('input[name=RESERVE_CAR]').val("");
22275            this.dom.find('input[name=RESERVE_CAR_ID]').val("");
22276            this.dom.find(".form-table-select_car .form-cmn-table__body p").remove();
22277        }
22278
22279        global.FormHasCarselect = FormHasCarselect;
22280        return FormHasCarselect;
22281    }(Form));
22282
22283	global.FormCommon = {};
22284	global.FormCommon.copyAndClearFamilySet = function(_el1, _el2){
22285		// input (text / radio)
22286		var _el1_input = $(_el1).find("input");
22287		var _el2_input = $(_el2).find("input");
22288		for(var i=0;i<_el2_input.length;i++){
22289			var _type = $(_el2_input[i]).attr("type") ;
22290			if(_type  == "text"){
22291				var _val = $(_el1_input[i]).val();
22292				if(!_val) _val = "";
22293				$(_el2_input[i]).val( _val);
22294				$(_el1_input[i]).val("");
22295			}else if(_type == "radio"){
22296				var _val = $(_el1_input[i]).prop('checked');
22297				if(!_val) _val = false;
22298				$(_el2_input[i]).prop('checked', _val);
22299				$(_el1_input[i]).prop('checked', false);
22300			}
22301		}
22302
22303		// select
22304		var _el1_select = $(_el1).find("select");
22305		var _el2_select = $(_el2).find("select");
22306		for(var i=0;i<_el2_select.length;i++){
22307			var _type = $(_el2_select[i]).attr("type") ;
22308			var _val = $(_el1_select[i]).val();
22309			if(!_val) _val = "";
22310			$(_el2_select[i]).val( _val);
22311			$(_el1_select[i]).val("");
22312		}
22313
22314		
22315	}
22316
22317	global.FormCommon.checkEmptyInFamilySet = function(_el1){
22318		// input (text / radio)
22319		var _el1_input = $(_el1).find("input");
22320		for(var i=0;i<_el1_input.length;i++){
22321			var _type = $(_el1_input[i]).attr("type") ;
22322			if(_type  == "text"){
22323				if( $(_el1_input[i]).val() ){
22324					return true;
22325				}
22326			}else if(_type == "radio"){
22327				if($(_el1_input[i]).prop('checked')){
22328					return true;
22329				}
22330			}
22331		}
22332
22333		// select
22334		var _el1_select = $(_el1).find("select");
22335		for(var i=0;i<_el1_select.length;i++){
22336			if($(_el1_select[i]).val()){
22337				return true;
22338			}
22339		}
22340
22341		return false;
22342	}
22343	global.FormCommon.removeAndSortFamilySet = function(){
22344		for(var i=0;i<=9;i++){
22345			var _suffix_i = "";
22346			if(i > 0){
22347				_suffix_i = "-"+i;
22348			}
22349			var _familyset = $(".form-0001 .form-cmn-familyset"+_suffix_i);
22350			if(_familyset.length > 0){
22351
22352				if(!DMS.FormCommon.checkEmptyInFamilySet(_familyset)){
22353					for(var k=i+1;k<=10;k++){
22354						var _familyset = $(".form-0001 .form-cmn-familyset-"+k);
22355						if(DMS.FormCommon.checkEmptyInFamilySet(_familyset)){
22356							break;
22357						}
22358					}
22359					if(k > 10) k = 10;
22360
22361					for(var j=i;j<=10;j++){
22362					var _suffix_j = "";
22363					if(j > 0){
22364						_suffix_j = "-"+j;
22365					}
22366					var _el1 = $(".form-0001 .form-cmn-familyset-"+(k+(j-i)));
22367					var _el2 = $(".form-0001 .form-cmn-familyset"+_suffix_j);
22368						DMS.FormCommon.copyAndClearFamilySet(_el1, _el2);
22369					}
22370				}
22371			}
22372		}
22373	}
22374	global.FormCommon.removeFamilySetRule = function(_familyset){
22375		var _el1_input = $(_familyset).find("input");
22376		for(var j=0;j<_el1_input.length;j++){
22377			$(_el1_input[j]).rules("remove");
22378		}
22379		var _el1_select = $(_familyset).find("select");
22380		for(var j=0;j<_el1_select.length;j++){
22381			$(_el1_select[j]).rules("remove");
22382		}
22383	}
22384	global.FormCommon.addFamilySetRule = function(_familyset){
22385		var _el1_input = $(_familyset).find("input");
22386		for(var j=0;j<_el1_input.length;j++){
22387			var _el_name = $(_el1_input[j]).attr("name");
22388			$(_el1_input[j]).rules("add", DMS.FormCommon.validate_obj["rules"][_el_name] );
22389		}
22390		var _el1_select = $(_familyset).find("select");
22391		for(var j=0;j<_el1_select.length;j++){
22392			var _el_name = $(_el1_select[j]).attr("name");
22393			$(_el1_select[j]).rules("add", DMS.FormCommon.validate_obj["rules"][_el_name] );
22394
22395		}
22396
22397	}
22398
22399
22400}(DMS));
22401$(function() {
22402  var storeBlogListWrap = $(".hansya-blog-list-0001-wrap");
22403  var articleFlg;
22404  var uri;
22405
22406  if(storeBlogListWrap) {
22407    articleFlg = storeBlogListWrap.data("flg");
22408    uri = storeBlogListWrap.data("url-flg");
22409    if(articleFlg == true && uri != 1) {
22410      window.location.href = "/blog/company/list?page=1";
22411    }
22412  }
22413
22414
22415  var BoxHeightAlign = DMS.BoxHeightAlign;
22416  var boxHeightAlign = new BoxHeightAlign($('.hansya-blog-list-0001-wrap-inner'), {isAll: false});
22417
22418  boxHeightAlign.init();
22419
22420  var resizeTimer = false;
22421  $(window).resize(function() {
22422
22423    if(resizeTimer !== false) {
22424      clearTimeout(resizeTimer);
22425    }
22426
22427    resizeTimer = setTimeout(function() {
22428      boxHeightAlign.update();
22429    }, 200);
22430  });
22431
22432  DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
22433    boxHeightAlign.init();
22434  });
22435
22436});/*headline-0001, headline-0002, headline-0003*/
22437$(function () {
22438  var windowWidth = $(window).width();
22439	function getMaskAnimation(_el){
22440		return {
22441			_element:_el,
22442			_element_width:0,
22443			_element_base_width:undefined,
22444			_xscale:0,
22445			_anim_flag:true,
22446			initElement:function(_el){
22447				this._element_base_width = $(this._element).width(); // ユニットの横幅(ウィンドウ100%-paddingサイズ)
22448				if(this._element_base_width > 0){ // タブやもっと見るに関連付けて非表示の場合は0になるので処理しない
22449					$(this._element).wrapInner("<div class='anim_wrapper'>");
22450					$(this._element).wrapInner("<div class='anim_outer_wrapper'>");
22451					$(this._element).find(".anim_outer_wrapper").css("overflow","hidden");
22452					this._element_width = this.getWidth();
22453					$(this._element).find(".anim_wrapper").css("width",this._element_base_width); //自由テキストエリアのサイズを固定化しておく
22454					this.setMask();
22455				}
22456			},
22457			resize: function () {
22458			  var _w = this.getWidth();
22459			  if (_w > 0) {
22460			    this.setWidth();
22461			  }
22462			},
22463			setWidth:function(){
22464				if(this._anim_flag){
22465					this._element_width = this.getWidth();
22466					$(this._element).find(".anim_wrapper").css("width",this._element_base_width);
22467				}
22468			},
22469			get xScale(){
22470				return this._xscale;
22471			},
22472			set xScale(v){
22473				this._xscale = v;
22474				this.setMask();
22475			},
22476			setMask:function(){
22477				this._element.find(".anim_outer_wrapper").css("width", this._xscale+"%");
22478			},
22479			getWidth:function(){
22480				if(this._anim_flag){
22481					var _w = this._element.find(".anim_outer_wrapper").css("width");
22482					_ret = $(this._element).find(".anim_outer_wrapper").css("width","auto").css("float","left").width();
22483					$(this._element).find(".anim_outer_wrapper").css("float","none").css("width",_w);
22484					return Math.ceil(_ret);
22485				}
22486      },
22487      get AnimationSpeed(){
22488        return this._element.data('animation-speed')
22489      },
22490      startAnime:function(speed){
22491        if(this._anim_flag){ // アニメーションは一回しかしないように
22492          if(!this._element_base_width){ //横幅が確定してない場合は初期処理をやっておく
22493            this.initElement(this._element);
22494          }
22495          this._anim_flag = false;
22496          this.xScale = 0;
22497          var that = this;
22498          var _rate = this._element_width / this._element_base_width;
22499          $(this).delay(100).animate({xScale:100}, speed/_rate ,"linear", function(){
22500            $(that._element).removeAttr('style');
22501            $(that._element).find(".anim_outer_wrapper").removeAttr('style');
22502						$(that._element).find(".anim_outer_wrapper .anim_wrapper").removeAttr('style');
22503          });
22504        }
22505      }
22506		}
22507	}
22508
22509	function checkAndStart(_obj){
22510		if(_obj._anim_flag){ //アニメーションをスタートしてない場合のã
22510¿å‡¦ç†
22511			var _display = $(_obj._element).parents(".unit-wrapper").css("display");
22512			if(_display == "block"){ // 表示状態の場合のみ処理
22513			    var scrollTop = $(window).scrollTop();
22514			    var wh = $(window).height();
22515		        var elemOffset = _obj._element.offset().top;
22516		        if (scrollTop > elemOffset - wh * 0.9) { //ウィンドウ内の高さ上から90%以内で見えている場合のみ処理
22517					if(_obj.AnimationSpeed == 0){
22518					_obj.startAnime(1000);
22519					} else if(_obj.AnimationSpeed == 1) {
22520					_obj.startAnime(600);
22521					} else {
22522					_obj.startAnime(300);
22523					}
22524		        }else{
22525		          if(!_obj._element_base_width){ //横幅が確定してない場合は初期処理をやっておく
22526		            _obj.initElement(_obj._element);
22527		          }
22528				}
22529			}
22530		}
22531  }
22532
22533  $(function () {
22534    $(".headline-0001, .headline-0002, .headline-0003").each(function () {
22535      var animationMask = $(this).data('animation-mask')
22536      if (animationMask == 1) {
22537        var _obj = getMaskAnimation($(this))
22538        // 初期非表示
22539        _obj.initElement();
22540        checkAndStart(_obj);
22541        // スクロール処理
22542        $(window).scroll(function(){
22543          checkAndStart(_obj);
22544        });
22545        // リサイズ処理
22546        $(window).resize(function(){
22547          // iOS, Androidスクロール対策
22548          if($(window).width() != windowWidth){
22549            _obj.resize();
22550          }
22551        });
22552        DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
22553          checkAndStart(_obj);
22554        });
22555      }
22556    });
22557  });
22558});jQuery(document).ready(function($) {
22559
22560  var BoxHeightAlign = window.DMS.BoxHeightAlign;
22561
22562  var boxheightAlign = new BoxHeightAlign($(".image-0003"),{
22563      isAll:false
22564  });
22565
22566
22567    boxheightAlign.init();
22568
22569console.log(window);
22570    $(window).on("resize", function(event) {
22571        boxheightAlign.update();
22572    });
22573    
22574  DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
22575        boxheightAlign.update();
22576  });
22577
22578});$(function() {
22579    if ($(".interior-color-0001").length > 0) {
22580        var thisUnit = $(".interior-color-0001");
22581
22582
22583        // bxslider
22584        var activeClass = 'active-slide';
22585
22586        function slider(_target) {
22587
22588            var targetSlide = _target.find(".interior-list");
22589            var targetNav = _target.find(".interior-nav-wrap");
22590            var prev = _target.find(".interior-pn-btn .prev");
22591            var next = _target.find(".interior-pn-btn .next");
22592            var listWrap = _target.find(".slider.interior-list-wrap");
22593
22594            targetSlide.bxSlider({
22595                pagerCustom: targetNav,
22596                speed: "100",
22597                mode: "fade",
22598                touchEnabled: false,
22599                prevSelector: prev,
22600                nextSelector: next,
22601                onSliderLoad: function() {
22602                    targetSlide.children('li').eq(0).addClass(activeClass);
22603                },
22604                onSlideAfter: function($slideElement, oldIndex, newIndex) {
22605                    targetSlide.children('li').removeClass(activeClass).eq(newIndex).addClass(activeClass);
22606                }
22607            });
22608
22609            $(".interior-pn-btn .bx-prev").text("");
22610            $(".interior-pn-btn .bx-next").text("");
22611
22612
22613
22614            DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
22615                targetSlide.destroySlider();
22616                listWrap.after(targetNav);
22617                targetSlide.reloadSlider();
22618                $(".interior-pn-btn .bx-prev").text("");
22619                $(".interior-pn-btn .bx-next").text("");
22620            });
22621
22622
22623            const ua = navigator.userAgent;
22624            if (ua.indexOf('Trident') !== -1) {
22625                //IE 11のときの挙動
22626                targetSlide.destroySlider();
22627                listWrap.after(targetNav);
22628                targetSlide.reloadSlider();
22629                $(".interior-pn-btn .bx-prev").text("");
22630                $(".interior-pn-btn .bx-next").text("");
22631            }
22632
22633
22634
22635            thisUnit.delay(200).animate({
22636              "opacity": 1,
22637              "height":"auto"
22638            }, 300 );
22639
22640
22641
22642
22643        }
22644
22645
22646            const ua = navigator.userAgent;
22647            if (ua.indexOf('Trident') !== -1) {
22648                $(window).load(function () {
22649                    thisUnit.each(function() {
22650                        slider($(this));
22651                    });
22652                });
22653            }else{
22654                thisUnit.each(function() {
22655                    slider($(this));
22656                });
22657            }
22658
22659
22660
22661
22662
22663
22664    }
22665
22666
22667
22668});$(function () {
22669    var kizutori = $('.kizutori__0001');
22670    var ua = navigator.userAgent;
22671    kizutori.each(function () {
22672        var that = this;
22673        if($(window).width() < 768){
22674            var width_scale = parseInt($(this).data('width-scale'),10);
22675            var item_title_scale = $(this).data('item-title-scale');
22676            $(this).find('table').css('width', width_scale + '%');
22677            var _table_ary = $(this).find('table');
22678            var _th_ary0 = $(_table_ary[0]).find('th');
22679            var _th_ary1 = $(_table_ary[1]).find('th');
22680            $(_th_ary0[0]).css('width', item_title_scale + '%');
22681            $(_th_ary0[1]).css('width', (100-item_title_scale) + '%');
22682            $(_th_ary1[0]).css('width', item_title_scale + '%');
22683            $(_th_ary1[1]).css('width', (100-item_title_scale) + '%');
22684            if (ua.indexOf('iPhone') > 0 && width_scale > 100) {
22685				$(".kizutori__table-panel-wrap").addClass("scroll-wrap");
22686            }
22687        }
22688        $(window).resize(function(){
22689            if($(window).width() < 768){
22690                var width_scale = parseInt($(that).data('width-scale'),10);
22691                var item_title_scale = $(that).data('item-title-scale');
22692                $(that).find('table').css('width', width_scale + '%');
22693	            var _table_ary = $(this).find('table');
22694	            var _th_ary0 = $(_table_ary[0]).find('th');
22695	            var _th_ary1 = $(_table_ary[1]).find('th');
22696	            $(_th_ary0[0]).css('width', item_title_scale + '%');
22697	            $(_th_ary0[1]).css('width', (100-item_title_scale) + '%');
22698	            $(_th_ary1[0]).css('width', item_title_scale + '%');
22699	            $(_th_ary1[1]).css('width', (100-item_title_scale) + '%');
22700	            if (ua.indexOf('iPhone') > 0 && width_scale > 100) {
22701					$(".kizutori__table-panel-wrap").addClass("scroll-wrap");
22702	            }
22703            }else{
22704                $(that).find('table').css('width', 'inherit');
22705	            var _table_ary = $(this).find('table');
22706	            var _th_ary0 = $(_table_ary[0]).find('th');
22707	            var _th_ary1 = $(_table_ary[1]).find('th');
22708	            $(_th_ary0[0]).css('width', 'inherit');
22709	            $(_th_ary0[1]).css('width', 'inherit');
22710	            $(_th_ary1[0]).css('width', 'inherit');
22711	            $(_th_ary1[1]).css('width', 'inherit');
22712
22713	            if (ua.indexOf('iPhone') > 0) {
22714					$(".kizutori__table-panel-wrap").removeClass("scroll-wrap");
22715	            }
22716            }
22717        })
22718    });
22719});
22720$(function () {
22721	if($(".map-0001").length>0){
22722		
22723		$(".map-0001").each(function(){
22724			var markerlist = [];
22725			var map;
22726			var latlons = [];
22727			var _last_sizeDetect;
22728			var _last_latlon;
22729			var _last_fit_level;
22730			var _last_fit_lat;
22731			var _last_fit_lon;
22732			var _dev = {};
22733			var _dev_pinsize = {};
22734			var _target_map = $(this);
22735			var _timer_id;
22736			
22737			var imgAry = [];
22738			var pinImageNum;
22739			var nowPinSize;
22740			
22741			var map_id = "map"+_target_map.parent().parent().attr("id");
22742			_target_map.find(".map-list").append("<div class='map-main' id='"+map_id+"'></div>");
22743
22744			function loadPinImage(_num , _marker, _file){
22745					$('<img src="'+_file+'">').on('load', function(){
22746						var _target=$(this);
22747						if(_target[0].naturalHeight != 0){
22748							imgAry[_num] = {width:_target[0].naturalWidth, height:_target[0].naturalHeight};
22749							_marker.setImage(_file , new TMIData.Size(Math.round(_target[0].naturalWidth * nowPinSize) , Math.round(_target[0].naturalHeight * nowPinSize)) );
22750
22751						}
22752					});
22753			}
22754
22755
22756			function addMarker(_num , _element){
22757				if(checkMap()){
22758					var _latlng = _element.data("latlng").split(",");
22759					if(_latlng[0] && _latlng[1]){
22760						var _lat = parseFloat(_latlng[0]);
22761						var _lng = parseFloat(_latlng[1]);
22762						var latlon = new TMIData.LatLon(_lat, _lng);
22763						var _error_flag = false;
22764						var _file = getPinFileName(_element.data("pin"));
22765						try {
22766							var marker = new TMIMapapi.Marker(latlon);
22767						}catch(e){
22768							_error_flag = true;
22769						}
22770						if(!_error_flag){
22771							marker.setUserData({
22772								"name":_element.find(".pin-title").text(),
22773								"address":_element.find(".pin-address").text(),
22774								"tel":$(_element.find(".pin-tel")[0]).text(),
22775								"url":_element.find(".pin-url").text()
22776								});
22777							marker.addEvent(
22778								TMIMapapi.EVENT_CLICK,
22779								openInfoWindow,
22780								"MarkerClick");
22781							latlons.push(new TMIData.LatLon(_lat, _lng));
22782							markerlist[_num] = {marker:marker, latlon:latlon, file:_file};
22783							map.addOverlay(marker);
22784							loadPinImage(_num,marker,_file);
22785							
22786							return marker;
22787						}else{
22788							return {};
22789						}
22790					}else{
22791						return {};
22792					}
22793				}else{
22794					return {};
22795				}
22796
22797			}
22798			
22799			function getPinFileName(_pinfile){
22800				var _suffix = _target_map.data("channel");
22801				var _pintype = _target_map.data("pintype");
22802				if(_pintype == 1 || !_pinfile){
22803					// non text
22804					return "/assets/a/images/shop-list-0001/icon-pin.png";
22805				}else{
22806					// text
22807					return _pinfile;
22808				}
22809				
22810			}
22811			
22812			function checkMap(){ /* mapmaster access check */
22813				var _check_map = typeof TMIMapapi;
22814				if(_check_map === "object")
22815					return true;
22816				else
22817					return false;
22818			}
22819			function setMap(){
22820				if(checkMap()){
22821					map = new TMIMapapi.Map(map_id);
22822
22823					map.setMapSettings({
22824						zoomReverse:true,
22825						wheelZoom:false,
22826						dragMove_sp: false
22827					});
22828					zoomControl = new TMIMapapi.ZoomControl({
22829						position: TMIMapapi.ControlPosition.TOP_RIGHT
22830					});
22831					map.addControl(zoomControl);
22832
22833					var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
22834					if(sizeDetect.indexOf("pc") < 0){
22835						var controlDiv = document.createElement('div');
22836						controlDiv.style.backgroundColor = '#FFF';
22837						controlDiv.style.border = '1px solid #000';
22838						var controlButton = document.createElement('input');
22839						controlButton.type = 'button';
22840						controlButton.value = '地図の移動方法について';
22841						controlButton.onclick = function () {
22842							var _html = '<div class="control-message "><span>中心に移動したい箇所を<br>ダブルタップしてください</span></div>';
22843							_target_map.find(".map-list").append(_html);
22844							_target_map.find(".map-list .control-message").click(function(){
22845								$(this).remove();
22846							});
22847						};
22848						controlDiv.appendChild(controlButton);
22849						var customControl = new TMIMapapi.CustomControl(controlDiv,{
22850							position: TMIMapapi.ControlPosition.TOP_LEFT,
22851							offset: new TMIData.Pixel(10, 10)
22852						});
22853						map.addControl(customControl);
22854					}
22855
22856
22857					var _panel = _target_map.find(".pin-data");
22858					var _element = $(_panel[0]);
22859					nowPinSize = parseFloat(_dev_pinsize[sizeDetect]);
22860
22861					var _marker = addMarker(0, _element);
22862					_last_latlon = _marker.latlon;
22863
22864					map.addEvent(TMIMapapi.EVENT_NO_CITYPLAN,function(){
22865						var mapInfo = map.getMapInfo();
22866						map.changeLevel(mapInfo.level+1);
22867						_last_fit_level = mapInfo.level+1;
22868
22869					});
22870					
22871
22872
22873
22874					var _level_data = _target_map.data("level");
22875					if(_level_data){
22876
22877						_dev["sp"] = _level_data["sp"];
22878						_dev["tab-normal"] = _dev["tab-large"] = _level_data["tab"];
22879						_dev["pc-small"] = _dev["pc-normal"] = _dev["pc-large"] = _level_data["pc"];
22880
22881
22882						if(_dev[sizeDetect] != 9999 && isFinite(DMS.mapListLevel[_dev[sizeDetect]])){
22883							drawFitMap(DMS.mapListLevel[_dev[sizeDetect]] , _last_latlon.lat, _last_latlon.lon);
22884
22885						}else{
22886							if(latlons.length > 0){
22887								var _fittingLevel = map.getFittingLevelByArray(latlons, 44);
22888								drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
22889
22890							}
22891						}
22892					}else{
22893						if(latlons.length > 0){
22894							var _fittingLevel = map.getFittingLevelByArray(latlons);
22895							drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
22896
22897						}else{
22898
22899							map.draw();
22900						}
22901					}
22902				}else{
22903					_target_map.find(".map-list #map").html("この環境ではmapmasterによる地図は表示できません。").css({"text-align":"center", "font-size":"22px"});
22904				}
22905			}
22906
22907			function drawFitMap(_level, _lat, _lon){
22908				if(!_level || _level == null){
22909					_level = 19;
22910				}
22911				if(_lat && _lon){
22912					if(_level !=  _last_fit_level || _lat != _last_fit_lat || _lon != _last_fit_lon){
22913						map.draw({
22914							level:_level,
22915							lat:_lat,
22916							lon:_lon
22917						});
22918						_last_fit_level = _level;
22919						_last_fit_lat = _lat;
22920						_last_fit_lon = _lon;
22921					}
22922				}
22923
22924			}
22925
22926			function fittingLevel(){
22927				if(latlons.length > 0){
22928					var fittingLevel = map.getFittingLevelByArray(latlons, 44);
22929
22930					if(_last_fit_level != fittingLevel.level){
22931						map.changeLevel(fittingLevel.level);
22932						_last_fit_level = fittingLevel.level;
22933					}
22934					if(_last_fit_lat != fittingLevel.center.lat || _last_fit_lon != fittingLevel.center.lon){
22935						map.changeCenter(fittingLevel.center);
22936						_last_fit_lat = fittingLevel.center.lat;
22937						_last_fit_lon = fittingLevel.center.lon;
22938					}
22939				}
22940			}
22941
22942			function openInfoWindow(marker, latlon, pixel) {
22943				var _obj = marker.getUserData();
22944				var html = '<div class="marker-box">';
22945				html += '<div><a href="'+_obj.url+'">'+_obj.name+'</a></div>';
22946				html += '<div>'+_obj.address+'</div>';
22947				html += '<div>'+marker.getUserData().tel+'</div>';
22948				html += '<div>';
22949				marker.openInfoWindow(html);
22950			}
22951
22952
22953			var _pinsize_data = _target_map.data("pinsize");
22954			if(_pinsize_data){
22955				_dev_pinsize["sp"] = _pinsize_data["sp"];
22956				_dev_pinsize["tab-normal"] = _dev_pinsize["tab-large"] = _pinsize_data["tab"];
22957				_dev_pinsize["pc-small"] = _dev_pinsize["pc-normal"] = _dev_pinsize["pc-large"] = _pinsize_data["pc"];
22958			}else{
22959				_dev_pinsize["sp"] = 1;
22960				_dev_pinsize["tab-normal"] = _dev_pinsize["tab-large"] = 1;
22961				_dev_pinsize["pc-small"] = _dev_pinsize["pc-normal"] = _dev_pinsize["pc-large"] = 1;
22962			}
22963
22964			setMap();
22965
22966			
22967			$(window).resize(function(){
22968				if(map){
22969					clearTimeout(_timer_id);
22970					_timer_id = setTimeout(function(){
22971
22972						map.draw();
22973						var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
22974						if(_last_sizeDetect != sizeDetect){
22975							if(_dev && _dev[sizeDetect] != 9999 && isFinite(DMS.mapListLevel[_dev[sizeDetect]])){
22976								map.changeLevel(DMS.mapListLevel[_dev[sizeDetect]]);
22977								_last_fit_level = DMS.mapListLevel[_dev[sizeDetect]];
22978								map.changeCenter(_last_latlon);
22979								_last_fit_lat = _last_latlon._lat;
22980								_last_fit_lon = _last_latlon._lon;
22981							}else{
22982						_last_fit_lat = undefined;
22983						_last_fit_lon = undefined;
22984								fittingLevel();
22985							}
22986							_last_sizeDetect = sizeDetect;
22987
22988							if(sizeDetect.indexOf("pc") >= 0){
22989								_target_map.find(".map-list .control-message").remove();
22990							}
22991								
22992							nowPinSize = parseFloat(_dev_pinsize[sizeDetect]);
22993							for(var i=0;i<markerlist.length;i++){
22994								var _o = markerlist[i];
22995								if(imgAry[i]){
22996									_o.marker.setImage(_o.file,new TMIData.Size(Math.round(imgAry[i].width * nowPinSize) , Math.round(imgAry[i].height * nowPinSize)) );
22997								}
22998							}
22999						}
23000					},300);
23001
23002				}
23003			});
23004			function changeDisplay(){
23005				if(map){
23006					if(latlons.length > 0){
23007						var _fittingLevel = map.getFittingLevelByArray(latlons);
23008						drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
23009					}else{
23010						map.draw();
23011						fittingLevel();
23012					}
23013				}
23014			}
23015
23016			DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function(){
23017				changeDisplay();
23018			});
23019			/*TMICommon.Event.removeEventType(map.mapContainer , TMIMapapi.EVENT_MOUSE_WHEEL);*/
23020		});
23021
23022	}
23023});var DMS = DMS || {};
23024DMS.mapListLevel = [
2302520,19,18,17,16,15,14,13,12,11,10,9,8,7,6
23026];
23027
23028
23029$(function () {
23030
23031  function init() {
23032    if ($(".model-grade-0006").length > 0) {
23033      $(".model-grade-0006").each(function () {
23034        getGradeData($(this));
23035      })
23036    }
23037  }
23038  init();
23039
23040  function getGradeData(_target) {
23041    var clientId = _target.data("client_id")
23042    var carNameEn = _target.data("car_name_en")
23043    console.log(clientId,carNameEn)
23044    var d = new Date();
23045    var yy = d.getFullYear();
23046    var mm = d.getMonth() + 1;
23047    var dd = d.getDate();
23048    mm = ('0' + mm).slice(-2);
23049    dd = ('0' + dd).slice(-2);
23050    var date = "" + yy + mm + dd;
23051
23052    var _url = `https://api.toyota.jp/estimate/v1/saleoffice/${clientId}/cars/${carNameEn}/grades?registrationExpectedDate=${date}`
23053    // var _url = "./data/data.json"
23054
23055    $.ajax({
23056      type: 'GET',
23057      url: _url,
23058      xhrFields: {
23059        withCredentials: true
23060      },
23061      dataType: 'json',
23062      timeout: 10000
23063    })
23064      .done(function (data) {
23065        var gradeList = data.gradeList;
23066        if (gradeList.length > 0) {
23067          replaceOkinawaPrice(data.gradeList, _target)
23068        } else {
23069          setDefaultDom(_target);
23070        }
23071      })
23072      .fail(function (jqXHR, textStatus, errorThrown) {
23073        console.error("データが正常に取得出来ませんでした。");
23074        setDefaultDom(_target);
23075      });
23076  }
23077
23078  function setDefaultDom(_target) {
23079    var _items = _target.find(".carPrice");
23080    _items.each(function (index, _el) {
23081      if (!$(_el).hasClass("is-entered")) {
23082        $(_el).css("display","none")
23083        $(_el).find(".model-grade-0006__table--tbody--content").empty();
23084        // var _errorhtml = ` - 円 <br class="br_sp"><span class="model-grade-0006__table--tbody--span--price">(税抜 - 円)</span>`;
23085        var _errorhtml = "";
23086        $(_el).find(".model-grade-0006__table--tbody--content").append(_errorhtml)
23087        // $(_el).find(".model-grade-0006__table--tbody--content").animate({ opacity: 1 }, 200)
23088      }
23089    });
23090  }
23091
23092  function replaceOkinawaPrice(gradeList, _target) {
23093    var _items = _target.find(".model-grade-0006__table--tbody");
23094    _items.each(function (index, elm) {
23095      var factoryCarStyle = $(elm).data("factory_car_style");
23096
23097      for (var i = 0; i < gradeList.length; i++) {
23098        var gradeItem = gradeList[i]
23099        var _tax = 1.1;
23100
23101        if (!$(elm).find(".carPrice").hasClass("is-entered")) {
23102          if (factoryCarStyle === gradeItem["makerCarStyle"]) {
23103            $(elm).find(".carPrice .model-grade-0006__table--tbody--content").empty();
23104            $(elm).find(".carPrice .model-grade-0006__table--tbody--content").parent().addClass("change-price");
23105            var MAKER_PRICE = "-";
23106            var NON_TAXED_PRICE = "-";
23107            if (gradeItem["price"]) {
23108              MAKER_PRICE = gradeItem["price"].toLocaleString();
23109              NON_TAXED_PRICE = Math.round(gradeItem["price"] / _tax).toLocaleString();
23110            }
23111            var _price = $(elm).find(".carPrice .model-grade-0006__table--tbody--content");
23112            var _html = "";
23113            if (!$(elm).find(".carPrice").hasClass("is-notax")) {
23114              _html = `${MAKER_PRICE}円 <br class="br_sp"><span class="model-grade-0006__table--tbody--span--price">(税抜${NON_TAXED_PRICE}円)</span>`;
23115            } else {
23116              _html = `${NON_TAXED_PRICE}円`;
23117            }
23118            $(_price).append(_html);
23119          }
23120        }
23121      }
23122    });
23123    checkChangeFailed(_target);
23124    // _target.find(".carPrice .model-grade-0006__table--tbody--content").animate({ opacity: 1 }, 400)
23125  }
23126
23127  function checkChangeFailed(_target) {
23128    console.log("pass");
23129    var _items = _target.find(".model-grade-0006__table--tbody .carPrice");
23130    for (var j = 0; j < _items.length; j++) {
23131      var _el = _items[j];
23132      console.log(_el);
23133      if (!$(_el).hasClass("change-price") && !$(_el).hasClass("is-entered")) {
23134        $(_el).find(".carPrice .model-grade-0006__table--tbody--content").empty();
23135        // var _errorhtml = ` - 円 <br class="br_sp"><span class="model-grade-0006__table--tbody--span--price">(税抜 - 円)</span>`;
23136        var _errorhtml = "";
23137        $(_el).find(".carPrice .model-grade-0006__table--tbody--content").append(_errorhtml)
23138        
23139      }
23140    }
23141  }
23142});$(function () {
23143
23144	var BoxHeightAlign = DMS.BoxHeightAlign;
23145	var boxHeightAlign = new BoxHeightAlign($(".new-blog-list-0001-wrap-inner"), {isALL: false});
23146
23147	boxHeightAlign.init();
23148
23149	var resizeTimer = false;
23150
23151	$(window).resize(function() {
23152
23153		if(resizeTimer !== false) {
23154			clearTimeout(resizeTimer);
23155		}
23156
23157		resizeTimer = setTimeout(function() {
23158			boxHeightAlign.update();
23159		}, 200);
23160	});
23161
23162	DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
23163		boxHeightAlign.init();
23164	});
23165
23166});/*news-set-0001*/
23167
23168$(function () {
23169
23170  // var BoxHeightAlign = DMS.BoxHeightAlign;
23171  // var boxHeightAlign = new BoxHeightAlign($('.news-set-wrapper'), {isAll: false});
23172
23173  // boxHeightAlign.init();
23174
23175  // var resizeTimer = false;
23176  // $(window).resize(function() {
23177
23178  //   if(resizeTimer !== false) {
23179  //     clearTimeout(resizeTimer);
23180  //   }
23181
23182  //   resizeTimer = setTimeout(function() {
23183  //     boxHeightAlign.update();
23184  //   }, 200);
23185  // });
23186
23187  // DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
23188  //   boxHeightAlign.init();
23189  // });
23190
23191  $(".news-set-0001").each(function(){
23192    boxHeight($(this));
23193  });
23194
23195  function boxHeight(_target) {
23196
23197    var boxheightAlign = new DMS.BoxHeightAlign($(_target),{
23198      isAll:false
23199    });
23200
23201    boxheightAlign.init();
23202
23203    $(window).on('resize', function() {
23204      boxheightAlign.update();
23205    });
23206
23207    DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
23208      boxheightAlign.update();
23209    });
23210
23211  }
23212
23213
23214
23215
23216  setTimeout(function(){
23217    setSNS();
23218  },100);
23219
23220  function setSNS(){
23221
23222    //twitterのJS読み込み
23223    $(function () {
23224      if (typeof twttr ==='undefined' || !twttr.widgets) {
23225        var twitterjs = document.createElement("script");
23226        twitterjs.async = true;
23227        twitterjs.src = '//platform.twitter.com/widgets.js';
23228        document.getElementsByTagName('body')[0].appendChild(twitterjs);
23229      }
23230      else {
23231        twttr.widgets.load();
23232      }
23233    });
23234
23235    //facebookのJS読み込み
23236    $(function(d, s, id) {
23237      var js, fjs = d.getElementsByTagName(s)[0];
23238      if (d.getElementById(id)) return;
23239      js = d.createElement(s); js.id = id;
23240      js.src = "//connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v2.4&appId=";
23241      fjs.parentNode.insertBefore(js, fjs);
23242    }(document, 'script', 'facebook-jssdk'));
23243
23244    var _cnt = 0;
23245    var _check_tw_flag;
23246    var _check_fb_flag;
23247    var _myid = setInterval(function(){
23248      if(window.twttr && window.twttr.widgets && window.twttr.widgets.load && !_check_tw_flag){
23249        _check_tw_flag = true;
23250      }
23251      if(window.FB && window.FB.XFBML && window.FB.XFBML.parse && !_check_fb_flag){
23252        _check_fb_flag = true;
23253      }
23254      if(_check_fb_flag && _check_tw_flag){
23255        _cnt++;
23256        if(_cnt >= 100){
23257          window.twttr.widgets.load();
23258          window.FB.XFBML.parse();
23259          clearInterval(_myid);
23260        }
23261      }
23262    },10);
23263
23264    $(function () {
23265      var timer = false;
23266      var w = $(window).width();
23267      var w_resize;
23268      $(window).on("orientationchange resize",function() {
23269        if (timer !== false) {
23270          clearTimeout(timer);
23271        }
23272        timer = setTimeout(function() {
23273          boxWidth=$('.pagePlugin').width();
23274          currentWidth=$('.pagePlugin .fb-page').attr('data-width');
23275          if(boxWidth != currentWidth){
23276            $('.pagePlugin .fb-page').attr('data-width', boxWidth);
23277            FB.XFBML.parse(document.getElementById('pagePlugin'));
23278          }
23279          if (w != w_resize){
23280            w = $(window).width();
23281          }
23282        }, 200);
23283      });
23284    });
23285
23286  }
23287});/*panel-0007*/
23288$(function () {
23289
23290    $(".panel-0007").each(function(){
23291        boxHeight( $(this) );
23292    });
23293
23294    function boxHeight(_target){
23295
23296      var boxheightAlign = new DMS.BoxHeightAlign($(".panel-0007"),{
23297          isAll:false
23298      });
23299
23300      boxheightAlign.init();
23301
23302      $(window).on('resize', function() {
23303        boxheightAlign.update();
23304      });
23305
23306      DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
23307        boxheightAlign.update();
23308      });
23309
23310    }
23311
23312});// recommended_package_payment_plan
23313
23314$(function() {
23315    $(".recommended-package-payment-plan-0001").each(function() {
23316        var _tab_block = $(this).find(".tabcontent");
23317        var _tab_block_count = _tab_block.length;
23318        if (_tab_block_count > 1) {
23319            DMS.setTabColor({
23320                "target_color": $(this).find(".recommended-package-payment-plan__tab"),
23321                "target_tab": $(this).find(".recommended-package-payment-plan__tab .recommended-package-payment-plan__tab__list"),
23322                "call": function(_num) {
23323                    for (var i = 0; i < _tab_block.length; i++) {
23324                        if ($(_tab_block[_num]).is($(_tab_block[i]))) {
23325                            $(_tab_block[i]).show();
23326                        } else {
23327                            $(_tab_block[i]).hide();
23328                        }
23329                    }
23330                }
23331            });
23332        }
23333    });
23334});// recommended_package_payment_plan
23335
23336$(function() {
23337    $(".recommended-package-payment-plan-0002").each(function() {
23338        var _tab_block = $(this).find(".tabcontent_0002");
23339        var _tab_block_count = _tab_block.length;
23340        if (_tab_block_count > 1) {
23341            DMS.setTabColor({
23342                "target_color": $(this).find(".recommended-package-payment-plan__tab_0002"),
23343                "target_tab": $(this).find(".recommended-package-payment-plan__tab_0002 .recommended-package-payment-plan__tab__list_0002"),
23344                "call": function(_num) {
23345                    for (var i = 0; i < _tab_block.length; i++) {
23346                        if ($(_tab_block[_num]).is($(_tab_block[i]))) {
23347                            $(_tab_block[i]).show();
23348                        } else {
23349                            $(_tab_block[i]).hide();
23350                        }
23351                    }
23352                }
23353            });
23354        }
23355    });
23356});$(function () {
23357	if($(".service-information").length>0){
23358		$(".service-information").each(function(){
23359			var _target = $(this);
23360			var markerlist = [];
23361			var map;
23362			var latlons = [];
23363			var _last_sizeDetect;
23364			var _last_latlon;
23365			var _last_fit_level;
23366			var _last_fit_lat;
23367			var _last_fit_lon;			
23368			var _dev = {};
23369			var _dev_pinsize = {};
23370			var _target_map = $(this);
23371			var _timer_id;
23372
23373			var _last_sizedetect="";
23374
23375			var imgAry = [];
23376			var pinImageNum;
23377			var nowPinSize;
23378			
23379			var map_id = "map"+_target.parent().attr("id");
23380			_target.find(".map-list").append("<div class='map-main' id='"+map_id+"'></div>");
23381	
23382
23383			function loadPinImage(_num , _marker, _file){
23384					$('<img src="'+_file+'">').on('load', function(){
23385						var _target=$(this);
23386						if(_target[0].naturalHeight != 0){
23387							imgAry[_num] = {width:_target[0].naturalWidth, height:_target[0].naturalHeight};
23388							_marker.setImage(_file , new TMIData.Size(Math.round(_target[0].naturalWidth * nowPinSize) , Math.round(_target[0].naturalHeight * nowPinSize)) );
23389
23390						}
23391					});
23392			}
23393
23394			function addMarker(_num , _element){
23395				if(checkMap()){
23396//console.log("pinfile ="+_element.data("pin"));
23397					var _latlng = _element.data("latlng").split(",");
23398					if(_latlng[0] && _latlng[1]){
23399						var _lat = parseFloat(_latlng[0]);
23400						var _lng = parseFloat(_latlng[1]);
23401						var latlon = new TMIData.LatLon(_lat, _lng);
23402						var _error_flag = false;
23403						var _file = getPinFileName(_element.data("pin"));
23404						try {
23405							var marker = new TMIMapapi.Marker(latlon);
23406						}catch(e){
23407							_error_flag = true;
23408						}
23409						if(!_error_flag){
23410							marker.setUserData({
23411								"name":_element.data("title"),
23412								"address":_element.data("address"),
23413								"tel":_element.data("tel")
23414								});
23415							marker.addEvent(
23416								TMIMapapi.EVENT_CLICK,
23417								openInfoWindow,
23418								"MarkerClick");
23419							latlons.push(new TMIData.LatLon(_lat, _lng));
23420							markerlist[_num] = {marker:marker, latlon:latlon, file:_file};
23421							map.addOverlay(marker);
23422							loadPinImage(_num,marker,_file);
23423
23424							return marker;
23425						}else{
23426							return {};
23427						}
23428					}else{
23429						return {};
23430					}
23431				}else{
23432					return {};
23433				}
23434
23435			}
23436			
23437			function getPinFileName(_pinfile){
23438				var _pintype = _target.data("pintype");
23439				if(_pintype == 1 || !_pinfile){
23440					// non text
23441					return "/assets/a/images/shop-list-0001/icon-pin.png";
23442				}else{
23443					// text
23444					return _pinfile;
23445				}
23446				
23447			}
23448			
23449			function checkMap(){ /* mapmaster access check */
23450				var _check_map = typeof TMIMapapi;
23451				if(_check_map === "object")
23452				{
23453					return true;
23454				}else{
23455					return false;
23456				}
23457			}
23458			function setMap(){
23459				if(checkMap()){
23460					if($("#"+map_id).width() > 0){
23461						map = new TMIMapapi.Map(map_id);
23462		                map.addEvent(TMIMapapi.EVENT_NO_CITYPLAN,function(){
23463		                    var mapInfo = map.getMapInfo();
23464		                    map.changeLevel(mapInfo.level+1);
23465       						_last_fit_level = mapInfo.level+1;
23466		                });
23467						map.setMapSettings({
23468							zoomReverse:true,
23469	                        wheelZoom:false,
23470	                        dragMove_sp: false
23471						});
23472						zoomControl = new TMIMapapi.ZoomControl({
23473							position: TMIMapapi.ControlPosition.TOP_RIGHT
23474						});
23475						map.addControl(zoomControl);
23476
23477						var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
23478						if(sizeDetect.indexOf("pc") < 0){
23479							var controlDiv = document.createElement('div');
23480							controlDiv.style.backgroundColor = '#FFF';
23481							controlDiv.style.border = '1px solid #000';
23482							var controlButton = document.createElement('input');
23483							controlButton.type = 'button';
23484							controlButton.value = '地図の移動方法について';
23485							controlButton.onclick = function () {
23486								var _html = '<div class="control-message "><span>中心に移動したい箇所を<br>ダブルタップしてください</span></div>';
23487								_target_map.find(".map-list").append(_html);
23488								_target_map.find(".map-list .control-message").click(function(){
23489									$(this).remove();
23490								});
23491							};
23492							controlDiv.appendChild(controlButton);
23493							var customControl = new TMIMapapi.CustomControl(controlDiv,{
23494								position: TMIMapapi.ControlPosition.TOP_LEFT,
23495								offset: new TMIData.Pixel(10, 10)
23496							});
23497							map.addControl(customControl);
23498						}
23499						var _panel = _target_map.find(".pin-data");
23500						var _element = $(_panel[0]);
23501						nowPinSize = parseFloat(_dev_pinsize[sizeDetect]);
23502					
23503						var _marker = addMarker(0, _target.find(".map-list-wrapper"));
23504						_last_latlon = _marker.latlon;			
23505						var _level_data = _target_map.data("level");
23506						if(_level_data){
23507
23508							_dev["sp"] = _level_data["sp"];
23509							_dev["tab-normal"] = _dev["tab-large"] = _level_data["tab"];
23510							_dev["pc-small"] = _dev["pc-normal"] = _dev["pc-large"] = _level_data["pc"];
23511							if(_dev[sizeDetect] != 9999 && isFinite(DMS.mapListLevel[_dev[sizeDetect]])){
23512								drawFitMap(DMS.mapListLevel[_dev[sizeDetect]] , _last_latlon.lat, _last_latlon.lon);
23513							}else{
23514								if(latlons.length > 0){
23515									var _fittingLevel = map.getFittingLevelByArray(latlons, 44);
23516									drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
23517
23518								}
23519							}
23520						}else{
23521							if(latlons.length > 0){
23522								var _fittingLevel = map.getFittingLevelByArray(latlons);
23523								drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
23524
23525							}else{
23526
23527								map.draw();
23528							}
23529						}
23530					}
23531				}else{
23532					_target.find("#"+map_id).html("この環境ではmapmasterによる地図は表示できません。").css({"text-align":"center", "font-size":"22px"});
23533				}
23534			}
23535			function drawFitMap(_level, _lat, _lon){
23536				if(!_level || _level == null){
23537					_level = 19;
23538				}
23539				if(_lat && _lon){
23540					if(_level !=  _last_fit_level || _lat != _last_fit_lat || _lon != _last_fit_lon){
23541						map.draw({
23542							level:_level,
23543							lat:_lat,
23544							lon:_lon
23545						});
23546						_last_fit_level = _level;
23547						_last_fit_lat = _lat;
23548						_last_fit_lon = _lon;
23549					}
23550				}
23551
23552			}
23553			function fittingLevel(){
23554				if(latlons.length > 0){
23555					var fittingLevel = map.getFittingLevelByArray(latlons, 44);
23556
23557					if(_last_fit_level != fittingLevel.level){
23558						map.changeLevel(fittingLevel.level);
23559						_last_fit_level = fittingLevel.level;
23560					}
23561					if(_last_fit_lat != fittingLevel.center.lat || _last_fit_lon != fittingLevel.center.lon){
23562						map.changeCenter(fittingLevel.center);
23563						_last_fit_lat = fittingLevel.center.lat;
23564						_last_fit_lon = fittingLevel.center.lon;
23565					}
23566				}
23567			}
23568			
23569			function openInfoWindow(marker, latlon, pixel) {
23570				var _obj = marker.getUserData();
23571				var html = '<div class="marker-box">';
23572				html += '<div class="name">'+_obj.name+'</div>';
23573				html += '<div>'+_obj.address+'</div>';
23574				html += '<div>'+marker.getUserData().tel+'</div>';
23575				html += '<div>';
23576				marker.openInfoWindow(html);
23577			}
23578
23579			var _pinsize_data = _target_map.data("pinsize");
23580			if(_pinsize_data){
23581				_dev_pinsize["sp"] = _pinsize_data["sp"];
23582				_dev_pinsize["tab-normal"] = _dev_pinsize["tab-large"] = _pinsize_data["tab"];
23583				_dev_pinsize["pc-small"] = _dev_pinsize["pc-normal"] = _dev_pinsize["pc-large"] = _pinsize_data["pc"];
23584			}else{
23585				_dev_pinsize["sp"] = 1;
23586				_dev_pinsize["tab-normal"] = _dev_pinsize["tab-large"] = 1;
23587				_dev_pinsize["pc-small"] = _dev_pinsize["pc-normal"] = _dev_pinsize["pc-large"] = 1;
23588			}
23589
23590			setMap();
23591
23592			$(window).resize(function(){
23593				if(map){
23594					clearTimeout(_timer_id);
23595					_timer_id = setTimeout(function(){
23596
23597						map.draw();
23598						var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
23599						if(_last_sizeDetect != sizeDetect){
23600							if(_dev && _dev[sizeDetect] != 9999 && isFinite(DMS.mapListLevel[_dev[sizeDetect]])){
23601								map.changeLevel(DMS.mapListLevel[_dev[sizeDetect]]);
23602								_last_fit_level = DMS.mapListLevel[_dev[sizeDetect]];
23603								map.changeCenter(_last_latlon);
23604								_last_fit_lat = _last_latlon._lat;
23605								_last_fit_lon = _last_latlon._lon;
23606							}else{
23607						_last_fit_lat = undefined;
23608						_last_fit_lon = undefined;
23609								fittingLevel();
23610							}
23611							_last_sizeDetect = sizeDetect;
23612
23613							if(sizeDetect.indexOf("pc") >= 0){
23614								_target_map.find(".map-list .control-message").remove();
23615							}
23616								
23617							nowPinSize = parseFloat(_dev_pinsize[sizeDetect]);
23618							for(var i=0;i<markerlist.length;i++){
23619								var _o = markerlist[i];
23620								if(imgAry[i]){
23621									_o.marker.setImage(_o.file,new TMIData.Size(Math.round(imgAry[i].width * nowPinSize) , Math.round(imgAry[i].height * nowPinSize)) );
23622								}
23623							}
23624						}
23625					},300);
23626
23627				}
23628
23629			});
23630
23631			function changeDisplay(){
23632				if(map){
23633					if(latlons.length > 0){
23634						var _fittingLevel = map.getFittingLevelByArray(latlons);
23635						drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
23636					}else{
23637						map.draw();
23638						fittingLevel();
23639					}
23640				}
23641			}
23642			DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function(){
23643				changeDisplay();
23644			});
23645			/*TMICommon.Event.removeEventType(map.mapContainer , TMIMapapi.EVENT_MOUSE_WHEEL);*/
23646
23647		});
23648	}
23649});
23650$(function () {
23651	if($(".shop-list-0001").length>0){
23652		var _target = $(".shop-list-0001");
23653		var markerlist = [];
23654		var map;
23655		var latlons = [];
23656		var _active = $(".shop-list-0001 .tab-selector").data("active").split(",");
23657			var _dev = {};
23658		var _dev_pinsize = {};
23659		var imgAry = [];
23660		var pinImageNum;
23661		var nowPinSize;
23662		var queryCheckFlag = true;
23663			var _last_latlon;
23664			var _last_fit_level;
23665			var _last_fit_lat;
23666			var _last_fit_lon;
23667			var _timer_id;
23668			var _last_sizeDetect ;
23669			
23670		var _panelHeightAlignObj = {
23671			"base_class":".shop-list-0001 .panel-list .store-panel", 
23672			"sub_class":[
23673				".store-panel-wrapper"
23674			]
23675			}
23676		var _sortpanelHeightAlignPcObj = {
23677			"base_class":".shop-list-0001 .service-list li", 
23678			"sub_class":[
23679				".service-item"
23680			]
23681			}
23682		var _sortpanelHeightAlignMobileObj = {
23683			"base_class":".shop-list-0001 .service-list li", 
23684			"sub_class":[
23685				"span"
23686			]
23687			}
23688		var _democars = [];
23689		var _democars_store_list = [];
23690		DMS.panelHeightAlign(_panelHeightAlignObj);
23691		setAlignSortServiceList();
23692
23693		var _last_tab = $(".shop-list-0001 .tab-selector li").first();
23694		var _last_sizedetect="";
23695		
23696		var map_id = "map"+$(".shop-list-0001").parent().attr("id");
23697		$(".shop-list-0001").find(".map-list").append("<div class='map-main' id='"+map_id+"'></div>");
23698
23699
23700		$(".shop-list-0001 .tab-selector li").click(function(){
23701			if(!_last_tab.is($(this))){
23702				_last_tab.removeClass("active-tab");
23703				$(this).addClass("active-tab");
23704				setActiveTab($(this));
23705				setUnActiveTab(_last_tab);
23706				_last_tab = $(this);
23707				
23708				/* map or panel */
23709				if($(this).is( $(".shop-list-0001 .tab-selector li").first())){
23710					_target.find(".panel-container").hide();
23711					_target.find(".map-list").show();
23712					setMap();
23713				}else{
23714					_target.find(".panel-container").show();
23715					DMS.panelHeightAlign(_panelHeightAlignObj);
23716					_target.find(".map-list").hide();
23717					setSortArea();
23718					sortMain(false);
23719
23720				}
23721				map.draw();
23722
23723				return false;
23724			}
23725		});
23726		
23727		
23728		/* sort UI */
23729		function toggleServiceItem(_element){
23730			var _item = _element.find(".item-check");
23731			if(_item.hasClass("active")){
23732				_element.find(".item-check").removeClass($(".shop-list-0001 .service-list").data("activeclass"));
23733			}else{
23734				_element.find(".item-check").addClass($(".shop-list-0001 .service-list").data("activeclass"));
23735			}
23736			_element.find(".item-check").toggleClass("active");
23737	
23738		}
23739		function activeServiceItem(_element){
23740			_element.find(".item-check").addClass($(".shop-list-0001 .service-list").data("activeclass"));
23741			_element.find(".item-check").addClass("active");
23742
23743		}
23744		$(".shop-list-0001 .search-box-container .service-list li .service-item").click(function(){
23745			toggleServiceItem($(this));
23746			sortMain(true);
23747		});
23748		$(".shop-list-0001 .search-box-container .search-button").click(function(){
23749			sortMain(true);
23750		});
23751		$(".shop-list-0001 .search-box-container .sort-list select").change(function(){
23752			sortMain(true);
23753		});
23754		$(".shop-list-0001 .search-box-container .sort-list .keyword-text").keypress(function(e){
23755			if(e.which == 13){
23756				$(this).blur();
23757				sortMain(true);
23758			}
23759		});
23760		$(".shop-list-0001 .search-box-container .sort-box .button-reset").click(function(){
23761			 $(".shop-list-0001 .search-box-container .sort-list .sort-area").val("すべてのエリア");
23762			 $(".shop-list-0001 .search-box-container .sort-list .sort-carname").val("未選択");
23763			 $(".shop-list-0001 .search-box-container .sort-list .keyword-text").val("");
23764			$(".shop-list-0001 .search-box-container .service-list li").each(function(){
23765				$(this).find(".item-check").removeClass("active").removeClass($(".shop-list-0001 .service-list").data("activeclass"));
23766			});
23767			sortMain(true);
23768		});
23769
23770		function setDemocarData(json){
23771			var _data = json[i];
23772			for(var i=0;i<json.length;i++){
23773				var _data = json[i];
23774				_democars[_data["CAR_NAME"]] = true;
23775				if(!_democars_store_list[_data["shop_id"]]){
23776					_democars_store_list[_data["shop_id"]] = [];
23777				}
23778				_democars_store_list[_data["shop_id"]].push(_data["CAR_NAME"]);
23779			}
23780			addDemocarToDOM();
23781		}
23782		function addDemocarToDOM(){
23783			for(var i in _democars){
23784				if(i){
23785					var _html = '<option value="'+i+'">'+i+'</option>';
23786					$(".shop-list-0001 .sort-list-car .sort-carname").append(_html);
23787				}
23788			}
23789			var _list = $(".shop-list-0001 li.store-panel");
23790			for(var i=0;i<_list.length;i++){
23791				var _shopid = $(_list[i]).data("shopid");
23792				if(_democars_store_list[_shopid]){
23793					$(_list[i]).data("democar" , _democars_store_list[_shopid].join(","))
23794				}	
23795			}
23796			$(".shop-list-0001 .sort-list-car .loading").hide();
23797			$(".shop-list-0001 .sort-list-car .sort-list-form").show();
23798		}
23799		
23800		function setUnActiveTab(_element){
23801			_element.removeClass("init-background bg-color-"+_active[2]+" txt-color-"+_active[1]);
23802			_element.addClass("init-background bg-color-"+_active[0]+" txt-color-"+_active[2]);
23803			
23804		}
23805		function setActiveTab(_element){
23806			_element.removeClass("init-background bg-color-"+_active[0]+" txt-color-"+_active[2]);
23807			_element.addClass("init-background  bg-color-"+_active[2]+" txt-color-"+_active[1]);
23808		}
23809	
23810		function sortMain(_writeCookieFlag){
23811			var _area = $(".shop-list-0001 .search-box-container .sort-list .sort-area").val();
23812			var _democar = $(".shop-list-0001 .search-box-container .sort-list .sort-carname").val();
23813			var _keyword = $(".shop-list-0001 .search-box-container .sort-list .keyword-text").val();
23814			var _democar_shopid = $(".shop-list-0001 .search-box-container .sort-list .sort-carname option[value='"+_democar+"']").data("shopid");
23815			if(typeof _democar_shopid == "number"){
23816				_democar_shopid = String(_democar_shopid);
23817			}
23818		
23819	//		console.log(_area+" "+_democar+" "+_keyword);
23820			var _service = $(".shop-list-0001 .search-box-container .service-list li");
23821			var _service_id = [];
23822			var _service_names=[];
23823			for(var i=0;i<_service.length;i++){
23824				if($(_service[i]).find(".active").length > 0){
23825					_service_id.push($(_service[i]).find(".service-item").data("id"));
23826					_service_names.push($(_service[i]).find("span").html() );
23827				}
23828			}
23829			// save cookie
23830			if(_writeCookieFlag){
23831
23832				$.cookie("shl-01-area", _area, { expires: 2000});
23833//				$.cookie("shl-01-service", _service_names, { expires: 2000});
23834			}
23835	//		console.log(_service_id);
23836			
23837			/* search */
23838			var _total = 0;
23839			var _panel = $(".shop-list-0001 .search-box-container .panel-list .store-panel");
23840			for(var i=0;i<_panel.length;i++){
23841				var _element = $(_panel[i]);
23842				
23843				/* area */
23844				var _area_flag = false;
23845				if(_area.indexOf("すべてのエリア") < 0){
23846					var _p_area = _element.data("area").split(",");
23847					for(var j=0;j<_p_area.length;j++){
23848						if(_area === _p_area[j]){
23849							_area_flag = true;
23850							break;
23851						}
23852					}
23853				}else{
23854					_area_flag = true;
23855				}
23856				
23857				/* democar */
23858				var _democar_flag = false;
23859
23860				if(_democar_shopid){
23861						var _p_democar = _democar_shopid.split(",");
23862						for(var j=0;j<_p_democar.length;j++){
23863							if(_element.data("shopid") == _p_democar[j]){
23864								_democar_flag = true;
23865								break;
23866							}
23867						}
23868				}else{
23869						_democar_flag = true;
23870				}
23871
23872				/* keyword */
23873				var _keyword_flag = false;
23874				if(_keyword != "" && _keyword != null && _keyword != undefined && _keyword.length > 0){
23875					if(_element.find(".panel-info").text().indexOf(_keyword) >= 0){
23876						_keyword_flag = true;
23877					}
23878				}else{
23879					_keyword_flag = true;
23880				}
23881
23882				/* service */
23883				var _service_flag = false;
23884				var _service_count = 0;
23885				if(_service_id.length > 0){
23886					var _p_service = _element.data("service").split(",");
23887					for(j=0;j<_service_id.length;j++){
23888						for(k=0;k<_p_service.length;k++){
23889							if(parseInt(_service_id[j],10) == parseInt(_p_service[k],10)){
23890								_service_count++;
23891								break;
23892							}
23893						}
23894					}
23895					if(_service_count == _service_id.length){
23896						_service_flag = true;
23897					}
23898				}else{
23899					_service_flag = true;
23900				}
23901
23902	//console.log(i+"     "+_area_flag +" "+ _democar_flag +" "+ _keyword_flag +" "+ _service_flag);
23903				if(_area_flag && _democar_flag && _keyword_flag && _service_flag){
23904					_element.show();
23905
23906//					addMarker(i, _element);
23907					if(checkMap()){
23908						if(markerlist[i]){
23909							markerlist[i].marker.show();
23910						}
23911					}
23912					_total++;
23913				}else{
23914                    _element.hide();
23915
23916					if(checkMap()){
23917						if(markerlist[i]){
23918							markerlist[i].marker.hide();
23919						}
23920					}
23921				}
23922			}
23923			$(".shop-list-0001 .search-box-container .search-count-box .result").html(_total);
23924			DMS.panelHeightAlign(_panelHeightAlignObj);
23925			if(_total == 0){
23926				    $(".shop-list-0001 .panel-message").show();
23927			}else{
23928				    $(".shop-list-0001 .panel-message").hide();
23929			}
23930
23931		}
23932
23933		function loadPinImage(_num , _marker, _file){
23934			$('<img src="'+_file+'">').on('load', function(){
23935				var _target=$(this);
23936				if(_target[0].naturalHeight != 0){
23937					imgAry[_num] = {width:_target[0].naturalWidth, height:_target[0].naturalHeight};
23938					_marker.setImage(_file , new TMIData.Size(Math.round(_target[0].naturalWidth * nowPinSize) , Math.round(_target[0].naturalHeight * nowPinSize)) );
23939
23940				}
23941			});
23942		}
23943
23944	
23945		function addMarker(_num , _element){
23946			if(map &&  checkMap()){
23947				var _latlng = _element.data("latlng").split(",");
23948				if(_latlng[0] && _latlng[1]){
23949					var _lat = parseFloat(_latlng[0]);
23950					var _lng = parseFloat(_latlng[1]);
23951					if( _element.data("pin")){
23952						var latlon = new TMIData.LatLon(_lat, _lng);
23953						var _error_flag = false;
23954						var _file = getPinFileName(_element.data("pin"));
23955						try {
23956							var marker = new TMIMapapi.Marker(latlon);
23957						}catch(e){
23958							_error_flag = true;
23959						}
23960						if(!_error_flag){
23961							marker.setUserData({
23962								"name":_element.find(".store-panel-title").text(),
23963								"address":_element.find(".store-panel-address").text(),
23964								"tel":$(_element.find(".store-panel-tel")[0]).text(),
23965								"url":_element.find(".button-info a").attr("href")
23966								});
23967							marker.addEvent(
23968								TMIMapapi.EVENT_CLICK,
23969								openInfoWindow,
23970								"MarkerClick");
23971							latlons.push(new TMIData.LatLon(_lat, _lng));
23972							markerlist[_num] =  {marker:marker, latlon:latlon, file:_file};
23973							loadPinImage(_num,marker,_file);
23974							
23975							map.addOverlay(marker);
23976						}else{
23977							return {};
23978						}
23979					}else{
23980						markerlist[_num] = null;
23981					}
23982					return marker;
23983				}else{
23984					return {};
23985				}
23986			}else{
23987				return {};
23988			}
23989
23990		}
23991		
23992		function getPinFileName(_pinfile){
23993			var _suffix = $(".shop-list-0001").data("channel");
23994			var _pintype = $(".shop-list-0001").data("pintype");
23995			if(_pintype == 1 || !_pinfile){
23996				// non text
23997				return "/assets/a/images/shop-list-0001/icon-pin.png";
23998			}else{
23999				// text
24000				return _pinfile;
24001			}
24002			
24003		}
24004		
24005		function checkMap(){ /* mapmaster access check */
24006			var _check_map = typeof TMIMapapi;
24007			if(_check_map === "object")
24008				return true;
24009			else
24010				return false;
24011		}
24012		function setMap(){
24013			if(!map){
24014
24015				if(checkMap()){
24016					map = new TMIMapapi.Map(map_id);
24017					map.addEvent(TMIMapapi.EVENT_NO_CITYPLAN,function(){
24018						var mapInfo = map.getMapInfo();
24019						map.changeLevel(mapInfo.level+1);
24020					});
24021
24022					map.setMapSettings({
24023						zoomReverse:true,
24024						wheelZoom:false,
24025						dragMove_sp: false
24026					});
24027					zoomControl = new TMIMapapi.ZoomControl({
24028						position: TMIMapapi.ControlPosition.TOP_RIGHT
24029					});
24030					map.addControl(zoomControl);
24031
24032					var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
24033					if(sizeDetect.indexOf("pc") < 0){
24034						var controlDiv = document.createElement('div');
24035						controlDiv.style.backgroundColor = '#FFF';
24036						controlDiv.style.border = '1px solid #000';
24037						var controlButton = document.createElement('input');
24038						controlButton.type = 'button';
24039						controlButton.value = '地図の移動方法について';
24040						controlButton.onclick = function () {
24041							var _html = '<div class="control-message "><span>中心に移動したい箇所を<br>ダブルタップしてください</span></div>';
24042							_target.find(".map-list").append(_html);
24043							_target.find(".map-list .control-message").click(function(){
24044								$(this).remove();
24045							});
24046						};
24047						controlDiv.appendChild(controlButton);
24048						var customControl = new TMIMapapi.CustomControl(controlDiv,{
24049							position: TMIMapapi.ControlPosition.TOP_LEFT,
24050							offset: new TMIData.Pixel(10, 10)
24051						});
24052						map.addControl(customControl);
24053					}
24054
24055
24056					var _panel = $(".shop-list-0001 .search-box-container .panel-list .store-panel");
24057
24058					var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
24059					nowPinSize = parseFloat(_dev_pinsize[sizeDetect]);
24060
24061					for(var i=0;i<_panel.length;i++){
24062						var _element = $(_panel[i]);
24063						
24064						addMarker(i, _element);
24065
24066					}
24067					
24068/*					TMICommon.Event.removeEventType(map.mapContainer , TMIMapapi.EVENT_MOUSE_WHEEL); */
24069
24070					var _fittingLevel = map.getFittingLevelByArray(latlons, 44);
24071					drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
24072					var _fittingLevel = map.getFittingLevelByArray(latlons, 44);
24073					drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
24074					
24075					setSortArea();
24076					sortMain(false);
24077				}else{
24078					/* dummy function */
24079					map = {
24080						"draw":function(){},
24081						"removeOverlay":function(){},
24082						"addOverlay":function(){},
24083						"getFittingLevelByArray":function(){},
24084						"changeLevel":function(){},
24085						"changeCenter":function(){}
24086					};
24087					$(".shop-list-0001 .map-list #map").html("この環境ではmapmasterによる地図は表示できません。").css({"text-align":"center", "font-size":"22px"});
24088
24089					setSortArea();
24090					sortMain(false);
24091				}
24092			}else{
24093				setSortArea();
24094				sortMain(false);
24095			}
24096		}
24097
24098		function setSortArea(){
24099			var _areaname = "";
24100			var _areaquery = "";
24101			if(queryCheckFlag){
24102				_areaquery = decodeURI(DMS.getQuery("shl-01-area"));
24103			}
24104
24105
24106			var _areaflag = false;
24107
24108			// unit setting
24109			if(_target.data("defaultarea") ){
24110				$(".shop-list-0001 .search-box-container .sort-list-form select option").each(function(a , b){
24111					if(_target.data("defaultarea") == $(b).attr("value")){
24112						_areaname = $(b).attr("value");
24113					}
24114				});
24115			}
24116
24117			
24118			//cookie
24119			$(".shop-list-0001 .search-box-container .sort-list-form select option").each(function(a , b){
24120				if($.cookie("shl-01-area") == $(b).attr("value")){
24121					_areaname = $(b).attr("value");
24122					_areaflag = true;
24123				}
24124			});
24125
24126			//url query
24127			$(".shop-list-0001 .search-box-container .sort-list-form select option").each(function(a , b){
24128				if(_areaquery == $(b).attr("value")){
24129					_areaname = $(b).attr("value");
24130					_areaflag = true;
24131				}
24132			});
24133
24134
24135			//area
24136			if(_areaname){
24137				 $(".shop-list-0001 .search-box-container .sort-list .sort-area").val(_areaname);
24138			}
24139
24140			//service
24141			var _url_service_list = "";
24142			if(queryCheckFlag){
24143				_url_service_list = DMS.getRegExpQuery(/shl-01-service[0-9]+/);
24144			}
24145			var _servicename = []
24146			for(var i=0;i<_url_service_list.length;i++){
24147				_servicename.push(_url_service_list[i].value);
24148			}
24149
24150			var _ui_service_name_list = $(".shop-list-0001 .search-box-container .service-list li span");
24151			for(var i=0;i<_ui_service_name_list.length;i++){
24152				for(var j=0;j<_servicename.length;j++){
24153					if($(_ui_service_name_list[i]).text() == _servicename[j]){
24154						activeServiceItem($(_ui_service_name_list[i]).parents(".service-item"));
24155					}
24156				}
24157			}
24158			
24159			queryCheckFlag = false; // first access only
24160
24161		}
24162
24163
24164			function drawFitMap(_level, _lat, _lon){
24165				if(!_level || _level == null){
24166					_level = 4;
24167				}
24168				if(_lat && _lon){
24169					if(_level !=  _last_fit_level || _lat != _last_fit_lat || _lon != _last_fit_lon){
24170						map.draw({
24171							level:_level,
24172							lat:_lat,
24173							lon:_lon
24174						});
24175						_last_fit_level = _level;
24176						_last_fit_lat = _lat;
24177						_last_fit_lon = _lon;
24178					}
24179				}
24180
24181			}
24182		function fittingLevel(){
24183				if(latlons.length > 0){
24184					var fittingLevel = map.getFittingLevelByArray(latlons, 44);
24185
24186					if(_last_fit_level != fittingLevel.level){
24187						map.changeLevel(fittingLevel.level);
24188						_last_fit_level = fittingLevel.level;
24189					}
24190					if(_last_fit_lat != fittingLevel.center.lat || _last_fit_lon != fittingLevel.center.lon){
24191						map.changeCenter(fittingLevel.center);
24192						_last_fit_lat = fittingLevel.center.lat;
24193						_last_fit_lon = fittingLevel.center.lon;
24194					}
24195				}
24196			}
24197		
24198		function openInfoWindow(marker, latlon, pixel) {
24199			var _obj = marker.getUserData();
24200			var html = '<div class="marker-box">';
24201			html += '<div><a href="'+_obj.url+'">'+_obj.name+'</a></div>';
24202			html += '<div>'+_obj.address+'</div>';
24203			html += '<div>'+marker.getUserData().tel+'</div>';
24204			html += '<div>';
24205			marker.openInfoWindow(html);
24206		}
24207
24208		function setSearchboxOpener(){
24209			$(".shop-list-0001 .search-box-opener").click(function(){
24210				if($(this).css("display").indexOf("none") < 0){
24211					$(".shop-list-0001 .sort-box-wrapper").addClass("opener-aniamtion"); // set transition time
24212					$(".shop-list-0001 .sort-box-wrapper").toggleClass("close-search");
24213					var _arrow_color = $(".shop-list-0001 .search-box-opener-content").data("arrowcolor");
24214					if($(".shop-list-0001 .sort-box-wrapper").hasClass("close-search")){
24215						// close
24216						$(".shop-list-0001 .sort-box-wrapper").css("margin-top", -$(".shop-list-0001 .sort-box").outerHeight());
24217						$(".shop-list-0001 .search-box-opener-content").html("条件で絞り込む").css("background-image","url('/assets/a/images/shop-list-0001/arrow/"+_arrow_color+".png')");
24218
24219					}else{
24220						// open
24221						$(".shop-list-0001 .sort-box-wrapper").css("margin-top", "0%");
24222						$(".shop-list-0001 .search-box-opener-content").html("閉じる").css("background-image","url('/assets/a/images/shop-list-0001/arrow_down/"+_arrow_color+".png')");
24223					}
24224				}
24225			});
24226		}
24227		
24228		function initializeSearcBoxOpener(){
24229			var sizedetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
24230			if((_last_sizedetect.indexOf("pc") >=0 || _last_sizedetect == "")
24231			    && (sizedetect.indexOf("sp") >= 0 || sizedetect.indexOf("tab") >= 0) ){
24232			    	// close sort menu
24233					$(".shop-list-0001 .sort-box-wrapper").css("margin-top", -$(".shop-list-0001 .sort-box").outerHeight());
24234					$(".shop-list-0001 .sort-box-wrapper").addClass("close-search");
24235			}
24236			if(sizedetect.indexOf("pc") >= 0){
24237				// remove transition time
24238				$(".shop-list-0001 .sort-box-wrapper").removeClass("opener-aniamtion");
24239				$(".shop-list-0001 .sort-box-wrapper").removeAttr("style").removeClass("close-search");
24240			}
24241			if($(".shop-list-0001 .sort-box-wrapper").hasClass("close-search")){
24242				$(".shop-list-0001 .sort-box-wrapper").css("margin-top", -$(".shop-list-0001 .sort-box").outerHeight());
24243			}
24244
24245		}
24246		function setAlignSortServiceList(){
24247			var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
24248			if(sizeDetect.indexOf("pc") >= 0){
24249				DMS.panelHeightAlign(_sortpanelHeightAlignPcObj);
24250			}else{
24251				DMS.panelHeightAlign(_sortpanelHeightAlignMobileObj);
24252			}
24253		}
24254
24255		function resizeMain(){
24256			DMS.panelHeightAlign(_panelHeightAlignObj);
24257			setAlignSortServiceList();
24258			initializeSearcBoxOpener();
24259
24260
24261			if(map){
24262				clearTimeout(_timer_id);
24263				_timer_id = setTimeout(function(){
24264					var sizeDetect = $("#size-detect").css("font-family").replace(/"/g,"").replace(/'/g,"");
24265
24266					nowPinSize = parseFloat(_dev_pinsize[sizeDetect]);
24267					for(var i=0;i<markerlist.length;i++){
24268						var _o = markerlist[i];
24269						if(imgAry[i]){
24270							_o.marker.setImage(_o.file,new TMIData.Size(Math.round(imgAry[i].width * nowPinSize) , Math.round(imgAry[i].height * nowPinSize)) );
24271						}
24272					}
24273					
24274					if(sizeDetect.indexOf("pc") >= 0){
24275						$(".map-list .control-message").remove();
24276					}
24277
24278
24279					map.draw();
24280					if(_last_sizeDetect != sizeDetect){
24281						if(_dev && _dev[sizeDetect] != 9999 && isFinite(DMS.mapListLevel[_dev[sizeDetect]])){
24282							map.changeLevel(DMS.mapListLevel[_dev[sizeDetect]]);
24283							_last_fit_level = DMS.mapListLevel[_dev[sizeDetect]];
24284							map.changeCenter(_last_latlon);
24285							_last_fit_lat = _last_latlon._lat;
24286							_last_fit_lon = _last_latlon._lon;
24287						}else{
24288					_last_fit_lat = undefined;
24289					_last_fit_lon = undefined;
24290							fittingLevel();
24291						}
24292						_last_sizeDetect = sizeDetect;
24293
24294					}
24295				},300);
24296
24297			}
24298
24299		}
24300
24301		var _pinsize_data = _target.data("pinsize");
24302		if(_pinsize_data){
24303			_dev_pinsize["sp"] = _pinsize_data["sp"];
24304			_dev_pinsize["tab-normal"] = _dev_pinsize["tab-large"] = _pinsize_data["tab"];
24305			_dev_pinsize["pc-small"] = _dev_pinsize["pc-normal"] = _dev_pinsize["pc-large"] = _pinsize_data["pc"];
24306		}else{
24307			_dev_pinsize["sp"] = 1;
24308			_dev_pinsize["tab-normal"] = _dev_pinsize["tab-large"] = 1;
24309			_dev_pinsize["pc-small"] = _dev_pinsize["pc-normal"] = _dev_pinsize["pc-large"] = 1;
24310		}
24311
24312		if(_target.data("defaultview") == 0){
24313			setMap();
24314			setActiveTab($($(".shop-list-0001 .tab-selector li")[0]));
24315			setUnActiveTab($($(".shop-list-0001 .tab-selector li")[1]));
24316			_last_tab = $($(".shop-list-0001 .tab-selector li")[0]);
24317		}else{
24318			setUnActiveTab($($(".shop-list-0001 .tab-selector li")[0]));
24319			setActiveTab($($(".shop-list-0001 .tab-selector li")[1]));
24320			_last_tab = $($(".shop-list-0001 .tab-selector li")[1]);
24321
24322			setSortArea();
24323			sortMain(false);
24324
24325		}
24326		setSearchboxOpener();
24327		initializeSearcBoxOpener();
24328
24329
24330		
24331		$(window).resize(function(){
24332			resizeMain();
24333		});
24334		
24335		function changeDisplay(){
24336			resizeMain();
24337				if(map){
24338					if(latlons.length > 0){
24339						var _fittingLevel = map.getFittingLevelByArray(latlons);
24340						drawFitMap(_fittingLevel.level, _fittingLevel.center.lat,_fittingLevel.center.lon);
24341					}else{
24342						map.draw();
24343						fittingLevel();
24344					}
24345				}
24346		}
24347		DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function(){
24348			changeDisplay();
24349		});
24350
24351	}
24352});
24353/*slider-0001*/
24354$(function() {
24355
24356    $('.slide_type01').on('init', function(){
24357      $('.slider-0001').addClass('initialized');
24358    });
24359
24360
24361setTimeout(function(){
24362
24363    $(".slider-0001").each(function() {
24364        var isfadeval = $(this).data("sliderAnimType");
24365        var speedval = $(this).data("sliderSpeed");
24366        var isfade = false,
24367            speed = 300
24368        if(isfadeval == '1'){
24369            isfade = true
24370            console.log('slider-0001 fade true')
24371            if(speedval == '2'){
24372                console.log('slider-0001 speed 300')
24373                speed = 300
24374            }else if(speedval == '1'){
24375                console.log('slider-0001 speed 800')
24376                speed = 800
24377            }else{
24378                console.log('slider-0001 speed 1300')
24379                speed = 1300
24380            }
24381        }else{
24382            isfade = false
24383            console.log('slider-0001 fade false')
24384            if(speedval == '2'){
24385                console.log('slider-0001 speed 200')
24386                speed = 100
24387            }else if(speedval == '1'){
24388                console.log('slider-0001 speed 400')
24389                speed = 300
24390            }else{
24391                console.log('slider-0001 speed 600')
24392                speed = 600
24393            }
24394        }
24395        mainSlick($(this), isfade, speed);
24396    });
24397
24398    function mainSlick(_target, _isfade, _speed) {
24399        var slider = _target.find('.slide_type01');
24400        var slider0001 = slider.slick({
24401          infinite: true,
24402          slidesToShow: 1,
24403          slidesToScroll: 1,
24404          autoplay: true,
24405          speed: _speed,
24406          dots: true,
24407          autoplaySpeed: 5000,
24408          fade: _isfade,
24409          dotsClass: 'slider-0001-slick-dots-01',
24410        });
24411    }
24412
24413}, 0.01);
24414
24415});
24416
24417/*slider-0003*/
24418$(function() {
24419    $(".slider-0003").each(function() {
24420        mainSlick($(this));
24421    });
24422
24423    function mainSlick(_target) {
24424        var _slider = _target.find('.slide_type03');
24425        var _next_arrow = _target.find('.slick-next0003-03');
24426        var _prev_arrow = _target.find('.slick-prev0003-03');
24427        var slider0003 = _slider.slick({
24428            infinite: true,
24429            autoplay: false,
24430            speed: 400,
24431            autoplaySpeed: 5000,
24432            slidesToShow: 3,
24433            slidesToScroll: 1,
24434            arrows: false,
24435            dots: false,
24436            initialSlide: 0,
24437            responsive: [{
24438                    breakpoint: 1280,
24439                    settings: {
24440                        slidesToShow: 3,
24441                        slidesToScroll: 1
24442                    }
24443                },
24444                {
24445                    breakpoint: 768,
24446                    settings: {
24447                        slidesToShow: 1,
24448                        slidesToScroll: 1
24449                    }
24450                }
24451            ]
24452        });
24453        _next_arrow.on('click', function() {
24454            _slider.slick("slickNext");
24455        });
24456        _prev_arrow.on('click', function() {
24457            _slider.slick("slickPrev");
24458        });
24459
24460        //tab-0001用 none → block 再セット処理
24461        var thisSliderWrap = _target.parent(".unit-wrapper");
24462        $(".tab-0001").click(function() {
24463            if(thisSliderWrap.is(':visible')){
24464              slider0003.slick("setPosition");
24465            }
24466        });
24467
24468
24469    }
24470});/*staff-recommendation-0001*/
24471$(function() {
24472
24473    // function setSpDom() {
24474    //     var dom = $(".staff-recommendation-slider.slick-slider").html();
24475    //     var insertTarget = $(".staff-recommendation-slider.sp-wrap");
24476    //     insertTarget.append(dom);
24477    // }
24478    // setSpDom();
24479
24480    $(".staff-recommendation-0001").each(function() {
24481        var list_item = $(this).find(".staff-recommendation-slider.slick-slider .staff-recommendation-list");
24482        var list_item_count = list_item.length;
24483        var _thisSlider = $(this).find(".staff-recommendation-slider");
24484
24485        if (list_item_count > 1) {
24486            mainSlick($(this));
24487        } else {
24488            _thisSlider.addClass('panel--one');
24489        }
24490    });
24491
24492    function mainSlick(_target) {
24493        var _slider = _target.find('.slick-slider');
24494        var _next_arrow = _target.find('.staff-recommendation__slick-next');
24495        var _next_arrow__2 = _target.find('.staff-recommendation__slick-next-2');
24496        var _prev_arrow = _target.find('.staff-recommendation__slick-prev');
24497
24498
24499        var slide_item = _target.find(".staff-recommendation-slider.slick-slider .staff-recommendation-list");
24500        var slide_item_count = slide_item.length;
24501        // console.log(slide_item_count)
24502
24503        var initialSlide;
24504
24505        if (slide_item_count > 2) {
24506            initialSlide = 1;
24507        } else {
24508            initialSlide = 0;
24509        }
24510
24511        _slider.slick({
24512            infinite: true,
24513            autoplay: false,
24514            centerMode: true,
24515            centerPadding: '20%',
24516            dots: false,
24517            initialSlide: initialSlide,
24518            draggable: true,
24519            slidesToShow: 2,
24520            responsive: [
24521                {
24522                    breakpoint: 4060,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24523                    settings: {
24524                        slidesToShow: 2,
24525                        centerPadding: '30%'
24526                    }
24527                },
24528                {
24529                    breakpoint: 3960,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24530                    settings: {
24531                        slidesToShow: 2,
24532                        centerPadding: '29%'
24533                    }
24534                },
24535                {
24536                    breakpoint: 3860,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24537                    settings: {
24538                        slidesToShow: 2,
24539                        centerPadding: '28%'
24540                    }
24541                },
24542                {
24543                    breakpoint: 3760,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24544                    settings: {
24545                        slidesToShow: 2,
24546                        centerPadding: '28%'
24547                    }
24548                },
24549                {
24550                    breakpoint: 3660,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24551                    settings: {
24552                        slidesToShow: 2,
24553                        centerPadding: '27%'
24554                    }
24555                },
24556                {
24557                    breakpoint: 3560,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24558                    settings: {
24559                        slidesToShow: 2,
24560                        centerPadding: '26.5%'
24561                    }
24562                },
24563                {
24564                    breakpoint: 3460,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24565                    settings: {
24566                        slidesToShow: 2,
24567                        centerPadding: '26%'
24568                    }
24569                },
24570                {
24571                    breakpoint: 3360,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24572                    settings: {
24573                        slidesToShow: 2,
24574                        centerPadding: '25%'
24575                    }
24576                },
24577                {
24578                    breakpoint: 3260,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24579                    settings: {
24580                        slidesToShow: 2,
24581                        centerPadding: '24%'
24582                    }
24583                },
24584                {
24585                    breakpoint: 3160,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24586                    settings: {
24587                        slidesToShow: 2,
24588                        centerPadding: '23%'
24589                    }
24590                },
24591                {
24592                    breakpoint: 3060,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24593                    settings: {
24594                        slidesToShow: 2,
24595                        centerPadding: '22%'
24596                    }
24597                },
24598                {
24599                    breakpoint: 2960,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24600                    settings: {
24601                        slidesToShow: 2,
24602                        centerPadding: '21%'
24603                    }
24604                },
24605                {
24606                    breakpoint: 2860,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24607                    settings: {
24608                        slidesToShow: 2,
24609                        centerPadding: '20%'
24610                    }
24611                },
24612                {
24613                    breakpoint: 2760,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24614                    settings: {
24615                        slidesToShow: 2,
24616                        centerPadding: '19%'
24617                    }
24618                },
24619                {
24620                    breakpoint: 2660,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24621                    settings: {
24622                        slidesToShow: 2,
24623                        centerPadding: '18%'
24624                    }
24625                },
24626                {
24627                    breakpoint: 2560,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24628                    settings: {
24629                        slidesToShow: 2,
24630                        centerPadding: '16%'
24631                    }
24632                },
24633                {
24634                    breakpoint: 2460,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24635                    settings: {
24636                        slidesToShow: 2,
24637                        centerPadding: '15%'
24638                    }
24639                },
24640                {
24641                    breakpoint: 2360,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24642                    settings: {
24643                        slidesToShow: 2,
24644                        centerPadding: '13%'
24645                    }
24646                },
24647                {
24648                    breakpoint: 2260,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24649                    settings: {
24650                        slidesToShow: 2,
24651                        centerPadding: '11%'
24652                    }
24653                },
24654                {
24655                    breakpoint: 2160,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24656                    settings: {
24657                        slidesToShow: 2,
24658                        centerPadding: '9%'
24659                    }
24660                },
24661                {
24662                    breakpoint: 2060,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24663                    settings: {
24664                        slidesToShow: 2,
24665                        centerPadding: '8%'
24666                    }
24667                },
24668                {
24669                    breakpoint: 1960,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24670                    settings: {
24671                        slidesToShow: 2,
24672                        centerPadding: '7.5%'
24673                    }
24674                },
24675                {
24676                    breakpoint: 1860,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24677                    settings: {
24678                        slidesToShow: 2,
24679                        centerPadding: '7%'
24680                    }
24681                },
24682                {
24683                    breakpoint: 1760,//pc-small-nomal (min-width: 1280px) and (max-width: 1759px)
24684                    settings: {
24685                        slidesToShow: 2,
24686                        centerPadding: '112px'
24687                    }
24688                },
24689                {
24690                    breakpoint: 1280,//tab-large(min-width: 1024px) and (max-width: 1279px)
24691                    settings: {
24692                        slidesToShow: 1,
24693                        centerPadding: '65px'
24694                    }
24695                },
24696                {
24697                    breakpoint: 1024, //tab-normal(min-width: 768px) and (max-width: 1023px)
24698                    settings: {
24699                        slidesToShow: 1,
24700                        centerPadding: '30px'
24701                    }
24702                }
24703            ]
24704        });
24705
24706        // slickのレスポンシブ処理時のイベント
24707        _slider.on({
24708            'breakpoint': function(event, slick, breakpoint) {
24709                var recommendationMain = _target.find('.staff-recommendation-sli
24709der.slick-slider .staff-recommendation__main');
24710                var recommendationComent = _target.find('.staff-recommendation-slider.slick-slider .staff-recommendation__coment');
24711
24712                height_adjust(recommendationMain);
24713                height_adjust(recommendationComent);
24714            }
24715
24716        });
24717
24718        _next_arrow.on('click', function() {
24719            _slider.slick("slickNext");
24720        });
24721        _next_arrow__2.on('click', function() {
24722            _slider.slick("slickNext");
24723        });
24724        _prev_arrow.on('click', function() {
24725            _slider.slick("slickPrev");
24726        });
24727
24728        _target.find(".staff-recommendation__slick-prev").on("click", function() {
24729            $(this).addClass('active');
24730        });
24731    }
24732
24733    function height_adjust(element) {
24734
24735        var set_ele = element;
24736        $(set_ele).css('height', 'auto');
24737        var count = set_ele.length;
24738        var ele_height = [];
24739
24740        for (i = 0; i < count; i++) {
24741            ele_height[i] = set_ele.eq(i).height();
24742        }
24743
24744        var max_height = Math.max.apply(null, ele_height);
24745        set_ele.height(max_height);
24746    }
24747
24748
24749    $(".staff-recommendation-0001").each(function() {
24750        set_height_adjust($(this));
24751        // slideWidthAdjust($(this));
24752    });
24753
24754
24755    function set_height_adjust(_tar) {
24756        $(window).on("load resize", function() {
24757            // var sizedetect = $("#size-detect").css("font-family");
24758            var recommendationMain = _tar.find('.staff-recommendation-slider.slick-slider .staff-recommendation__main');
24759            var recommendationComent = _tar.find('.staff-recommendation-slider.slick-slider .staff-recommendation__coment');
24760            height_adjust(recommendationMain);
24761            height_adjust(recommendationComent);
24762        });
24763    }
24764
24765});$(function() {
24766
24767  var slider = $('.store-basic-information-0002__image');
24768  slider.slick({
24769    slidesToShow: 1,
24770    slidesToScroll: 1,
24771    autoplay: true,
24772    speed: 1000,
24773    dots: true,
24774    dotsClass: 'store-basic-information-dots-01'
24775  });
24776
24777  $(".store-basic-information-0002__slider__prev-sp").on('click', function() {
24778    slider.slick("slickPrev");
24779  });
24780
24781  $(".store-basic-information-0002__slider__next-sp").on('click', function() {
24782    slider.slick("slickNext");
24783  });
24784
24785  $(".store-basic-information-0002__slider__prev-pc").on("click", function() {
24786    slider.slick("slickPrev");
24787  });
24788
24789  $(".store-basic-information-0002__slider__next-pc").on("click", function() {
24790    slider.slick("slickNext");
24791  });
24792
24793  DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
24794    slider.slick("setPosition");
24795  });
24796
24797});$(function() {
24798  var storeBlogListWrap = $(".store-blog-list-0001-wrap");
24799  var articleFlg;
24800  var uri;
24801  var shopId;
24802
24803  if(storeBlogListWrap) {
24804    articleFlg = storeBlogListWrap.data("flg");
24805    uri = storeBlogListWrap.data("url-flg");
24806    shopId = storeBlogListWrap.data("shop-id");
24807    if(articleFlg == true && uri != 1) {
24808      window.location.href = "/blog/store/list?shop_id="+shopId+"&page=1";
24809    }
24810
24811  }
24812
24813  var BoxHeightAlign = DMS.BoxHeightAlign;
24814  var boxHeightAlign = new BoxHeightAlign($('.store-blog-list-0001-wrap-inner'), {isAll: false});
24815
24816  boxHeightAlign.init();
24817
24818  var resizeTimer = false;
24819  $(window).resize(function() {
24820
24821    if(resizeTimer !== false) {
24822      clearTimeout(resizeTimer);
24823    }
24824
24825    resizeTimer = setTimeout(function() {
24826      boxHeightAlign.update();
24827    }, 200);
24828  });
24829
24830  DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
24831    boxHeightAlign.init();
24832  });
24833
24834});$(function () {
24835
24836  //store-blog-post-notification-list
24837  var BoxHeightAlign = DMS.BoxHeightAlign;
24838  var boxHeightAlign = new BoxHeightAlign($('.store-blog-post-notification-list-0001-wrap-inner'), {isAll: false});
24839
24840  boxHeightAlign.init();
24841
24842  var resizeTimer = false;
24843  $(window).resize(function() {
24844
24845    if(resizeTimer !== false) {
24846      clearTimeout(resizeTimer);
24847    }
24848
24849    resizeTimer = setTimeout(function() {
24850      boxHeightAlign.update();
24851    }, 200);
24852  });
24853
24854  DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
24855    boxHeightAlign.init();
24856  });
24857
24858});$(function() {
24859  // var outPut = $(".store-blog-detail__content__main");
24860  // var outPutImage = outPut.find("img");
24861  // var outPutArray = outPut.data("output");
24862
24863  // function init() {
24864
24865  //   for(var i = 0; i < outPutImage.length; i++) {
24866  //     $(outPutImage[i]).attr("src", outPutArray[i].url);
24867  //     $(outPutImage[i]).attr("alt", outPutArray[i].alt);
24868  //   }
24869  // }
24870
24871  // if(outPutImage) {
24872  //   init();
24873  // }
24874
24875});$(function () {
24876    if($(".store-info-set-calendar").length>0){
24877        $(".store-info-set-calendar").each(function(){
24878            setCalendarMain($(this));
24879        });
24880
24881
24882        function setCalendarMain(_target){
24883
24884            var _li_list= _target.find(".store-info-set-calendar-list li");
24885            var _low_date = $(_li_list[0]).data("date");
24886            var _high_date = $(_li_list[_li_list.length-1]).data("date");
24887            var _dt = new Date();
24888            var _c_month = _dt.getMonth()+1;
24889            var _c_year = _dt.getFullYear();
24890
24891            var _now = getYearMonth(_c_year, _c_month , 0);
24892            var _next = getYearMonth(_c_year, _c_month , 1);
24893            
24894
24895            function getColumn(){
24896                var _ret = 2;
24897
24898                var _ff = $("#size-detect").css("font-family");
24899                if(_ff.indexOf("tab") >= 0){
24900                    _ret = 2;
24901                }else if(_ff.indexOf("sp") >= 0){
24902                    _ret = 1;
24903                }
24904                
24905                return _ret;
24906            }
24907
24908            function moveYearMonth(_i){
24909                _c_month+=_i;
24910                if(_c_month > 12){
24911                    _c_year++;
24912                    _c_month -= 12;
24913                }
24914                if(_c_month < 1){
24915                    _c_year--;
24916                    _c_month += 12;
24917                }
24918            }
24919
24920            function getYearMonth(_y, _m, _i){
24921                _m+=_i;
24922                if(_m > 12){
24923                    _y++;
24924                    _m -= 12;
24925                }
24926                if(_m < 1){
24927                    _y--;
24928                    _m += 12;
24929                }
24930                return _y * 100 + _m;
24931            }
24932
24933            function setCalendarList(){
24934                _target.find(".store-info-set-calendar-list li").each(function(){
24935                    var _check_date = parseInt($(this).data("date"),10);
24936                    var _column = getColumn()-1;
24937                    console.log(_column);
24938                    var _date1 = getYearMonth(_c_year, _c_month , 0);
24939                    var _date2 = getYearMonth(_c_year, _c_month , _column);
24940    //console.log(_date1+" "+_check_date+" "+_date2+" "+_column);
24941                    if(_date1 <= _check_date  && _check_date <= _date2){
24942                        $(this).addClass("show").removeClass("hide");
24943                        var _img = $(this).find("img");
24944                        _img.attr("src" ,  _img.data("src"));
24945                    }else{
24946                        $(this).addClass("hide").removeClass("show");
24947                    }
24948                });
24949            }
24950            function checkSp(){
24951            
24952                var _ff = $("#size-detect").css("font-family");
24953                if(_ff.indexOf("sp") >= 0){
24954                    return true;
24955                }else{
24956                    return false;
24957                }
24958            }
24959            function setDisplayCalendar(){
24960                var _l = _target.find(".store-info-set-calendar-list li.show");
24961                if(checkSp()){
24962                    $(_l[1]).removeClass("show").addClass("hide");
24963                    var _img = $(_l[1]).find("img");
24964                    _img.attr("src" ,  _img.data("src"));
24965                }else{
24966                    setCalendarList();
24967                }
24968            }
24969
24970
24971            _target.find(".store-info-set-calendar-nav-prev a").click(function(){
24972                if(getYearMonth(_c_year, _c_month, 0) > _low_date){
24973                    moveYearMonth(-1);
24974                    setCalendarList();
24975                    setDisplayCalendar();
24976                }
24977                return false;
24978            });
24979            _target.find(".store-info-set-calendar-nav-next a").click(function(){
24980                if(getYearMonth(_c_year, _c_month, 1) < _high_date || 
24981                   (checkSp() && getYearMonth(_c_year, _c_month, 1) <= _high_date) ){
24982                    moveYearMonth(1);
24983                    setCalendarList();
24984                    setDisplayCalendar();
24985                }
24986                return false;
24987            });
24988
24989            $(window).resize(function(){
24990                setDisplayCalendar();
24991
24992            });
24993            setCalendarList();
24994        }
24995
24996    }
24997});
24998$(function () {
24999
25000  var BoxHeightAlign = DMS.BoxHeightAlign;
25001  var boxHeightAlign = new BoxHeightAlign($('.store-new-blog-list-0001-wrap-inner'), {isAll: false});
25002
25003  boxHeightAlign.init();
25004
25005  var resizeTimer = false;
25006  $(window).resize(function() {
25007
25008    if(resizeTimer !== false) {
25009      clearTimeout(resizeTimer);
25010    }
25011
25012    resizeTimer = setTimeout(function() {
25013      boxHeightAlign.update();
25014    }, 200);
25015  });
25016
25017  DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function() {
25018    boxHeightAlign.init();
25019  });
25020
25021});$(function () {
25022  //switch-button
25023  function toggleUnits(elms, is_show, inactiveUnitsInTabs = []) {
25024    for (var i = 0; i < elms.length; i++) {
25025      if (elms[i] !== null) {
25026        var unitId = "#u" + elms[i].replace(/[^0-9]/g, "");
25027        if (inactiveUnitsInTabs.includes(unitId) || !is_show) {
25028          $(unitId).hide();
25029        } else {
25030          $(unitId).show();
25031        }
25032      }
25033    }
25034  }
25035
25036  function getHiddenUnitIds() {
25037    var hiddenUnitIds = [];
25038
25039    $("[data-parent-hidden]").each(function () {
25040      var unitId = $(this).attr("id");
25041      if (unitId && unitId.startsWith("u")) {
25042        hiddenUnitIds.push("#" + unitId);
25043      }
25044    });
25045
25046    return hiddenUnitIds;
25047  }
25048
25049  function handle(buttonContainer) {
25050    var inactives = getHiddenUnitIds();
25051
25052    buttonContainer.each(function (index, element) {
25053      var hideElements = $(element).data("targetUnit");
25054      var buttonText2 = JSON.parse($(element).data("buttonText2"));
25055      var $button = $(element).children();
25056
25057      if ($button.text() === buttonText2) {
25058        $(element).addClass("is_show");
25059      } else {
25060        $(element).removeClass("is_show");
25061      }
25062
25063      toggleUnits(hideElements, $button.text() === buttonText2, inactives);
25064    });
25065  }
25066
25067  var buttonContainer = $(".switch-button");
25068
25069  DMS.customEvent.addEventListner(DMS.customEvent.INIT_TAB, function () {
25070    handle(buttonContainer);
25071  });
25072
25073  DMS.customEvent.addEventListner(DMS.customEvent.INIT_UNIT, function () {
25074    handle(buttonContainer);
25075  });
25076
25077  buttonContainer.each(function (index, element) {
25078    var hideElements = $(element).data("targetUnit");
25079    var buttonText1 = JSON.parse($(element).data("buttonText1"));
25080    var buttonText2 = JSON.parse($(element).data("buttonText2"));
25081
25082    var $button = $(element).children();
25083    if ($button.text() === buttonText2) {
25084      toggleUnits(hideElements, true);
25085      $(element).addClass("is_show");
25086    } else if ($button.text() === buttonText1) {
25087      toggleUnits(hideElements, false);
25088      $(element).removeClass("is_show");
25089    }
25090
25091    $(element.children).on("click", function (event) {
25092      if (!$(event.currentTarget.parentElement).hasClass("is_show")) {
25093        event.currentTarget.innerHTML = buttonText2;
25094        $(event.currentTarget.parentElement).addClass("is_show");
25095        toggleUnits(hideElements, true);
25096      } else {
25097        event.currentTarget.innerHTML = buttonText1;
25098        $(event.currentTarget.parentElement).removeClass("is_show");
25099        toggleUnits(hideElements, false);
25100      }
25101      DMS.customEvent.dispatchEvent(DMS.customEvent.INIT_UNIT);
25102    })
25103  })
25104});$(function () {
25105  //tab-0001
25106
25107  var tabContainer = $('.tab-0001');
25108  var tab = $(".tab-0001").find(".tab-0001__list");
25109  var tabData;
25110  var activeColor;
25111  var textColor;
25112  var hiddenElements;
25113  var showElements;
25114  var unitNumber;
25115
25116  function tabInit() {
25117    tabContainer.each(function(index, element) {
25118      //data属性の文字列に入っているスペースを取り除いて取得
25119      activeColor = $(tabContainer[index]).data("keycolor").replace(/^\s+|\s+$/g,'');
25120      textColor = $(tabContainer[index]).data("textcolor").replace(/^\s+|\s+$/g,'');
25121      tabData = $($(element).find(".tab-0001__list"));
25122      $(tabData[0]).addClass(activeColor);
25123      $(tabData[0]).addClass(textColor);
25124      for(var i = 0; i < tabData.length; i++) {
25125        hiddenElements = $(tabData[i]).data("tab");
25126        for(var ii = 0; ii < hiddenElements.length; ii++) {
25127          if(hiddenElements[ii] !== null) {
25128            unitNumber = hiddenElements[ii].replace(/[^0-9]/g, '');
25129            $("#u"+ unitNumber).hide().attr('data-parent-hidden', 'true');
25130          }
25131        }
25132      }
25133    });
25134    tabContainer.each(function(index,element) {
25135      tabData = $($(element).find(".tab-0001__list")[0]);
25136      showElements = $(tabData).data("tab");
25137      for(var i = 0; i < showElements.length; i++) {
25138        if(showElements[i] !== null) {
25139          unitNumber = showElements[i].replace(/[^0-9]/g, '');
25140          $("#u"+ unitNumber).show().removeAttr('data-parent-hidden');
25141        }
25142      }
25143    });
25144    
25145    DMS.customEvent.dispatchEvent(DMS.customEvent.INIT_TAB);
25146  }
25147
25148  function tabActive (target) {
25149    target.on('click', function() {
25150      activeColor = target.parent(".tab-0001").data("keycolor");
25151      if(!target.hasClass(activeColor)) {
25152        target.siblings().removeClass(activeColor).removeClass(textColor);
25153        target.addClass(activeColor).addClass(textColor);
25154      }
25155
25156    var inactiveTab = $(this).siblings(".tab-0001__list");
25157    inactiveTab.each(function(index, element) {
25158      hiddenElements = $(element).data('tab');
25159      for(var i = 0; i < hiddenElements.length; i++) {
25160        if(hiddenElements[i] !== null) {
25161          unitNumber = hiddenElements[i].replace(/[^0-9]/g, '');
25162          $("#u"+ unitNumber).hide().attr('data-parent-hidden', 'true');
25163        }
25164      }
25165    });
25166
25167    showElements = $(this).data("tab");
25168      for(var i = 0; i < showElements.length; i++) {
25169        if(showElements[i] !== null) {
25170          unitNumber = showElements[i].replace(/[^0-9]/g, '');
25171          $("#u"+ unitNumber).show().removeAttr('data-parent-hidden');
25172        }
25173      }
25174    });
25175  }
25176
25177  function initUnit(target) {
25178    target.on("click", function() {
25179      DMS.customEvent.dispatchEvent(DMS.customEvent.INIT_UNIT);
25180    });
25181  }
25182
25183  if(tabContainer) {
25184    tabInit();
25185  }
25186
25187  tab.each(function() {
25188    tabActive($(this));
25189    initUnit($(this));
25190  });
25191
25192});$(function () {
25193
25194// table-0002
25195  var modalMain = $(".table-0002__modal-main");
25196  var modalDetail = $(".table-0002__modal-detail");
25197  var tableButton = $(".table-0002__modal-content");
25198  var modalClose = $(".table-0002__modal-close");
25199
25200
25201var insertTarget = $(".unit-wrapper .unit-base .table-0002");
25202
25203var cbg = insertTarget.data("cbg");
25204
25205
25206// var num = $('.table-0002').parents().find("body");
25207// var num_unit = $('.table-0002').parent().parent().parent().find("div");
25208// var classVal = num.attr('class');
25209// var classVal_unit = num_unit.attr('class');
25210// var bg_color = classVal.match(/bg-color-[0-9]+/);
25211// var bg_color_unit = classVal_unit.match(/bg-color-[0-9]+/);
25212// var num_mach = bg_color[0].match(/[0-9]+/)
25213// var num_mach_unit = bg_color_unit[0].match(/[0-9]+/)
25214
25215
25216// if (num_mach!="" || num_mach!=null){
25217//   var bg_color_num = num_mach_unit;
25218// }
25219
25220
25221console.log( cbg );
25222// console.log( num_unit );
25223// console.log( classVal );
25224// console.log( classVal_unit );
25225// console.log( bg_color );
25226// console.log( bg_color_unit );
25227// console.log( num_mach );
25228// console.log( num_mach_unit );
25229// console.log( bg_color_num );
25230
25231
25232
25233
25234
25235  modalMain.each(function(index, element) {
25236    $(element).attr({id: "table-0002__modal-main-" + index});
25237  });
25238
25239  tableButton.each(function(index, element) {
25240    $(element).attr({href: "#table-0002__modal-main-" + index});
25241  });
25242
25243  modalClose.on("click", function() {
25244    parent.$.fancybox.close();
25245  });
25246
25247  $(".table-0002__modal-fancybox-button").fancybox({
25248    "overlayColor"    : '#000',
25249    "overlayOpacity"  : 0.7,
25250    "cyclic"            : true,
25251    "padding" : 0,
25252    "autoSize" : false,
25253    "width"    : "470",
25254    "height"   : "auto",
25255    "maxWidth" : "470",
25256    "minWidth": "250",
25257    "transitionIn" : 'none',
25258    "transitionOut" : 'none',
25259    "type": "inline",
25260    wrapCSS:"table-0002__fancybox-radius",
25261    "closeBtn": false,
25262    afterLoad:function(){
25263    jQuery('.fancybox-skin').addClass('bg-color-' + cbg );
25264}
25265});
25266
25267}
25267);
25268
25269
25270/*youtube-0004*/
25271$( function() {
25272
25273	function PlaylistPlayer(){
25274		this.ytplayer;
25275		this.onReadyFlg;
25276		this.onStateChangeFlg;
25277		
25278		this.onStateChangeWait3Flg;
25279		this.onStateChangeWait1Flg;
25280		
25281		this.playlist_number = 0;
25282		this.playlist;
25283		this.target;
25284		this.targetAtag;
25285
25286	}
25287	PlaylistPlayer.prototype.init = function() {
25288		this.onReadyFlg = false;
25289		this.onStateChangeFlg = false;
25290		
25291		this.onStateChangeWait5Flg = false;
25292		this.onStateChangeWait3Flg = false;
25293		this.onStateChangeWait1Flg = false;
25294	}
25295	PlaylistPlayer.prototype.initPlayer = function(_area, _playlist) {
25296		var that = this;
25297		this.playlist = _playlist.split(",");
25298		this.urlArr = new Array(this.playlist.length);
25299		for (var i = 0; i < this.playlist.length; i++) {
25300			this.urlArr[i] = i;
25301		}
25302		for(i = this.urlArr.length - 1; i > 0; i--) {
25303			var j = Math.floor(Math.random() * (i + 1));
25304			var tmp = this.urlArr[i];
25305			this.urlArr[i] = this.urlArr[j];
25306			this.urlArr[j] = tmp;
25307		}
25308	    this.ytplayer = new YT.Player(_area, {
25309	    	videoId:this.playlist[this.urlArr[this.playlist_number]],
25310	    	playerVars:{
25311				rel:0,
25312				iv_load_policy:3,
25313				showinfo:0,
25314				autoplay:1,
25315				modestbranding:1,
25316				playsinline:1
25317			},
25318	        events: {
25319	            'onReady': function(event){
25320					that.onReadyFlg = true;
25321
25322					event.target.mute();
25323					event.target.playVideo();
25324					updateLinkTag(that.target, that.urlArr[that.playlist_number]);
25325				},
25326				 'onStateChange':function(event) {
25327					that.onStateChangeFlg = true;
25328
25329					if(event.data == 0){
25330						that.playlist_number++;
25331						if(that.playlist.length <= that.playlist_number){
25332							that.playlist_number = 0;
25333						}
25334						event.target.loadVideoById(that.playlist[that.urlArr[that.playlist_number]]);
25335						updateLinkTag(that.target, that.urlArr[that.playlist_number]);
25336					}
25337				}
25338	        }
25339	    });
25340
25341
25342	};
25343
25344
25345
25346	var ytPlayerAry = [];
25347	function setYouTube(){
25348	    $(".youtube-0004").each(function(n){
25349			youTube( $(this) , n);
25350	    });
25351	}
25352
25353
25354	function updateLinkTag(_target , _n){
25355		var _atags = $(_target).find("a");
25356		for(var i=0;i<_atags.length;i++){
25357			$(_atags[i]).hide();
25358		}
25359		var _atag = $(_target).find("a.atag"+_n);
25360		if(_atag.attr("href")){
25361			_atag.show();
25362		}
25363	}
25364
25365    function youTube(_target, _n){
25366		var id = _target.find('.youtube04')[0];
25367		var player = $(id).children()[0];
25368		var playerId = $(player).attr("id")+"_"+_n;
25369		$(player).attr("id", playerId);
25370
25371		var dataYoutubeUrl = $(id).data("youtube-url").join(",");
25372
25373		var _ytPlayer = new PlaylistPlayer();
25374		_ytPlayer.init();
25375		_ytPlayer.initPlayer(playerId, dataYoutubeUrl);
25376		_ytPlayer.target = _target;
25377		ytPlayerAry.push(_ytPlayer);
25378	}
25379
25380	DMS.customEvent.addEventListner(DMS.customEvent.INIT_YOUTUBE, function(){
25381		setYouTube();
25382		
25383	});
25384});
25385function sc(contentsID){
25386
25387	var check;
25388	check = new Function('return !!(window.s_sc_cd)');
25389	if (check()) {
25390	    s_sc_cd.tl(this,'o','ex-' + contentsID);
25391	}
25392
25393}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.