var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c<a.length&&0==a[c];)c++;this.num=new Array(a.length-c+b);for(var d=0;d<a.length-c;d++)this.num[d]=a[d+c]}function j(a,b){this.totalCount=a,this.dataCount=b}function k(){this.buffer=[],this.length=0}function m(){return"undefined"!=typeof CanvasRenderingContext2D}function n(){var a=!1,b=navigator.userAgent;return/android/i.test(b)&&(a=!0,aMat=b.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(a=parseFloat(aMat[1]))),a}function r(a,b){for(var c=1,e=s(a),f=0,g=l.length;g>=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=new Array(this.moduleCount);for(var e=0;e<this.moduleCount;e++)this.modules[d][e]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(a,c),this.typeNumber>=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f<this.modules.length;f++)for(var g=f*e,h=0;h<this.modules[f].length;h++){var i=h*e,j=this.modules[f][h];j&&(d.beginFill(0,100),d.moveTo(i,g),d.lineTo(i+e,g),d.lineTo(i+e,g+e),d.lineTo(i,g+e),d.endFill())}return d},setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(var b=8;b<this.moduleCount-8;b++)null==this.modules[6][b]&&(this.modules[6][b]=0==b%2)},setupPositionAdjustPattern:function(){for(var a=f.getPatternPosition(this.typeNumber),b=0;b<a.length;b++)for(var c=0;c<a.length;c++){var d=a[b],e=a[c];if(null==this.modules[d][e])for(var g=-2;2>=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g<a.length&&(j=1==(1&a[g]>>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h<d.length;h++){var i=d[h];g.put(i.mode,4),g.put(i.getLength(),f.getLengthInBits(i.mode,a)),i.write(g)}for(var l=0,h=0;h<e.length;h++)l+=e[h].dataCount;if(g.getLengthInBits()>8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j<b.length;j++){var k=b[j].dataCount,l=b[j].totalCount-k;d=Math.max(d,k),e=Math.max(e,l),g[j]=new Array(k);for(var m=0;m<g[j].length;m++)g[j][m]=255&a.buffer[m+c];c+=k;var n=f.getErrorCorrectPolynomial(l),o=new i(g[j],n.getLength()-1),p=o.mod(n);h[j]=new Array(n.getLength()-1);for(var m=0;m<h[j].length;m++){var q=m+p.getLength()-h[j].length;h[j][m]=q>=0?p.get(q):0}}for(var r=0,m=0;m<b.length;m++)r+=b[m].totalCount;for(var s=new Array(r),t=0,m=0;d>m;m++)for(var j=0;j<b.length;j++)m<g[j].length&&(s[t++]=g[j][m]);for(var m=0;e>m;m++)for(var j=0;j<b.length;j++)m<h[j].length&&(s[t++]=h[j][m]);return s};for(var c={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},d={L:1,M:0,Q:3,H:2},e={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},f={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,78,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 b=a<<10;f.getBCHDigit(b)-f.getBCHDigit(f.G15)>=0;)b^=f.G15<<f.getBCHDigit(b)-f.getBCHDigit(f.G15);return(a<<10|b)^f.G15_MASK},getBCHTypeNumber:function(a){for(var b=a<<12;f.getBCHDigit(b)-f.getBCHDigit(f.G18)>=0;)b^=f.G18<<f.getBCHDigit(b)-f.getBCHDigit(f.G18);return a<<12|b},getBCHDigit:function(a){for(var b=0;0!=a;)b++,a>>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<<h;for(var h=8;256>h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;c<this.getLength();c++)for(var d=0;d<a.getLength();d++)b[c+d]^=g.gexp(g.glog(this.get(c))+g.glog(a.get(d)));return new i(b,0)},mod:function(a){if(this.getLength()-a.getLength()<0)return this;for(var b=g.glog(this.get(0))-g.glog(a.get(0)),c=new Array(this.getLength()),d=0;d<this.getLength();d++)c[d]=this.get(d);for(var d=0;d<a.getLength();d++)c[d]^=g.gexp(g.glog(a.get(d))+b);return new i(c,0).mod(a)}},j.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],[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,116],[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,43,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,3,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,55,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,45,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]],j.getRSBlocks=function(a,b){var c=j.getRsBlockTable(a,b);if(void 0==c)throw new Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+b);for(var d=c.length/3,e=[],f=0;d>f;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=['<table style="border:0;border-collapse:collapse;">'],h=0;d>h;h++){g.push("<tr>");for(var i=0;d>i;i++)g.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:'+e+"px;height:"+f+"px;background-color:"+(a.isDark(h,i)?b.colorDark:b.colorLight)+';"></td>');g.push("</tr>")}g.push("</table>"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}();;
(function ($) {
    'use strict';
    if (window.ItemPhonePhotos) return;
    function randomId(){var b=new Uint8Array(16);crypto.getRandomValues(b);return Array.from(b,function(v){return v.toString(16).padStart(2,'0');}).join('');}
    window.ItemPhonePhotos = {
        attach: function(holder, settings, changeMain) {
            var form=holder.closest('form');
            if(holder.attr('id')!=='item_images' || !/^\/(admin_item)\/(insert_action|edit_action)/.test(form.attr('action')||'')) return;
            if(holder.data('phonePhotoAttached')) return;
            holder.data('phonePhotoAttached',true);
            var session=null, seen={}, busy=0, syncing=false, connecting=false, queue=Promise.resolve(), expires=0, closed=true;
            var syncRequest=null, interval=null, finishing=null;
            var hidden=$('<input>',{type:'hidden',name:'phone_photo_session',disabled:true}).appendTo(form);
            var seenInputs=$('<span>').hide().appendTo(form);
            if(!document.getElementById('phone-photo-pc-style')) $('<style>',{id:'phone-photo-pc-style',text:
                '.phone-photo-pc{clear:both;padding:12px 0;color:#344054;font-size:13px;line-height:1.6;box-sizing:border-box}' +
                '.phone-photo-pc *{box-sizing:border-box}.phone-photo-pc .pp-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px}' +
                '.phone-photo-pc button.pp-button{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;margin:0;padding:6px 12px;border:1px solid #4e83ff;border-radius:6px;background:#fff;color:#3269e5;font:inherit;font-weight:600;line-height:1.5;cursor:pointer;white-space:nowrap}' +
                '.phone-photo-pc button.pp-button:hover{background:#eef4ff}.phone-photo-pc button.pp-button:focus-visible{outline:2px solid #3269e5;outline-offset:2px}.phone-photo-pc button.pp-button:disabled{opacity:.55;cursor:wait}' +
                '.phone-photo-pc .pp-status{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border-radius:5px;background:#eaf1ff;font-size:13px;font-weight:600;color:#2454b8}.phone-photo-pc .pp-status:empty{display:none}.phone-photo-pc .pp-status:not(:empty):before{content:"";width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:currentColor}.phone-photo-pc.pp-complete .pp-status{color:#16804a;background:#eaf7ee}.phone-photo-pc.pp-expired .pp-status{color:#805b21;background:#fff3d9}' +
                '.phone-photo-pc .pp-panel{margin-top:8px;padding:12px;border:1px solid #e2e8f0;border-radius:8px;background:#fafbfe;display:flex;align-items:center;flex-wrap:wrap;gap:14px}' +
                '.phone-photo-pc .pp-qr{flex:0 0 auto;width:132px;padding:9px;background:#fff;border:1px solid #e8edf4;border-radius:6px}.phone-photo-pc .pp-qr img,.phone-photo-pc .pp-qr canvas{width:112px;height:112px;max-width:100%}' +
                '.phone-photo-pc .pp-guide{flex:1 1 150px;min-width:0}.phone-photo-pc .pp-title{margin:0 0 6px;font-size:15px;font-weight:700;color:#1d2939}' +
                '.phone-photo-pc .pp-description{margin:0;color:#344054;font-size:13px;line-height:1.7}.phone-photo-pc .pp-actions{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;margin-top:10px}' +
                '.phone-photo-pc .pp-timer{margin:0;padding:4px 8px;border:1px solid #d4e1ff;border-radius:5px;background:#edf3ff;font-size:13px;font-weight:700;color:#2454b8;font-variant-numeric:tabular-nums;white-space:nowrap}.phone-photo-pc .pp-actions button.pp-button{min-height:32px;padding:5px 11px;font-size:13px}' +
                '.phone-photo-pc button.pp-disconnect{border-color:#d0d5dd;color:#667085;background:#fff;font-weight:400}.phone-photo-pc button.pp-finish{background:#4e83ff;color:#fff}.phone-photo-pc button.pp-finish:hover{background:#356fe9}' +
                '.phone-photo-pc .pp-note{margin:10px 0 0;padding:9px 12px;border-left:3px solid #4e83ff;border-radius:0 5px 5px 0;background:#eef4ff;color:#27456d;font-size:13px;line-height:1.6}.phone-photo-pc .pp-note strong{font-weight:700}.phone-photo-pc .pp-result{margin-top:10px;padding:12px 14px;border:1px solid #d4eadd;border-radius:8px;background:#f2faf5;color:#256544}' +
                '.phone-photo-pc.pp-complete .pp-note{display:none}.phone-photo-pc .pp-result p{margin:3px 0 0;font-size:12px}.phone-photo-pc.pp-expired .pp-result{background:#fff9ee;border-color:#f0dfbc;color:#805b21}' +
                'body.pp-phone-modal-open{overflow:hidden}.phone-photo-pc.pp-launcher{display:inline-flex;vertical-align:middle;clear:none;padding:0;margin-left:5px}.phone-photo-pc.pp-launcher button.pp-open{min-height:24px;padding:2px 7px;font-size:12px;border-radius:4px}' +
                '.phone-photo-pc.pp-overlay{position:fixed;inset:0;z-index:10060;padding:20px;display:flex;align-items:center;justify-content:center;background:rgba(16,24,40,.42)}' +
                '.phone-photo-pc .pp-dialog{width:440px;max-width:100%;max-height:calc(100dvh - 40px);overflow:auto;padding:22px;background:#fff;border-radius:14px;box-shadow:0 18px 60px rgba(16,24,40,.22)}' +
                '.phone-photo-pc .pp-modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.phone-photo-pc .pp-modal-heading{margin:0;color:#1d2939;font-size:18px;font-weight:700}' +
                '.phone-photo-pc button.pp-close{border:0;background:transparent;color:#667085;padding:4px 8px;font-size:24px;line-height:1;cursor:pointer}.phone-photo-pc button.pp-close:focus-visible{outline:2px solid #3269e5;outline-offset:2px}.phone-photo-pc .pp-dialog .pp-panel{margin-top:12px}' +
                '.phone-photo-pc.pp-upload-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:10070;width:max-content;max-width:calc(100vw - 32px);padding:12px 18px;border-radius:8px;background:#1d2939;color:#fff;font-size:13px;font-weight:500;line-height:1.6;text-align:center;box-shadow:0 6px 24px rgba(16,24,40,.2);pointer-events:none}'
            }).appendTo('head');
            var launcher=$('<span>',{'class':'phone-photo-pc pp-launcher'});
            var photoSection=holder.closest('.new_photo_boxs'), thumbButton=photoSection.find('.img_make_thumb').first();
            if(thumbButton.length)launcher.insertAfter(thumbButton);
            else if(photoSection.children('.con_title').length)launcher.appendTo(photoSection.children('.con_title').first());
            else launcher.insertBefore(holder.parent());
            var button=$('<button>',{type:'button','class':'pp-button pp-open',text:'휴대폰에서 업로드','aria-haspopup':'dialog'}).appendTo(launcher);
            var bar=$('<div>',{'class':'phone-photo-pc pp-overlay'}).hide().appendTo(document.body);
            var dialog=$('<div>',{'class':'pp-dialog',role:'dialog','aria-modal':'true','aria-label':'휴대폰에서 업로드'}).appendTo(bar);
            var modalHead=$('<div>',{'class':'pp-modal-head'}).appendTo(dialog);
            $('<h2>',{'class':'pp-modal-heading',text:'휴대폰에서 업로드'}).appendTo(modalHead);
            var dismiss=$('<button>',{type:'button','class':'pp-close',text:'×','aria-label':'QR 창 닫기',title:'QR 창만 닫습니다. 휴대폰 업로드는 유지됩니다.'}).appendTo(modalHead);
            var message=$('<span>',{'class':'pp-status','aria-live':'polite'}).appendTo(dialog);
            var panel=$('<div>',{'class':'pp-panel'}).hide().appendTo(dialog);
            var qr=$('<div>',{'class':'pp-qr'}).appendTo(panel);
            var guide=$('<div>',{'class':'pp-guide'}).appendTo(panel);
            $('<p>',{'class':'pp-title',text:'휴대폰에서 사진 추가'}).appendTo(guide);
            $('<p>',{'class':'pp-description',text:'QR을 스캔하고 사진을 선택해 주세요.'}).appendTo(guide);
            $('<p>',{'class':'pp-description',text:'사진은 자동 추가되며, 매물 저장 시 연결이 끝납니다.'}).appendTo(guide);
            var actions=$('<div>',{'class':'pp-actions'}).appendTo(guide);
            var end=$('<button>',{type:'button','class':'pp-button pp-disconnect',text:'연결 해제',title:'휴대폰에서 더 이상 사진을 올릴 수 없게 합니다.'}).appendTo(actions);
            var timer=$('<p>',{'class':'pp-timer',role:'status'}).appendTo(actions);
            var result=$('<div>',{'class':'pp-result','aria-live':'polite'}).hide().appendTo(dialog);
            function showModal(){$(document.body).addClass('pp-phone-modal-open');bar.show();dismiss[0].focus();}
            function hideModal(){$(document.body).removeClass('pp-phone-modal-open');bar.hide();if(document.documentElement.contains(button[0]))button[0].focus();}
            function showCompleteToast(){
                $('.pp-upload-toast').remove();
                var toast=$('<div>',{'class':'phone-photo-pc pp-upload-toast',role:'status','aria-live':'polite',text:'사진 추가 완료 · 사진 목록을 확인한 뒤 PC에서 매물을 저장해 주세요.'}).appendTo(document.body);
                setTimeout(function(){toast.fadeOut(180,function(){toast.remove();});},1500);
            }
            dismiss.on('click',hideModal);
            bar.on('click',function(e){if(e.target===bar[0])hideModal();});
            bar.on('keydown',function(e){
                if(e.key==='Escape'){e.preventDefault();hideModal();return;}
                if(e.key==='Tab'){
                    var controls=dialog.find('button:visible:enabled'),first=controls[0],last=controls[controls.length-1];
                    if(e.shiftKey && document.activeElement===first){e.preventDefault();last.focus();}
                    else if(!e.shiftKey && document.activeElement===last){e.preventDefault();first.focus();}
                }
            });
            function updateTimer(){var left=Math.max(0,Math.ceil(expires-Date.now()/1000));timer.text('남은 시간 '+Math.floor(left/60)+':'+('0'+left%60).slice(-2));return left;}
            function files(){return holder.find('input[name="item_images[]"]').map(function(){return this.value.split('?')[0];}).get();}
            function displayInfo(){
                function value(name){return $.trim(form.find('[name="'+name+'"]').first().val()||'');}
                var address=value('address_name')||value('address');
                if(!address)address=['sido','gugun','dong'].map(function(region){
                    return value(region+'_id_name')||$.trim(form.find('[name="'+region+'_id"] option:selected').filter(function(){return this.value && this.value!=='0';}).text());
                }).filter(Boolean).join(' ');
                address=value('address_global')||[address,value('address_detail')].filter(Boolean).join(' ');
                return {id:session.id,display_title:value('title'),display_address:address};
            }
            function api(action, data){return Promise.resolve($.ajax({url:'/phone_photo/api/'+action,type:'POST',data:data,dataType:'json'})).then(function(r){if(!r.ok) throw new Error(r.message);return r.data;},function(xhr){throw new Error((xhr.responseJSON||{}).message||'연결에 실패했습니다. 다시 시도해 주세요.');});}
            function render(photo, clone){
                var name=photo.file;
                if(seen[name]) {if(clone) clone.remove();return;}
                seen[name]=true;
                $('<input>',{type:'hidden',name:'phone_photo_seen[]',value:name}).appendTo(seenInputs);
                var box=clone||$('<div>',{'class':'multibox file'}).appendTo(holder); box.empty().attr({id:name,filename:name});
                $('<div>',{'class':'picture_delete'}).html(settings.orakuploader_file_delete_label).appendTo(box);
                if(settings.orakuploader_use_rotation) $('<div>',{'class':'rotate_picture','degree-lvl':'1'}).html(settings.orakuploader_file_rotation_label).appendTo(box);
                $('<img>',{'class':'picture_uploaded',src:(settings.orakuploader_thumbnail_path||'/uploads/item/temp_thumb')+'/'+name,alt:''}).appendTo(box);
                $('<input>',{type:'hidden',name:'item_images[]',value:name}).appendTo(box);
                $('<div>',{'class':'ui-sortable-handle',text:'순서 변경'}).css({position:'absolute',inset:0,opacity:0,zIndex:1,cursor:'move'}).appendTo(box);
                if(settings.orakuploader_no_text){
                    $('<input>',{type:'text',name:settings.orakuploader_description_name,placeholder:'이미지 설명 추가'}).css({display:'inline-block',width:'100%',marginTop:'2px'}).appendTo(box);
                    $('<div>',{'class':'image_edit_btn',text:'이미지 편집'}).on('click',function(){window.image_edit_open($(this));}).appendTo(box);
                }
                $.data(holder,'already_uploaded',holder.children('.file').length+1);
                holder.closest('.new_photo_boxs').find('.img_remove_all').show();
                changeMain(holder,settings);
            }
            var ready=null;
            function connect(){
                if(!ready) ready=api('create',{item_id:form.find('[name=id]').val()||0,sell:new URLSearchParams(location.search).get('type')==='sell'?'1':'0',files:files()}).then(function(s){
                    session=s;hidden.val(s.id).prop('disabled',false);return s;
                }).catch(function(e){ready=null;throw e;});
                return ready;
            }
            function sync(force){
                if(!session||(!force&&busy)) return Promise.resolve(false);
                if(syncRequest)return syncRequest;
                syncing=true;
                syncRequest=api('sync',{id:session.id,files:files(),seen:Object.keys(seen)}).then(function(r){
                    r.photos.forEach(function(p){render(p);}); expires=r.expires;closed=r.closed;
                    if(!closed && expires*1000>Date.now()) message.text('휴대폰 사진 추가 중');
                    return true;
                }).catch(function(e){message.text(e.message);return false;}).then(function(ok){syncing=false;syncRequest=null;return ok;});
                return syncRequest;
            }
            function stopPolling(){
                if(interval!==null){clearInterval(interval);interval=null;}
            }
            function finishPolling(reason){
                stopPolling();
                if(finishing)return finishing;
                button.prop('disabled',true);panel.hide();qr.empty();message.text('업로드한 사진을 확인하고 있습니다…');
                // A response started before close can be stale. Always fetch once after it and queued PC uploads settle.
                finishing=Promise.resolve(syncRequest).then(function(){return queue;}).then(function(){return sync(true);}).then(function(ok){
                    closed=true;
                    bar.removeClass('pp-complete pp-expired');result.empty().hide();
                    if(ok){
                        var expired=reason==='expired';bar.addClass(expired?'pp-expired':'pp-complete');
                        message.text(expired?'사진 추가 시간 만료':'사진 추가 완료');
                        if(expired){
                            $('<strong>',{text:'QR 유효시간이 끝났습니다.'}).appendTo(result);
                            $('<p>',{text:'이미 추가한 사진은 유지됩니다. 더 올리려면 새 QR을 만들어 주세요.'}).appendTo(result);result.show();
                        }else{hideModal();showCompleteToast();}
                    }else message.text('마지막 사진 확인에 실패했습니다. 휴대폰에서 업로드를 눌러 다시 확인해 주세요.');
                }).then(function(){finishing=null;button.prop('disabled',false);end.prop('disabled',false);});
                return finishing;
            }
            function startPolling(){
                stopPolling();
                interval=setInterval(function(){
                    if(!document.documentElement.contains(holder[0])){stopPolling();return;}
                    if(connecting)return;
                    var left=updateTimer();
                    if(closed||!left){finishPolling(closed?'closed':'expired');return;}
                    sync();
                },2000);
            }
            button.on('click',function(){
                if(session && !closed && expires*1000>Date.now() && qr.children().length){showModal();return;}
                result.hide();panel.hide();bar.removeClass('pp-complete pp-expired');message.text('QR코드를 준비하고 있습니다…');showModal();
                connecting=true;button.prop('disabled',true);holder.data('phoneInbox',inbox);
                connect().then(function(){return sync();}).then(function(){return api('open',displayInfo());}).then(function(r){
                    expires=r.expires;closed=false;qr.empty();
                    var url=location.origin+'/phone_photo#id='+session.id+'&token='+r.token;
                    new QRCode(qr[0],{text:url,width:256,height:256,correctLevel:QRCode.CorrectLevel.M});
                    bar.removeClass('pp-complete pp-expired');result.hide();updateTimer();
                    panel.show();message.text('휴대폰으로 QR을 스캔해 주세요.');startPolling();
                }).catch(function(e){message.text(e.message);if(!session)holder.removeData('phoneInbox');}).then(function(){connecting=false;button.prop('disabled',false);});
            });
            end.on('click',function(){
                end.prop('disabled',true);button.prop('disabled',true);
                api('close',{id:session.id}).then(function(){closed=true;return finishPolling('closed');}).catch(function(e){message.text(e.message);end.prop('disabled',false);button.prop('disabled',false);});
            });
            var inbox={
                upload:function(file,clone){
                    busy++;
                    queue=queue.catch(function(){}).then(function(){return connect();}).then(function(){
                        return sync(true);
                    }).then(function(ok){
                        if(!ok)throw new Error('사진 목록을 확인하지 못했습니다. 다시 시도해 주세요.');
                        var body=new FormData();body.append('id',session.id);body.append('request_id',randomId());body.append('photo',file);
                        return $.ajax({url:'/phone_photo/api/pc_upload',type:'POST',data:body,processData:false,contentType:false,dataType:'json'});
                    }).then(function(r){if(!r.ok)throw new Error(r.message);render(r.data,clone);}).catch(function(e){clone.remove();showModal();message.text((e.responseJSON||{}).message||e.message||'사진 업로드 실패');}).then(function(){
                        busy--;$.data(holder,'already_uploaded',holder.children('.file').length+1);
                        $.data(holder,'currently_uploading',0);holder.parent().find('.uploadButton').show();
                        if(typeof settings.orakuploader_finished==='function')settings.orakuploader_finished();
                    });
                }
            };
            // Existing AJAX submit handlers continue only after every in-flight photo has settled.
            form[0].addEventListener('submit',function(e){if(busy||syncing||connecting){e.preventDefault();e.stopImmediatePropagation();showModal();message.text('사진 업로드·반영이 끝난 후 저장해 주세요.');}},true);
            $.ajaxPrefilter(function(options, original, xhr){
                if(new URL(options.url,location.href).pathname!==new URL(form.attr('action'),location.href).pathname) return;
                if(busy||syncing||connecting){
                    window.submited=0;showModal();message.text('사진 업로드·반영이 끝난 후 저장해 주세요.'); xhr.abort();return;
                }
                function showValidation(result){
                    if(!result || (result.result!=='PhonePhotoError'))return false;
                    window.submited=0;message.text(result.message);
                    window.alert(result.message);return true;
                }
                var success=options.success, error=options.error;
                options.success=function(data,status,xhr){
                    var result=data;
                    if(typeof data==='string'){try{result=JSON.parse(data);}catch(e){}}
                    if(showValidation(result))return;
                    if(Array.isArray(success))success.forEach(function(fn){if(typeof fn==='function')fn.call(this,data,status,xhr);},this);
                    else if(typeof success==='function')success.call(this,data,status,xhr);
                };
                options.error=function(xhr,status,reason){
                    var result=xhr.responseJSON;
                    if(!result){try{result=JSON.parse(xhr.responseText);}catch(e){}}
                    if(showValidation(result))return;
                    if(Array.isArray(error))error.forEach(function(fn){if(typeof fn==='function')fn.call(this,xhr,status,reason);},this);
                    else if(typeof error==='function')error.call(this,xhr,status,reason);
                };
            });
        }
    };
}(jQuery));
(function ( $ ) {

    $.fn.orakuploader = function( options ) {

		var settings = $.extend({

			orakuploader       		    	 : true,
			orakuploader_use_main          	 : false,
			orakuploader_use_sortable      	 : false,
			orakuploader_use_dragndrop       : false,
			orakuploader_use_rotation        : false,
			orakuploader_hide_on_exceed      : false,
			orakuploader_hide_in_progress    : false,
			orakuploader_attach_images       : [],
			orakuploader_path  		         : 'orakuploader/',
			orakuploader_main_path           : 'files',
			orakuploader_thumbnail_path      : 'files/tn',
			orakuploader_resize_to           : 0,
			orakuploader_thumbnail_size      : 0,
			orakuploader_file_delete_label 	 : "",
			orakuploader_file_rotation_label : "",
			orakuploader_field_name          : $(this).attr('id'),
			orakuploader_add_image           : '',
			orakuploader_add_label           : 'Browser for images',
			orakuploader_main_changed        : "",
			orakuploader_finished		     : "",
			orakuploader_picture_deleted     : "",
			orakuploader_maximum_uploads     : 100,
			orakuploader_crop_to_width       : 0,
			orakuploader_crop_to_height      : 0,
			orakuploader_crop_thumb_to_width : 0,
			orakuploader_crop_thumb_to_height: 0,
			orakuploader_max_exceeded 	     : "",
			orakuploader_watermark           : "",
			orakuploader_edit_main_path		 : "",
			orakuploader_real_not_deleted    : true

		}, options);

		var holdername = this;
        setTimeout(function(){ if(window.ItemPhonePhotos) window.ItemPhonePhotos.attach(holdername, settings, changeMain); },0);

		if($(this).attr('orakuploader') == 'on') {
			var imageHolderId = '#'+$(this).attr('id');
			holdername = $(this).replaceWith(getHtml($(this).attr('id'), settings.orakuploader_add_image, settings.orakuploader_add_label, settings.orakuploader_path));
			holdername = $("body").find(imageHolderId);
		}

		jQuery.data(holdername, 'already_uploaded', 1);
		jQuery.data(holdername, 'count', 0);
		jQuery.data(holdername, 'counter', 0);

		if(settings.orakuploader_use_sortable)
		{

			$(holdername).sortable({
				handle: '.ui-sortable-handle',
				update: function(event, ui) {
					if (typeof settings.orakuploader_rearranged == 'function') {
						settings.orakuploader_rearranged();
					}
					changeMain(holdername, settings);
				}
			});

			$("#"+holdername.attr("id")+"_to_clone").find(".file").css("cursor", "move");
			$("#"+holdername.attr("id")+"_to_clone").find(".multibox .file").css("cursor", "move");
		}
		else
		{
			$("#"+holdername.attr("id")+"_to_clone").find(".file").css("cursor", "auto");
			$("#"+holdername.attr("id")+"_to_clone").find(".multibox .file").css("cursor", "auto");
		}
		$(holdername).disableSelection();

		$(document).on("change", "."+$(holdername).attr("id")+"Input", function() {
			if(settings.orakuploader_hide_in_progress == true) {
				if(parseInt(jQuery.data(holdername, 'currently_uploading')) == 1) return false;
				jQuery.data(holdername, 'currently_uploading', 1);
				$(holdername).parent().find('.uploadButton').hide();
			}
			jQuery.data(holdername, 'count', 0);
			orakuploaderHandle(this.files,holdername,settings);
		});


		for (i = 0; i < settings.orakuploader_attach_images.length; i++) {
			var image = settings.orakuploader_attach_images[i];

			var clone = $("#"+$(holdername).attr("id")+"_to_clone").find(".multibox").clone();
			$(holdername).append($(clone));
			var rotate_str = '';
			if(settings.orakuploader_use_rotation == true) {
				rotate_str = "<div class='rotate_picture2' degree-lvl='1'>"+settings.orakuploader_file_rotation_label+"</div>";
			}
			$(clone).html(rotate_str+"<div class='picture_delete'>"+settings.orakuploader_file_delete_label+"</div><img src='"+settings.orakuploader_thumbnail_path+"/"+image+"' alt='' onerror=this.src='"+settings.orakuploader_path+"/images/no-image.jpg' class='picture_uploaded'/> <input type='hidden' value='"+image+"' name='"+settings.orakuploader_field_name+"[]' /><div class='ui-sortable-handle' style='display:inline-block; width:100%; height:100%; position:absolute; top:0; left:0; background-color:#fafafa; z-index:1; opacity:0;'>btn</div>");
			$(clone).attr('id', image);
			$(clone).attr('filename', image);
		}

		if(settings.orakuploader_attach_images.length > 0) {
			changeMain(holdername, settings);
		}

		$(holdername).on("click", ".picture_delete", function(e) {
			e.preventDefault();
			e.stopPropagation();
			jQuery.data(holdername, "already_uploaded", jQuery.data(holdername, "already_uploaded")-1);

			$.ajax({
				url: settings.orakuploader_path+"orakuploader.php?is_session=&uq=70&delete="+encodeURIComponent($(this).parent().attr('filename'))+"&path="+settings.orakuploader_path+"&resize_to="+settings.orakuploader_resize_to+"&thumbnail_size="+settings.orakuploader_thumbnail_size+"&main_path="+settings.orakuploader_main_path+"&thumbnail_path="+settings.orakuploader_thumbnail_path
			});

			$(this).parent().fadeOut("slow", function() {
				$(this).remove();

				if(jQuery.data(holdername, "already_uploaded")-1 > 0) {
					changeMain(holdername, settings);
				}

				if(settings.orakuploader_hide_on_exceed == true) {
					$(holdername).parent().find('.uploadButton').show();
				}
			});

			if (typeof settings.orakuploader_picture_deleted == 'function') {
				settings.orakuploader_picture_deleted($(this).parent().attr('filename'));
			}
		});

		$(holdername).on("click", ".rotate_picture", function(e) {
			e.preventDefault();
			e.stopPropagation();

			var context = this;

			$.ajax({
				url: settings.orakuploader_path+"orakuploader.php?is_session=&uq=70&rotate="+encodeURIComponent($(this).parent().attr('filename'))+"&degree_lvl="+$(this).closest('.rotate_picture').attr('degree-lvl')+"&path="+settings.orakuploader_path+"&resize_to="+settings.orakuploader_resize_to+"&thumbnail_size="+settings.orakuploader_thumbnail_size+"&main_path="+settings.orakuploader_main_path+"&thumbnail_path="+settings.orakuploader_thumbnail_path
			}).done(function(file_name) {
				$img = $('html,body').find("input[value^='"+file_name+"']").prev('img');

				if(parseInt($(context).closest('.rotate_picture').attr('degree-lvl')) > 3)  {
					$(context).closest('.rotate_picture').attr('degree-lvl', 1)
				} else {
					$(context).closest('.rotate_picture').attr('degree-lvl', parseInt($(context).closest('.rotate_picture').attr('degree-lvl'))+1)
				}

				$img.attr('src', $img.attr('src') +"?"+ new Date().getTime());
			});
		});

		$(holdername).on("click", ".rotate_picture2", function(e) {
			e.preventDefault();
			e.stopPropagation();
			var context = this;

			$.ajax({
				url: settings.orakuploader_path+"orakuploader.php?is_session=&uq=70&rotate="+encodeURIComponent($(this).parent().attr('filename'))+"&degree_lvl="+$(this).closest('.rotate_picture2').attr('degree-lvl')+"&path="+settings.orakuploader_path+"&resize_to="+settings.orakuploader_resize_to+"&thumbnail_size="+settings.orakuploader_thumbnail_size+"&main_path="+settings.orakuploader_edit_main_path+"&thumbnail_path="+settings.orakuploader_edit_main_path+"&edit=1"
			}).done(function(file_name) {
				$img = $('html,body').find("input[value^='"+file_name+"']").prev('img');

				if(parseInt($(context).closest('.rotate_picture2').attr('degree-lvl')) > 3)  {
					$(context).closest('.rotate_picture2').attr('degree-lvl', 1)
				} else {
					$(context).closest('.rotate_picture2').attr('degree-lvl', parseInt($(context).closest('.rotate_picture2').attr('degree-lvl'))+1)
				}

				$img.attr('src', $img.attr('src') +"?"+ new Date().getTime());
			});
		});

		if(settings.orakuploader_use_dragndrop)
		{
			var holder = document.getElementById($(holdername).attr("id")+"DDArea");
			holder.ondragover = function () { $(".uploadButton").addClass("DragAndDropHover"); return false; };
			holder.ondragend  = function () { $(".uploadButton").removeClass("DragAndDropHover"); return false; };

			holder.ondrop = function (e) {
				$(".uploadButton").removeClass("DragAndDropHover");
				e.preventDefault();
				orakuploaderHandle(e.dataTransfer.files,holdername,settings);
			}
		}

    };

	function changeMain(holder, settings) {
		if(settings.orakuploader_use_main)
		{
			$(holder).find(".multibox").removeClass("main");
			$(holder).find(".multibox").first().addClass("main");

			if (typeof settings.orakuploader_main_changed == 'function') {
				settings.orakuploader_main_changed($(holder).find(".multibox").first().attr('filename'));
			}
		}
	}

	/* WebP 사진도 받는다 — 브라우저에서 JPG 로 바꿔서 보낸다(서버 회전·썸네일·워터마크가 jpg/png 만 처리하므로). 다른 형식은 그대로 보낸다. 2026-10-21 */
	window.orakuploaderToJpeg = window.orakuploaderToJpeg || function(file, done, fail){
		var m = /^(.*)\.webp$/i.exec(file && file.name ? file.name : '');
		if(!m){ done(file); return; }
		var url = (window.URL || window.webkitURL).createObjectURL(file), img = new Image();
		img.onload = function(){
			var cv = document.createElement('canvas'), cx;
			cv.width = img.naturalWidth || img.width; cv.height = img.naturalHeight || img.height;
			cx = cv.getContext('2d'); cx.fillStyle = '#fff'; cx.fillRect(0, 0, cv.width, cv.height); cx.drawImage(img, 0, 0);
			(window.URL || window.webkitURL).revokeObjectURL(url);
			var send = function(blob){ if(!blob){ fail(); return; } var nm = (m[1] || 'image') + '.jpg'; try { blob = new File([blob], nm, {type:'image/jpeg'}); } catch(e){ blob.name = nm; } done(blob); };
			if(cv.toBlob){ cv.toBlob(send, 'image/jpeg', 0.92); return; }
			try { var bin = atob(cv.toDataURL('image/jpeg', 0.92).split(',')[1]), arr = new Uint8Array(bin.length); for(var k = 0; k < bin.length; k++) arr[k] = bin.charCodeAt(k); send(new Blob([arr], {type:'image/jpeg'})); } catch(e){ fail(); }
		};
		img.onerror = function(){ (window.URL || window.webkitURL).revokeObjectURL(url); fail(); };
		img.src = url;
	};

	function orakuploaderHandle(files,holder,settings) {
		var i = 0;
		var msg_alert = false;
		for(i=0;i<files.length;i++)
		{
			if(jQuery.data(holder, "already_uploaded") > settings.orakuploader_maximum_uploads && (typeof settings.orakuploader_max_exceeded == 'function')) {
				if(msg_alert == false) settings.orakuploader_max_exceeded();
				msg_alert = true;
				if(settings.orakuploader_hide_on_exceed == true) $(holder).closest('.uploadButton').hide();
			}
			var re = /(?:\.([^.]+))?$/;
			var ext = re.exec(files[i].name)[1].toLowerCase();

			if((ext == 'jpg' || ext == 'jpeg' || ext == 'png' || ext == 'webp') &&  jQuery.data(holder, "already_uploaded") <= settings.orakuploader_maximum_uploads)
			{
				var clone = $("#"+$(holder).attr("id")+"_to_clone").find(".multibox").clone();

				$(holder).append($(clone));
				(function(f, c, n){ orakuploaderToJpeg(f, function(nf){ upload(nf, c, n, holder, settings); }, function(){
					$(c).remove(); jQuery.data(holder, "already_uploaded", jQuery.data(holder, "already_uploaded")-1); jQuery.data(holder, "count", jQuery.data(holder, "count")-1);
					jQuery.data(holder, 'currently_uploading', 0); $(holder).parent().find('.uploadButton').show(); alert('WebP 사진을 JPG로 바꾸지 못했습니다. JPG·PNG로 올려 주세요.');
				}); })(files[i], clone, i);
				jQuery.data(holder, "already_uploaded", jQuery.data(holder, "already_uploaded")+1);
				jQuery.data(holder, "count", jQuery.data(holder, "count")+1);
			}
		}
	}

	window.counter = 0;
	function upload(file, clone, place, holder, settings)
	{
        var phoneInbox = holder.data('phoneInbox');
        if(phoneInbox){ phoneInbox.upload(file, clone); return; }
		if(settings.orakuploader_hide_on_exceed == true && parseInt(jQuery.data(holder, 'already_uploaded')) == parseInt(settings.orakuploader_maximum_uploads)) {
			$(holder).parent().find('.uploadButton').hide();
		}
		var xhr = new XMLHttpRequest();
		xhr.open("POST", settings.orakuploader_path+"orakuploader.php?is_session=&uq=70&filename="+encodeURIComponent(file.name)+"&path="+settings.orakuploader_path+"&resize_to="+settings.orakuploader_resize_to+"&thumbnail_size="+settings.orakuploader_thumbnail_size+"&main_path="+settings.orakuploader_main_path+"&thumbnail_path="+settings.orakuploader_thumbnail_path+"&watermark="+settings.orakuploader_watermark+"&orakuploader_crop_to_width="+settings.orakuploader_crop_to_width+"&orakuploader_crop_to_height="+settings.orakuploader_crop_to_height+"&orakuploader_crop_thumb_to_width="+settings.orakuploader_crop_thumb_to_width+"&orakuploader_crop_thumb_to_height="+settings.orakuploader_crop_thumb_to_height, true);
		xhr.send(file);
		xhr.onreadystatechange = function()
		{
			var rotation_html = "";
			if (xhr.readyState == 4)
			{
				if(settings.orakuploader_use_rotation == true) {
					rotation_html = "<div class='rotate_picture' degree-lvl='1'>"+settings.orakuploader_file_rotation_label+"</div>";
				}
				$(clone).html("<div class='picture_delete'>"+settings.orakuploader_file_delete_label+"</div>"+rotation_html+"<img src='"+settings.orakuploader_thumbnail_path+"/"+xhr.responseText+"' alt='' onerror=this.src='"+settings.orakuploader_path+"/images/no-image.jpg' class='picture_uploaded'/> <input type='hidden' value='"+xhr.responseText+"' name='"+settings.orakuploader_field_name+"[]' /><div class='ui-sortable-handle' style='display:inline-block; width:100%; height:100%; position:absolute; top:0; left:0; background-color:#fafafa; z-index:1; opacity:0;'>btn</div>");
				$(clone).attr('id', xhr.responseText);
				$(clone).attr('filename', xhr.responseText);
				jQuery.data(holder, "counter", jQuery.data(holder, "counter")+1);
				if(jQuery.data(holder, "count") == jQuery.data(holder, "counter"))
				{
					if (typeof settings.orakuploader_finished == 'function') {
						settings.orakuploader_finished();
					}
					changeMain(holder, settings);
					jQuery.data(holder, "counter", 0);
					if(settings.orakuploader_hide_in_progress == true) {
						jQuery.data(holder, 'currently_uploading', 0);
						$(holder).parent().find('.uploadButton').show();
					}
				}
			}
		}
	}

}( jQuery ));

window.initialized = 0;

function orakuploaderLoad(name) {
	$('.'+(name)+'Input').click();
	window.initialized++;
}

function getHtml(name, add_image, add_label, path)
{
	return '<div id="'+name+'_to_clone" class="clone_item"><div class="multibox file"><div class="loading"><img src="'+path+'/images/loader.gif" alt="loader"/></div></div></div>\
		<div id="'+name+'DDArea">\
			<div id="'+name+'">\
			</div>\
			<div class="multibox uploadButton" onclick="javascript:orakuploaderLoad(\''+name+'\');">\
			<img src="'+add_image+'"/>\
			<div class="label">'+add_label+'</div>\
			</div>\
			<input type="file" class="'+name+'Input orakuploaderFileInput" accept="image/*" multiple/>\
			<div class="clear"> </div>\
		</div>';

}
