/**
* @author Falchenko Maxim aka be3
* @plugin_page http://tops.net.ua/jquery_pictotxt/
* @desc From Image To Text
* @version 1.0
* @example
* $(".text_image").pictotxt({imagesrc: 'text_bg.jpg'});
* @license free
**/

jQuery.fn.pictotxt = function(userpictotxt) {
    var options = {imagesrc: 'text_bg.jpg', filltype: 'repeat', invert: false, show_img: false}
    $.extend(options, userpictotxt);
	function WrapLetters(text_obj) {
		var text = text_obj.text();
		var html = '';
		for (var i=0; i<text.length; i++)
			html += '<span>'+text.charAt(i)+'</span>';
		text_obj.css({'position':'relative'}).html(html);
	}
	
	function CreateCanvasCopy(imagesrc, obj, filltype, fillcolor, invert, showimg) {
		WrapLetters(obj);
		var obj_w = obj.width();
		var obj_h = obj.height();
		var obj_pos = obj.offset();
		var cnv = $('<canvas class="txt_pic" width="'+obj_w+'" height="'+obj_h+'"></canvas>');
		obj.after(cnv);
		var canvas = cnv.css({'display':(showimg?'block':'none'),'left':obj_pos.left,'top':obj_pos.top,'position':'absolute','z-index':'-1'}).get(0);
		if (canvas.getContext) {
			var ctx = canvas.getContext('2d');
			img = new Image();
			img.onload = function() {
				switch(filltype) {
					case 'stretch': ctx.drawImage(img, 0, 0, obj_w, obj_h); break;
					case 'no-repeat': ctx.drawImage(img, 0, 0, img.width, img.height); break;
					default: 
					  	var ptrn = ctx.createPattern(img,'repeat');
						ctx.fillStyle = ptrn;
						ctx.fillRect(0,0,obj_w,obj_h);
				}
				ColorLetters(obj, invert);
			}
			img.src = imagesrc;
		} else {
			alert('Sorry, I want a canvas.');
		}
	}
	
	function ColorLetters(obj, invert){
		var data = new Array(0,123,0);
		var canvas = obj.next().get(0);
		if (canvas.getContext) {
			invert=invert?255:0;
			var ctx = canvas.getContext('2d');
			obj;
			obj.css({'visibility':'hidden'}).children().each(function() {
				pos = $(this).position();
				if (pos.left < canvas.width && pos.top < canvas.height) {
					data = ctx.getImageData(pos.left, pos.top, 1, 1).data;
					$(this).css({'color':'rgb('+Math.abs(invert-data[0])+','+Math.abs(invert-data[1])+','+Math.abs(invert-data[2])+')'});
				}
			}).css({'visibility':'visible'});
		}
	}
	return this.each(function(){
		CreateCanvasCopy(options.imagesrc, $(this), options.filltype, options.invert, options.show_img);
  });
}
