PageSourceSearch

https://nowre.com/wp-content/themes/nowre/js/common.js?ver=2020112101

js nowre.com collected 2026-10-02 17:05:52 UTC 46,841 bytes, 1,073 lines download raw bytes

1//https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
2if (!Object.assign) {
3  Object.defineProperty(Object, "assign", {
4    enumerable: false,
5    configurable: true,
6    writable: true,
7    value: function(target, firstSource) {
8      "use strict";
9      if (target === undefined || target === null)
10        throw new TypeError("Cannot convert first argument to object");
11      var to = Object(target);
12      for (var i = 1; i < arguments.length; i++) {
13        var nextSource = arguments[i];
14        if (nextSource === undefined || nextSource === null) continue;
15        var keysArray = Object.keys(Object(nextSource));
16        for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
17          var nextKey = keysArray[nextIndex];
18          var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
19          if (desc !== undefined && desc.enumerable) to[nextKey] = nextSource[nextKey];
20        }
21      }
22      return to;
23    }
24  });
25}
26function gettype(obj){
27  return Object.prototype.toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
28}
29function str_pad (input, padLength, padString, padType) { // eslint-disable-line camelcase
30  //  discuss at: http://locutus.io/php/str_pad/
31  // original by: Kevin van Zonneveld (http://kvz.io)
32  // improved by: Michael White (http://getsprink.com)
33  //    input by: Marco van Oort
34  // bugfixed by: Brett Zamir (http://brett-zamir.me)
35  //   example 1: str_pad('Kevin van Zonneveld', 30, '-=', 'STR_PAD_LEFT')
36  //   returns 1: '-=-=-=-=-=-Kevin van Zonneveld'
37  //   example 2: str_pad('Kevin van Zonneveld', 30, '-', 'STR_PAD_BOTH')
38  //   returns 2: '------Kevin van Zonneveld-----'
39
40  var half = ''
41  var padToGo
42
43  var _strPadRepeater = function (s, len) {
44    var collect = ''
45
46    while (collect.length < len) {
47      collect += s
48    }
49    collect = collect.substr(0, len)
50
51    return collect
52  }
53
54  input += ''
55  padString = padString !== undefined ? padString : ' '
56
57  if (padType !== 'STR_PAD_LEFT' && padType !== 'STR_PAD_RIGHT' && padType !== 'STR_PAD_BOTH') {
58    padType = 'STR_PAD_RIGHT'
59  }
60  if ((padToGo = padLength - input.length) > 0) {
61    if (padType === 'STR_PAD_LEFT') {
62      input = _strPadRepeater(padString, padToGo) + input
63    } else if (padType === 'STR_PAD_RIGHT') {
64      input = input + _strPadRepeater(padString, padToGo)
65    } else if (padType === 'STR_PAD_BOTH') {
66      half = _strPadRepeater(padString, Math.ceil(padToGo / 2))
67      input = half + input + half
68      input = input.substr(0, padLength)
69    }
70  }
71
72  return input
73}
74
75function ucfirst(str){
76	str+='';
77	var f = str.charAt(0).toUpperCase();
78	return f + str.substr(1);
79}
80var pfx = (function () {
81    var style = document.createElement('dummy').style,
82        prefixes = 'Webkit Moz O ms Khtml'.split(' '),
83        memory = {};
84    return function ( prop ) {
85        if ( typeof memory[ prop ] === "undefined" ) {
86            //实现一个ucfirst
87            var ucProp  = ucfirst(prop),
88            //拿到前缀化的属性名
89                props   = (prop + ' ' + prefixes.join(ucProp + ' ') + ucProp).split(' ');
90
91            memory[ prop ] = null;
92            for ( var i in props ) {
93                if ( style[ props[i] ] !== undefined ) {
94                    memory[ prop ] = props[i];
95                    break;
96                }
97            }
98        }
99
100        return memory[ prop ];
101    };
102})();
103function whichTransitionEvent(){
104    var t;
105    var el = document.createElement('p');
106    var transitions = {
107      'transition':'transitionend',
108      'OTransition':'oTransitionEnd',
109      'MozTransition':'mozTransitionEnd',
110      'WebkitTransition':'webkitTransitionEnd',
111      'MsTransition':'msTransitionEnd'
112    }
113    for(t in transitions){
114        if( el.style[t] !== undefined ){
115            return transitions[t];
116        }
117    }
118}
119(function(window){
120	var instance = null;
121	var status = null;
122	var defaults = {
123		selector:"#jumbotron",
124		openFunc:'linear',
125		openDuration:800,
126		closeFunc:'linear',
127		closeDuration:500,
128		doSthBeforeOpen:function(){
129
130		},
131		doSthAfterOpen:function(){
132
133		},
134		doSthBeforeClose:function(){
135
136		},
137		doSthAfterClose:function(){
138
139		},
140	}
141	function Jumbotron(option){
142	    if(!(this instanceof Jumbotron)){
143	        return new Jumbotron(option);
144	    }
145	    if(!(instance instanceof Jumbotron)){
146	    	// 初始化设置
147	    	this.option = Object.assign({},defaults,option);
148	    	this.init();
149	    	instance = this;
150	    }
151	    return instance;
152	}
153	Jumbotron.prototype = {
154		constructor:Jumbotron,
155		init:function(){
156			this.ele = document.querySelector(this.option.selector);
157			if(!this.ele){
158				console.error('missing parameter');
159				return;
160			}
161			this.oriDisplay = window.getComputedStyle(this.ele)['display'];
162			this.ele.style.display = "none";
163			status = 0;
164			var _this = this;
165			this.ele.addEventListener(whichTransitionEvent(),function(){
166				if(status==1){
167					status = 2;
168					_this.ele.style.height = "auto";
169					gettype(_this.option.doSthAfterOpen)==='function' && _this.option.doSthAfterOpen();
170				}else if(status==3){
171					status = 4;
172					_this.ele.style.display = "none";
173					gettype(_this.option.doSthAfterClose)==='function' && _this.option.doSthAfterClose();
174				}
175			});
176		},
177		open:function(){
178			if(status!==0){
179				return;
180			}
181			gettype(this.option.doSthBeforeOpen)==='function' && this.option.doSthBeforeOpen();
182			this.ele.style[pfx('transition')] = "height " + this.option.openDuration + "ms "+ this.option.openFunc;
183			this.ele.style.cssText += "display:"+ this.oriDisplay + ";height:0;overflow:hidden;"
184			this.ele.style.height = this.ele.scrollHeight + 'px';
185			status = 1;
186		},
187		close:function(){
188			if(status!=2){
189				return;
190			}
191			gettype(this.option.doSthBeforeClose)==='function' && this.option.doSthBeforeClose();
192			this.ele.style.height = getComputedStyle(this.ele)['height'];
193			this.ele.style[pfx('transition')] = "height " + this.option.closeDuration + "ms "+ this.option.closeFunc;
194			status = 3;
195			getComputedStyle(this.ele)['height'];
196			this.ele.style.height = 0;
197		}
198	}
199	window.jumbotron = Jumbotron;
200	window.Jumbotron = Jumbotron;
201})(window);
202
203
204(function(window){
205	var transitionend = whichTransitionEvent();
206
207	var defaults = {
208		selector:'.horizontalMove',
209		initialMove:0,
210		transition:'ease 600ms',
211	}
212
213	var winW = parseInt(getComputedStyle(document.documentElement).width);
214
215	function HorizontalMove(opt){
216	    if(!(this instanceof HorizontalMove)){
217	        return new HorizontalMove(opt);
218	    }
219	    this.options = Object.assign({},defaults,opt||{});
220	    this.ele = document.querySelector(this.options.selector);
221	    if(!this.ele){
222	    	console.error('selector is wrong');
223	    	return;
224	    }
225	    this.dx = 0;
226	    var elemW = parseInt(getComputedStyle(this.ele).width);
227		var offsetLeft = this.ele.getBoundingClientRect().left + document.body.scrollLeft;
228		console.log(offsetLeft,elemW)
229		var minX = winW - offsetLeft - elemW;
230		console.log(minX)
231		this.options.minX = minX;
232		this.options.transition = "transform "+ this.options.transition;
233		var initialMove = this.options.initialMove;
234		if(initialMove<0 && initialMove>minX){
235			this.dx = initialMove;
236			this._setMove(initialMove);
237		}
238
239	    this._bindEvent();
240	}
241
242	HorizontalMove.prototype = {
243		constructor:HorizontalMove,
244		_bindEvent:function(){
245			var _this = this;
246			touch.on(this.ele,'drag',function(event){
247				var offx = _this.dx + event.x;
248				console.log(offx)
249				_this._setMove(offx);
250			});
251			touch.on(this.ele,"dragend",function(event){
252				_this.dx += event.x;
253				console.log(_this.dx)
254				if(_this.dx>0){
255					_this._setTransition(_this.options.transition);
256					_this._setMove(0);
257				}else if(_this.dx<0&&_this.dx<_this.options.minX){
258					_this._setTransition(_this.options.transition);
259					_this._setMove(_this.options.minX);
260				}
261			});
262			this.ele.addEventListener(transitionend,function(event){
263				_this._setTransition('');
264				if(_this.dx>0){
265					_this.dx = 0;
266				}else{
267					_this.dx = _this.options.minX;
268				}
269			},false);
270		},
271		_setMove:function(x){
272			this.ele.style[pfx('transform')] = 'translate3d(' + x + 'px,0,0)';
273		},
274		_setTransition:function(str){
275			this.ele.style[pfx('transition')] = str;
276		}
277
278	}
279	window.HorizontalMove = HorizontalMove;
280	window.horizontalMove = HorizontalMove;
281})(window);
282
283
284//info_load 控制tab标签切换
285function info_load(module,menu){
286    jQuery("#nav-"+module+" li").removeClass("active");
287    jQuery("#nav-"+module+"-"+menu).addClass("active");
288    jQuery(".info-"+module).addClass("d-none");
289    jQuery("#info-"+module+"-"+menu).removeClass("d-none");
290}
291if (!String.prototype.str_supplant) {
292    String.prototype.str_supplant = function (o) {
293        return this.replace(/{([^{}]*)}/g,
294            function (a, b) {
295                var r = o[b];
296                return typeof r === 'string' || typeof r === 'number' ? r : a;
297            }
298        );
299    };
300}
301var cookieUtil = {
302    get: function (name){
303        var cookieName = encodeURIComponent(name) + "=",
304            cookieStart = document.cookie.indexOf(cookieName),
305            cookieValue = null,
306            cookieEnd;
307        if (cookieStart > -1){
308            cookieEnd = document.cookie.indexOf(";", cookieStart);
309            if (cookieEnd == -1){
310                cookieEnd = document.cookie.length;
311            }
312            cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
313        }
314        return cookieValue;
315    },
316    set: function (name, value, expires, path, domain, secure) {
317        var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
318        if (expires instanceof Date) {
319            cookieText += "; expires=" + expires.toGMTString();
320        }
321        if (path) {
322            cookieText += "; path=" + path;
323        }
324        if (domain) {
325            cookieText += "; domain=" + domain;
326        }
327        if (secure) {
328            cookieText += "; secure";
329        }
330        document.cookie = cookieText;
331    },
332    unset: function (name, path, domain, secure){
333        this.set(name, "", new Date(0), path, domain, secure);
334    }
335};
336
337function get_more(action,id){
338    get_mores({action:action,id:id});
339}
340
341var get_more_counter = {};
342function get_mores(opts){
343    var dft_opt = {
344        action: 'index',
345        id:'#id',
346        isIndex:0,
347        page:''
348    };
349    opts = jQuery.extend({},dft_opt,opts);
350    var id = opts.id;
351    if (gettype(get_more_counter[id])=='undefined' || get_more_counter[id]==='NaN'){
352        get_more_counter[id] = 0;
353    }
354    get_more_counter[id]++;
355    opts.get_more_counter = get_more_counter[id];
356	console.log(opts);
357	debugger;
358    if ((opts.isIndex==1 && opts.get_more_counter==3 && opts.page!='')) {
359        window.location.href = opts.page;
360        return;
361    }
362    jQuery.post(
363    ajaxurl,
364        opts,
365        function(response){
366            jQuery(opts.id).append(response);
367            checkScroll();
368        }
369    );
370}
371function get_more_categary(action,id,category,page){
372    get_mores({action:action,id:id,category:category,isIndex:1,page:page});
373}
374function get_more_index(action,id,page){
375    get_mores({action:action,id:id,isIndex:1,page:page});
376}
377function get_more_normal(action,id){
378    get_mores({action:action,id:id,isIndex:0});
379}
380function get_ajax_load(opts){
381    var dft_opt = {
382        action: 'index',
383        id:'#id',
384        isIndex:0,
385        page:''
386    };
387    opts = jQuery.extend({},dft_opt,opts);
388    var id = opts.id;
389
390    jQuery.post(
391    ajaxurl,
392        opts,
393        function(response){
394            jQuery(opts.id).html(response);
395        }
396    );
397}
398
399/*!
400 * author:jieyou
401 * contacts:百度hi->youyo1122
402 * see https://github.com/jieyou/sinaWeiboShare
403 */
404;(function(window){
405	var sinaUrlPrefix = 'http://service.weibo.com/share/'+(/android|webos|ip(hone|ad|od)|opera (mini|mobi|tablet)|iemobile|windows.+(phone|touch)|mobile|fennec|kindle (Fire)|Silk|maemo|blackberry|playbook|bb10\; (touch|kbd)|Symbian(OS)|Ubuntu Touch/i.test(navigator.userAgent)?'mobile':'share')+'.php?' // see https://github.com/pinceladasdaweb/isMobile/blob/master/ismobile.js
406	
407	// options
408	//  title或text [类型String] 分享内容,无需encodeURI
409	//  url [类型String] 分享链接,无需encodeURI
410	//  pic [类型String] 分享图片的url,无需encodeURI。新浪的接口多张图片尚未完全开放,暂时只能分享一张
411	//  ralateUid [类型String 或 Number] 相关微博Uid,如果有此项,分享内容会自动 @相关微博
412	//  appkey [类型String 或 Number] 分享来源的appkey,如果有此项,会在微博正文地下,显示“来自XXX”
413	function getUrl(options){
414		var key,urlArray = []
415		// 我们调起客户端分享的接口用text代表分享的内容,而sina微博的web分享接口用title表示分享的内容。为了兼容和减少工作量,可以用text代表title参数
416		if(options.text){
417			options.title = options.text
418			delete options.text
419		}
420		if(options){
421			for(key in options){
422				if(options.hasOwnProperty(key)){
423					switch(key){
424						case 'url':
425						case 'pic':
426						case 'title':
427							urlArray.push(key+'='+encodeURIComponent(options[key]))
428							break;
429						case 'ralateUid':
430						case 'appkey':
431							urlArray.push(key+'='+options[key])
432							break;
433					}
434				}
435			}
436		}
437		return sinaUrlPrefix+urlArray.join('&')
438		
439	}
440
441	function action(optionsOrUrl){
442		if(typeof(optionsOrUrl) != 'string'){
443			optionsOrUrl = getUrl(optionsOrUrl)
444		}
445		try{
446			window.open(optionsOrUrl)
447		}catch(e){}
448	}
449
450	window.sinaWeiboShare = {
451		action:action,
452		getUrl:getUrl
453	}
454	
455})(window)
456
457
458// QRCODE
vendor: 33,168 bytes, lines 459-1072
459/**
460 * @fileoverview
461 * - Using the 'QRCode for Javascript library'
462 * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.
463 * - this library has no dependencies.
464 * 
465 * @author davidshimjs
466 * @see <a href="http://www.d-project.com/" target="_blank">http://www.d-project.com/</a>
467 * @see <a href="http://jeromeetienne.github.com/jquery-qrcode/" target="_blank">http://jeromeetienne.github.com/jquery-qrcode/</a>
468 */
469var QRCode;
470
471(function () {
472	//---------------------------------------------------------------------
473	// QRCode for JavaScript
474	//
475	// Copyright (c) 2009 Kazuhiko Arase
476	//
477	// URL: http://www.d-project.com/
478	//
479	// Licensed under the MIT license:
480	//   http://www.opensource.org/licenses/mit-license.php
481	//
482	// The word "QR Code" is registered trademark of 
483	// DENSO WAVE INCORPORATED
484	//   http://www.denso-wave.com/qrcode/faqpatent-e.html
485	//
486	//---------------------------------------------------------------------
487	function QR8bitByte(data) {
488		this.mode = QRMode.MODE_8BIT_BYTE;
489		this.data = data;
490		this.parsedData = [];
491
492		// Added to support UTF-8 Characters
493		for (var i = 0, l = this.data.length; i < l; i++) {
494			var byteArray = [];
495			var code = this.data.charCodeAt(i);
496
497			if (code > 0x10000) {
498				byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
499				byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
500				byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
501				byteArray[3] = 0x80 | (code & 0x3F);
502			} else if (code > 0x800) {
503				byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
504				byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
505				byteArray[2] = 0x80 | (code & 0x3F);
506			} else if (code > 0x80) {
507				byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
508				byteArray[1] = 0x80 | (code & 0x3F);
509			} else {
510				byteArray[0] = code;
511			}
512
513			this.parsedData.push(byteArray);
514		}
515
516		this.parsedData = Array.prototype.concat.apply([], this.parsedData);
517
518		if (this.parsedData.length != this.data.length) {
519			this.parsedData.unshift(191);
520			this.parsedData.unshift(187);
521			this.parsedData.unshift(239);
522		}
523	}
524
525	QR8bitByte.prototype = {
526		getLength: function (buffer) {
527			return this.parsedData.length;
528		},
529		write: function (buffer) {
530			for (var i = 0, l = this.parsedData.length; i < l; i++) {
531				buffer.put(this.parsedData[i], 8);
532			}
533		}
534	};
535
536	function QRCodeModel(typeNumber, errorCorrectLevel) {
537		this.typeNumber = typeNumber;
538		this.errorCorrectLevel = errorCorrectLevel;
539		this.modules = null;
540		this.moduleCount = 0;
541		this.dataCache = null;
542		this.dataList = [];
543	}
544
545	QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);}
546	return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row<this.moduleCount;row++){this.modules[row]=new Array(this.moduleCount);for(var col=0;col<this.moduleCount;col++){this.modules[row][col]=null;}}
547	this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(test,maskPattern);if(this.typeNumber>=7){this.setupTypeNumber(test);}
548	if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}
549	this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}
550	return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row<this.modules.length;row++){var y=row*cs;for(var col=0;col<this.modules[row].length;col++){var x=col*cs;var dark=this.modules[row][col];if(dark){qr_mc.beginFill(0,100);qr_mc.moveTo(x,y);qr_mc.lineTo(x+cs,y);qr_mc.lineTo(x+cs,y+cs);qr_mc.lineTo(x,y+cs);qr_mc.endFill();}}}
551	return qr_mc;},setupTimingPattern:function(){for(var r=8;r<this.moduleCount-8;r++){if(this.modules[r][6]!=null){continue;}
552	this.modules[r][6]=(r%2==0);}
553	for(var c=8;c<this.moduleCount-8;c++){if(this.modules[6][c]!=null){continue;}
554	this.modules[6][c]=(c%2==0);}},setupPositionAdjustPattern:function(){var pos=QRUtil.getPatternPosition(this.typeNumber);for(var i=0;i<pos.length;i++){for(var j=0;j<pos.length;j++){var row=pos[i];var col=pos[j];if(this.modules[row][col]!=null){continue;}
555	for(var r=-2;r<=2;r++){for(var c=-2;c<=2;c++){if(r==-2||r==2||c==-2||c==2||(r==0&&c==0)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}}}},setupTypeNumber:function(test){var bits=QRUtil.getBCHTypeNumber(this.typeNumber);for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}
556	for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}
557	for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}
558	this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex<data.length){dark=(((data[byteIndex]>>>bitIndex)&1)==1);}
559	var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}
560	this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}
561	row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;i<dataList.length;i++){var data=dataList[i];buffer.put(data.mode,4);buffer.put(data.getLength(),QRUtil.getLengthInBits(data.mode,typeNumber));data.write(buffer);}
562	var totalDataCount=0;for(var i=0;i<rsBlocks.length;i++){totalDataCount+=rsBlocks[i].dataCount;}
563	if(buffer.getLengthInBits()>totalDataCount*8){throw new Error("code length overflow. ("
564	+buffer.getLengthInBits()
565	+">"
566	+totalDataCount*8
567	+")");}
568	if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}
569	while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}
570	while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}
571	buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}
572	buffer.put(QRCodeModel.PAD1,8);}
573	return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r<rsBlocks.length;r++){var dcCount=rsBlocks[r].dataCount;var ecCount=rsBlocks[r].totalCount-dcCount;maxDcCount=Math.max(maxDcCount,dcCount);maxEcCount=Math.max(maxEcCount,ecCount);dcdata[r]=new Array(dcCount);for(var i=0;i<dcdata[r].length;i++){dcdata[r][i]=0xff&buffer.buffer[i+offset];}
574	offset+=dcCount;var rsPoly=QRUtil.getErrorCorrectPolynomial(ecCount);var rawPoly=new QRPolynomial(dcdata[r],rsPoly.getLength()-1);var modPoly=rawPoly.mod(rsPoly);ecdata[r]=new Array(rsPoly.getLength()-1);for(var i=0;i<ecdata[r].length;i++){var modIndex=i+modPoly.getLength()-ecdata[r].length;ecdata[r][i]=(modIndex>=0)?modPoly.get(modIndex):0;}}
575	var totalCodeCount=0;for(var i=0;i<rsBlocks.length;i++){totalCodeCount+=rsBlocks[i].totalCount;}
576	var data=new Array(totalCodeCount);var index=0;for(var i=0;i<maxDcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<dcdata[r].length){data[index++]=dcdata[r][i];}}}
577	for(var i=0;i<maxEcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<ecdata[r].length){data[index++]=ecdata[r][i];}}}
578	return data;};var QRMode={MODE_NUMBER:1<<0,MODE_ALPHA_NUM:1<<1,MODE_8BIT_BYTE:1<<2,MODE_KANJI:1<<3};var QRErrorCorrectLevel={L:1,M:0,Q:3,H:2};var QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var QRUtil={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:(1<<10)|(1<<8)|(1<<5)|(1<<4)|(1<<2)|(1<<1)|(1<<0),G18:(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<5)|(1<<2)|(1<<0),G15_MASK:(1<<14)|(1<<12)|(1<<10)|(1<<4)|(1<<1),getBCHTypeInfo:function(data){var d=data<<10;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)>=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}
579	return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}
580	return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}
581	return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i<errorCorrectLength;i++){a=a.multiply(new QRPolynomial([1,QRMath.gexp(i)],0));}
582	return a;},getLengthInBits:function(mode,type){if(1<=type&&type<10){switch(mode){case QRMode.MODE_NUMBER:return 10;case QRMode.MODE_ALPHA_NUM:return 9;case QRMode.MODE_8BIT_BYTE:return 8;case QRMode.MODE_KANJI:return 8;default:throw new Error("mode:"+mode);}}else if(type<27){switch(mode){case QRMode.MODE_NUMBER:return 12;case QRMode.MODE_ALPHA_NUM:return 11;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 10;default:throw new Error("mode:"+mode);}}else if(type<41){switch(mode){case QRMode.MODE_NUMBER:return 14;case QRMode.MODE_ALPHA_NUM:return 13;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 12;default:throw new Error("mode:"+mode);}}else{throw new Error("type:"+type);}},getLostPoint:function(qrCode){var moduleCount=qrCode.getModuleCount();var lostPoint=0;for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount;col++){var sameCount=0;var dark=qrCode.isDark(row,col);for(var r=-1;r<=1;r++){if(row+r<0||moduleCount<=row+r){continue;}
583	for(var c=-1;c<=1;c++){if(col+c<0||moduleCount<=col+c){continue;}
584	if(r==0&&c==0){continue;}
585	if(dark==qrCode.isDark(row+r,col+c)){sameCount++;}}}
586	if(sameCount>5){lostPoint+=(3+sameCount-5);}}}
587	for(var row=0;row<moduleCount-1;row++){for(var col=0;col<moduleCount-1;col++){var count=0;if(qrCode.isDark(row,col))count++;if(qrCode.isDark(row+1,col))count++;if(qrCode.isDark(row,col+1))count++;if(qrCode.isDark(row+1,col+1))count++;if(count==0||count==4){lostPoint+=3;}}}
588	for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount-6;col++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row,col+1)&&qrCode.isDark(row,col+2)&&qrCode.isDark(row,col+3)&&qrCode.isDark(row,col+4)&&!qrCode.isDark(row,col+5)&&qrCode.isDark(row,col+6)){lostPoint+=40;}}}
589	for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount-6;row++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row+1,col)&&qrCode.isDark(row+2,col)&&qrCode.isDark(row+3,col)&&qrCode.isDark(row+4,col)&&!qrCode.isDark(row+5,col)&&qrCode.isDark(row+6,col)){lostPoint+=40;}}}
590	var darkCount=0;for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount;row++){if(qrCode.isDark(row,col)){darkCount++;}}}
591	var ratio=Math.abs(100*darkCount/moduleCount/moduleCount-50)/5;lostPoint+=ratio*10;return lostPoint;}};var QRMath={glog:function(n){if(n<1){throw new Error("glog("+n+")");}
592	return QRMath.LOG_TABLE[n];},gexp:function(n){while(n<0){n+=255;}
593	while(n>=256){n-=255;}
594	return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<<i;}
595	for(var i=8;i<256;i++){QRMath.EXP_TABLE[i]=QRMath.EXP_TABLE[i-4]^QRMath.EXP_TABLE[i-5]^QRMath.EXP_TABLE[i-6]^QRMath.EXP_TABLE[i-8];}
596	for(var i=0;i<255;i++){QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]]=i;}
597	function QRPolynomial(num,shift){if(num.length==undefined){throw new Error(num.length+"/"+shift);}
598	var offset=0;while(offset<num.length&&num[offset]==0){offset++;}
599	this.num=new Array(num.length-offset+shift);for(var i=0;i<num.length-offset;i++){this.num[i]=num[i+offset];}}
600	QRPolynomial.prototype={get:function(index){return this.num[index];},getLength:function(){return this.num.length;},multiply:function(e){var num=new Array(this.getLength()+e.getLength()-1);for(var i=0;i<this.getLength();i++){for(var j=0;j<e.getLength();j++){num[i+j]^=QRMath.gexp(QRMath.glog(this.get(i))+QRMath.glog(e.get(j)));}}
601	return new QRPolynomial(num,0);},mod:function(e){if(this.getLength()-e.getLength()<0){return this;}
602	var ratio=QRMath.glog(this.get(0))-QRMath.glog(e.get(0));var num=new Array(this.getLength());for(var i=0;i<this.getLength();i++){num[i]=this.get(i);}
603	for(var i=0;i<e.getLength();i++){num[i]^=QRMath.gexp(QRMath.glog(e.get(i))+ratio);}
604	return new QRPolynomial(num,0).mod(e);}};function QRRSBlock(totalCount,dataCount){this.totalCount=totalCount;this.dataCount=dataCount;}
605	QRRSBlock.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]];QRRSBlock.getRSBlocks=function(typeNumber,errorCorrectLevel){var rsBlock=QRRSBlock.getRsBlockTable(typeNumber,errorCorrectLevel);if(rsBlock==undefined){throw new Error("bad rs block @ typeNumber:"+typeNumber+"/errorCorrectLevel:"+errorCorrectLevel);}
606	var length=rsBlock.length/3;var list=[];for(var i=0;i<length;i++){var count=rsBlock[i*3+0];var totalCount=rsBlock[i*3+1];var dataCount=rsBlock[i*3+2];for(var j=0;j<count;j++){list.push(new QRRSBlock(totalCount,dataCount));}}
607	return list;};QRRSBlock.getRsBlockTable=function(typeNumber,errorCorrectLevel){switch(errorCorrectLevel){case QRErrorCorrectLevel.L:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+0];case QRErrorCorrectLevel.M:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+1];case QRErrorCorrectLevel.Q:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+2];case QRErrorCorrectLevel.H:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+3];default:return undefined;}};function QRBitBuffer(){this.buffer=[];this.length=0;}
608	QRBitBuffer.prototype={get:function(index){var bufIndex=Math.floor(index/8);return((this.buffer[bufIndex]>>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i<length;i++){this.putBit(((num>>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}
609	if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}
610	this.length++;}};var QRCodeLimitLength=[[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]];
611	
612	function _isSupportCanvas() {
613		return typeof CanvasRenderingContext2D != "undefined";
614	}
615	
616	// android 2.x doesn't support Data-URI spec
617	function _getAndroid() {
618		var android = false;
619		var sAgent = navigator.userAgent;
620		
621		if (/android/i.test(sAgent)) { // android
622			android = true;
623			var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i);
624			
625			if (aMat && aMat[1]) {
626				android = parseFloat(aMat[1]);
627			}
628		}
629		
630		return android;
631	}
632	
633	var svgDrawer = (function() {
634
635		var Drawing = function (el, htOption) {
636			this._el = el;
637			this._htOption = htOption;
638		};
639
640		Drawing.prototype.draw = function (oQRCode) {
641			var _htOption = this._htOption;
642			var _el = this._el;
643			var nCount = oQRCode.getModuleCount();
644			var nWidth = Math.floor(_htOption.width / nCount);
645			var nHeight = Math.floor(_htOption.height / nCount);
646
647			this.clear();
648
649			function makeSVG(tag, attrs) {
650				var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
651				for (var k in attrs)
652					if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);
653				return el;
654			}
655
656			var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});
657			svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
658			_el.appendChild(svg);
659
660			svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"}));
661			svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"}));
662
663			for (var row = 0; row < nCount; row++) {
664				for (var col = 0; col < nCount; col++) {
665					if (oQRCode.isDark(row, col)) {
666						var child = makeSVG("use", {"x": String(col), "y": String(row)});
667						child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template")
668						svg.appendChild(child);
669					}
670				}
671			}
672		};
673		Drawing.prototype.clear = function () {
674			while (this._el.hasChildNodes())
675				this._el.removeChild(this._el.lastChild);
676		};
677		return Drawing;
678	})();
679
680	var useSVG = document.documentElement.tagName.toLowerCase() === "svg";
681
682	// Drawing in DOM by using Table tag
683	var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {
684		var Drawing = function (el, htOption) {
685			this._el = el;
686			this._htOption = htOption;
687		};
688			
689		/**
690		 * Draw the QRCode
691		 * 
692		 * @param {QRCode} oQRCode
693		 */
694		Drawing.prototype.draw = function (oQRCode) {
695            var _htOption = this._htOption;
696            var _el = this._el;
697			var nCount = oQRCode.getModuleCount();
698			var nWidth = Math.floor(_htOption.width / nCount);
699			var nHeight = Math.floor(_htOption.height / nCount);
700			var aHTML = ['<table style="border:0;border-collapse:collapse;">'];
701			
702			for (var row = 0; row < nCount; row++) {
703				aHTML.push('<tr>');
704				
705				for (var col = 0; col < nCount; col++) {
706					aHTML.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + nWidth + 'px;height:' + nHeight + 'px;background-color:' + (oQRCode.isDark(row, col) ? _htOption.colorDark : _htOption.colorLight) + ';"></td>');
707				}
708				
709				aHTML.push('</tr>');
710			}
711			
712			aHTML.push('</table>');
713			_el.innerHTML = aHTML.join('');
714			
715			// Fix the margin values as real size.
716			var elTable = _el.childNodes[0];
717			var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;
718			var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;
719			
720			if (nLeftMarginTable > 0 && nTopMarginTable > 0) {
721				elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px";	
722			}
723		};
724		
725		/**
726		 * Clear the QRCode
727		 */
728		Drawing.prototype.clear = function () {
729			this._el.innerHTML = '';
730		};
731		
732		return Drawing;
733	})() : (function () { // Drawing in Canvas
734		function _onMakeImage() {
735			this._elImage.src = this._elCanvas.toDataURL("image/png");
736			this._elImage.style.display = "block";
737			this._elCanvas.style.display = "none";			
738		}
739		
740		// Android 2.1 bug workaround
741		// http://code.google.com/p/android/issues/detail?id=5141
742		if (this._android && this._android <= 2.1) {
743	    	var factor = 1 / window.devicePixelRatio;
744	        var drawImage = CanvasRenderingContext2D.prototype.drawImage; 
745	    	CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {
746	    		if (("nodeName" in image) && /img/i.test(image.nodeName)) {
747		        	for (var i = arguments.length - 1; i >= 1; i--) {
748		            	arguments[i] = arguments[i] * factor;
749		        	}
750	    		} else if (typeof dw == "undefined") {
751	    			arguments[1] *= factor;
752	    			arguments[2] *= factor;
753	    			arguments[3] *= factor;
754	    			arguments[4] *= factor;
755	    		}
756	    		
757	        	drawImage.apply(this, arguments); 
758	    	};
759		}
760		
761		/**
762		 * Check whether the user's browser supports Data URI or not
763		 * 
764		 * @private
765		 * @param {Function} fSuccess Occurs if it supports Data URI
766		 * @param {Function} fFail Occurs if it doesn't support Data URI
767		 */
768		function _safeSetDataURI(fSuccess, fFail) {
769            var self = this;
770            self._fFail = fFail;
771            self._fSuccess = fSuccess;
772
773            // Check it just once
774            if (self._bSupportDataURI === null) {
775                var el = document.createElement("img");
776                var fOnError = function() {
777                    self._bSupportDataURI = false;
778
779                    if (self._fFail) {
780                        self._fFail.call(self);
781                    }
782                };
783                var fOnSuccess = function() {
784                    self._bSupportDataURI = true;
785
786                    if (self._fSuccess) {
787                        self._fSuccess.call(self);
788                    }
789                };
790
791                el.onabort = fOnError;
792                el.onerror = fOnError;
793                el.onload = fOnSuccess;
794                el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data.
795                return;
796            } else if (self._bSupportDataURI === true && self._fSuccess) {
797                self._fSuccess.call(self);
798            } else if (self._bSupportDataURI === false && self._fFail) {
799                self._fFail.call(self);
800            }
801		};
802		
803		/**
804		 * Drawing QRCode by using canvas
805		 * 
806		 * @constructor
807		 * @param {HTMLElement} el
808		 * @param {Object} htOption QRCode Options 
809		 */
810		var Drawing = function (el, htOption) {
811    		this._bIsPainted = false;
812    		this._android = _getAndroid();
813		
814			this._htOption = htOption;
815			this._elCanvas = document.createElement("canvas");
816			this._elCanvas.width = htOption.width;
817			this._elCanvas.height = htOption.height;
818			el.appendChild(this._elCanvas);
819			this._el = el;
820			this._oContext = this._elCanvas.getContext("2d");
821			this._bIsPainted = false;
822			this._elImage = document.createElement("img");
823			this._elImage.alt = "Scan me!";
824			this._elImage.style.display = "none";
825			this._el.appendChild(this._elImage);
826			this._bSupportDataURI = null;
827		};
828			
829		/**
830		 * Draw the QRCode
831		 * 
832		 * @param {QRCode} oQRCode 
833		 */
834		Drawing.prototype.draw = function (oQRCode) {
835            var _elImage = this._elImage;
836            var _oContext = this._oContext;
837            var _htOption = this._htOption;
838            
839			var nCount = oQRCode.getModuleCount();
840			var nWidth = _htOption.width / nCount;
841			var nHeight = _htOption.height / nCount;
842			var nRoundedWidth = Math.round(nWidth);
843			var nRoundedHeight = Math.round(nHeight);
844
845			_elImage.style.display = "none";
846			this.clear();
847			
848			for (var row = 0; row < nCount; row++) {
849				for (var col = 0; col < nCount; col++) {
850					var bIsDark = oQRCode.isDark(row, col);
851					var nLeft = col * nWidth;
852					var nTop = row * nHeight;
853					_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;
854					_oContext.lineWidth = 1;
855					_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;					
856					_oContext.fillRect(nLeft, nTop, nWidth, nHeight);
857					
858					// 안티 앨리어싱 방지 처리
859					_oContext.strokeRect(
860						Math.floor(nLeft) + 0.5,
861						Math.floor(nTop) + 0.5,
862						nRoundedWidth,
863						nRoundedHeight
864					);
865					
866					_oContext.strokeRect(
867						Math.ceil(nLeft) - 0.5,
868						Math.ceil(nTop) - 0.5,
869						nRoundedWidth,
870						nRoundedHeight
871					);
872				}
873			}
874			
875			this._bIsPainted = true;
876		};
877			
878		/**
879		 * Make the image from Canvas if the browser supports Data URI.
880		 */
881		Drawing.prototype.makeImage = function () {
882			if (this._bIsPainted) {
883				_safeSetDataURI.call(this, _onMakeImage);
884			}
885		};
886			
887		/**
888		 * Return whether the QRCode is painted or not
889		 * 
890		 * @return {Boolean}
891		 */
892		Drawing.prototype.isPainted = function () {
893			return this._bIsPainted;
894		};
895		
896		/**
897		 * Clear the QRCode
898		 */
899		Drawing.prototype.clear = function () {
900			this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);
901			this._bIsPainted = false;
902		};
903		
904		/**
905		 * @private
906		 * @param {Number} nNumber
907		 */
908		Drawing.prototype.round = function (nNumber) {
909			if (!nNumber) {
910				return nNumber;
911			}
912			
913			return Math.floor(nNumber * 1000) / 1000;
914		};
915		
916		return Drawing;
917	})();
918	
919	/**
920	 * Get the type by string length
921	 * 
922	 * @private
923	 * @param {String} sText
924	 * @param {Number} nCorrectLevel
925	 * @return {Number} type
926	 */
927	function _getTypeNumber(sText, nCorrectLevel) {			
928		var nType = 1;
929		var length = _getUTF8Length(sText);
930		
931		for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
932			var nLimit = 0;
933			
934			switch (nCorrectLevel) {
935				case QRErrorCorrectLevel.L :
936					nLimit = QRCodeLimitLength[i][0];
937					break;
938				case QRErrorCorrectLevel.M :
939					nLimit = QRCodeLimitLength[i][1];
940					break;
941				case QRErrorCorrectLevel.Q :
942					nLimit = QRCodeLimitLength[i][2];
943					break;
944				case QRErrorCorrectLevel.H :
945					nLimit = QRCodeLimitLength[i][3];
946					break;
947			}
948			
949			if (length <= nLimit) {
950				break;
951			} else {
952				nType++;
953			}
954		}
955		
956		if (nType > QRCodeLimitLength.length) {
957			throw new Error("Too long data");
958		}
959		
960		return nType;
961	}
962
963	function _getUTF8Length(sText) {
964		var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
965		return replacedText.length + (replacedText.length != sText ? 3 : 0);
966	}
967	
968	/**
969	 * @class QRCode
970	 * @constructor
971	 * @example 
972	 * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie");
973	 *
974	 * @example
975	 * var oQRCode = new QRCode("test", {
976	 *    text : "http://naver.com",
977	 *    width : 128,
978	 *    height : 128
979	 * });
980	 * 
981	 * oQRCode.clear(); // Clear the QRCode.
982	 * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode.
983	 *
984	 * @param {HTMLElement|String} el target element or 'id' attribute of element.
985	 * @param {Object|String} vOption
986	 * @param {String} vOption.text QRCode link data
987	 * @param {Number} [vOption.width=256]
988	 * @param {Number} [vOption.height=256]
989	 * @param {String} [vOption.colorDark="#000000"]
990	 * @param {String} [vOption.colorLight="#ffffff"]
991	 * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] 
992	 */
993	QRCode = function (el, vOption) {
994		this._htOption = {
995			width : 256, 
996			height : 256,
997			typeNumber : 4,
998			colorDark : "#000000",
999			colorLight : "#ffffff",
1000			correctLevel : QRErrorCorrectLevel.H
1001		};
1002		
1003		if (typeof vOption === 'string') {
1004			vOption	= {
1005				text : vOption
1006			};
1007		}
1008		
1009		// Overwrites options
1010		if (vOption) {
1011			for (var i in vOption) {
1012				this._htOption[i] = vOption[i];
1013			}
1014		}
1015		
1016		if (typeof el == "string") {
1017			el = document.getElementById(el);
1018		}
1019
1020		if (this._htOption.useSVG) {
1021			Drawing = svgDrawer;
1022		}
1023		
1024		this._android = _getAndroid();
1025		this._el = el;
1026		this._oQRCode = null;
1027		this._oDrawing = new Drawing(this._el, this._htOption);
1028		
1029		if (this._htOption.text) {
1030			this.makeCode(this._htOption.text);	
1031		}
1032	};
1033	
1034	/**
1035	 * Make the QRCode
1036	 * 
1037	 * @param {String} sText link data
1038	 */
1039	QRCode.prototype.makeCode = function (sText) {
1040		this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
1041		this._oQRCode.addData(sText);
1042		this._oQRCode.make();
1043		this._el.title = sText;
1044		this._oDrawing.draw(this._oQRCode);			
1045		this.makeImage();
1046	};
1047	
1048	/**
1049	 * Make the Image from Canvas element
1050	 * - It occurs automatically
1051	 * - Android below 3 doesn't support Data-URI spec.
1052	 * 
1053	 * @private
1054	 */
1055	QRCode.prototype.makeImage = function () {
1056		if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) {
1057			this._oDrawing.makeImage();
1058		}
1059	};
1060	
1061	/**
1062	 * Clear the QRCode
1063	 */
1064	QRCode.prototype.clear = function () {
1065		this._oDrawing.clear();
1066	};
1067	
1068	/**
1069	 * @name QRCode.CorrectLevel
1070	 */
1071	QRCode.CorrectLevel = QRErrorCorrectLevel;
1072})();
1073// QRCODE END

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.