/*! jQuery Pixel Select - v0.5.6 - 2015-05-07 * https://github.com/Bahlor/jQuery-Pixel-Related-Object-Selection * Copyright (c) 2015 Christian Weber; Licensed MIT */ (function(e,t,i,s){"use strict";function a(t,i){this.element=t,this.options=e.extend({},o,i),this._defaults=o,this._name=n,this.pixelmap=[],this.image=new Image,this.ctx=null,this.init()}var n="Pixelselect",o={over:null,out:null,click:null,ready:null,type:"img",precalc:!0,sublayers:!1,maxsubs:5,tolerance:40,debug:!1};a.prototype={init:function(){var t=i.createElement("canvas");return t.getContext?(e(this.element).data("precalc")!==s&&(this.options.precalc=e(this.element).data("precalc")===!0?!0:!1),e(this.element).data("sublayers")!==s&&(this.options.sublayers=e(this.element).data("sublayers")===!0?!0:!1),e(this.element).data("tolerance")!==s&&parseInt(e(this.element).data("tolerance"),null)>=0&&(this.options.tolerance=parseInt(e(this.element).data("tolerance"),null)),e(this.element).data("maxsubs")!==s&&parseInt(e(this.element).data("maxsubs"),null)>=0&&(this.options.maxsubs=parseInt(e(this.element).data("maxsubs"),null)),this.checkSrcType(),s):(console.log("Error: browser does not support canvas"),s)},checkSrcType:function(){var t=e(this.element);if(t.attr("src")!==s&&""!==t.attr("src")?this.image.src=t.attr("src"):t.data("img")&&t.data("img").length>4?this.image.src=t.data("img"):t.css("background-image")&&""!==t.css("background-image")&&(this.options.type="bg",this.image.src=t.css("background-image").replace("url(","").replace(")","")),""!==this.image.src){var i=this;this.image.onload=function(){if(!i.image.complete){var e=i;return setTimeout(function(){e.generatePixelMap()},500),s}i.generatePixelMap()}}},getCanvasRenderer:function(){var t=i.createElement("canvas");t.width=this.image.width,t.height=this.image.height;var s=t.getContext("2d");return s.drawImage(this.image,0,0),this.options.debug===!0&&e(t).appendTo("body"),s},generatePixelMap:function(){if(this.ctx=this.getCanvasRenderer(),this.options.precalc===!0){for(var t=(new Date).getTime(),i=0;this.image.width>i;i++)for(var a=0;this.image.height>a;a++){var n=this.ctx.getImageData(i,a,1,1);n.data[3]>this.options.tolerance&&(this.pixelmap[i]===s&&(this.pixelmap[i]=[]),this.pixelmap[i][a]=!0)}var o=(new Date).getTime();this.options.debug===!0&&console.log("Pixel map of "+this.image.src+" generated in "+(o-t)+" ms")}null!==this.options.ready&&this.options.ready(e(this.element)),this.attachEvents()},checkPixel:function(t,i){var a=e(this.element).offset();if(t=~~(t-a.left),i=~~(i-a.top),this.options.precalc===!0)return this.pixelmap[t]!==s&&this.pixelmap[t][i]!==s&&this.pixelmap[t][i]===!0?!0:!1;if(t===s||0>=t||i===s||0>=i||t>this.image.width||i>this.image.height)return!1;var n=this.ctx.getImageData(t,i,1,1);return n.data[3]>this.options.tolerance?!0:!1},checkSubLayers:function(t,a,n,o){e(this.element).hide();for(var r=[],h=!1,c=0;h===!1;){var l=i.elementFromPoint(t,a),u=e(l).triggerHandler("subcheck",[t,a]);u!==s&&(h=u,r.push(l)),h!==!0&&c>=this.options.maxsubs&&(h=!0),c++}r.length>0&&e(r[r.length-1]).trigger(o,[t,a]),e(this.element).show()},subcheckSubLayers:function(t,a,n){var o=this.checkPixel(a,n);if(o===!1)return!1;e(this.element).hide();var r=i.elementFromPoint(a,n),h=e(r).triggerHandler("subcheck",[a,n]);return e(this.element).show(),h!==s&&h!==!1?!0:!1},attachEvents:function(){var t=e(this.element),i=this;t.on("click",function(e,t,s){i._click(e,t,s)}),t.on("mousemove",function(e,t,s){i._over(e,t,s)}),t.on("mouseout",function(e,t,s){i._out(e,t,s)}),t.on("subcheck",function(e,t,s){return i.subcheckSubLayers(e,t,s)})},_click:function(t,i,a){console.log(this.image.src+" was clicked",t);var n=i===s?t.pageX:i,o=a===s?t.pageY:a,r=this.checkPixel(n,o,t);r!==!0&&this.options.sublayers===!0&&this.checkSubLayers(n,o,t,"click"),null!==this.options.click&&this.options.click(t,e(this.element),r),t.preventDefault()},_over:function(t,i,a){var n=i===s?t.pageX:i,o=a===s?t.pageY:a,r=this.checkPixel(n,o,t);r!==!0&&this.options.sublayers===!0&&this.checkSubLayers(n,o,t,"mousemove"),null!==this.options.over&&this.options.over(t,e(this.element),r),t.preventDefault()},_out:function(t,i,a){var n=i===s?t.pageX:i,o=a===s?t.pageY:a,r=this.checkPixel(n,o,t);r!==!0&&this.options.sublayers===!0&&this.checkSubLayers(n,o,t,"mouseout"),null!==this.options.out&&this.options.out(t,e(this.element),r),t.preventDefault()}},e.fn[n]=function(t){return this.each(function(){e.data(this,"plugin_"+n)||e.data(this,"plugin_"+n,new a(this,t))})}})(jQuery,window,document);