/*
 *	@author: Zsotyooo
 *	@description:
 *
 */

(function($){
	$.fn.advancedTextArea=function(options)
	{
		$(this).each(
			function(elementIndex)
			{
				if(this.tagName!='TEXTAREA' && this.tagName!='INPUT')
				{
					return;
				}
				new $advancedTextArea(elementIndex,this,options);
			}
		);
	}

	//konstruktor
	$.advancedTextArea=function(elementIndex,element,options)
	{
		this.element=element;
		this.elementIndex=elementIndex;

		this.options={};
		$.extend(
			this.options,
			$advancedTextArea.defaultoptions,
			options || {},
			$.parseJSON($(this.element).attr('data-textarea'))
		);
		
		this.text=$(element).val();
		this.options.lineHeight=parseInt($(element).css("lineHeight").replace('px',''));

		this.createElements();

		if(this.options.maxChars)this.calcNum();
		this.plusLines=0;
		if(this.options.maxPlusLines)this.calcHeight();
	}

	//shortcutok
	$advancedTextArea=$.advancedTextArea;
	$advancedTextArea.fn=$advancedTextArea.prototype={};
	$advancedTextArea.fn.extend = $advancedTextArea.extend = $.extend;

	//statikus v�ltoz�k, f�ggv�nyek:
	$advancedTextArea.extend(
	{
		defaultoptions: {
			maxChars: false,//számláló eddig megy
			maxPlusLines: false,//ennyi plusz sort adhat hozzá scrollozás helyett
			defaultText: false//ez a text jelenik meg ha még nem kattintott
		},

		//Itt adhat�ak meg a konstansok
		constants: {

		}
		//statikus fgvk
	});

	//Instance f�ggv�nyei
	$advancedTextArea.fn.extend({
		createElements: function()
		{
			var thisInstance=this;

			if(thisInstance.options.maxChars)
			{
				$(thisInstance.element).after(
					thisInstance.counter=$("<span></span>")
					.addClass("char-counter")
					.text(
						thisInstance.text.length
					)
				);
			}
			if(thisInstance.options.maxPlusLines)
			{
				$(thisInstance.element)
					.addClass("textarea-pluslines");
			}
			if(thisInstance.options.defaultText && $(thisInstance.element).val().length==0)
			{
				$(thisInstance.element).after(
					thisInstance.defText=$("<span></span>")
					.addClass("textarea-default-text")
					.text(
						thisInstance.options.defaultText
					)
					.click(
						function()
						{
							$(thisInstance.element).trigger("focus")
						}
					)
				)
				.one(
					'focus',
					function()
					{
						thisInstance.hideDefText(thisInstance)
					}
				);
				thisInstance.showDefText(thisInstance);
			}

			$(thisInstance.element).bind(
				'keyup focus blur',
				function()
				{
					if(thisInstance.options.maxChars)
					{
						thisInstance.cutChars();
						thisInstance.calcNum();
					}

					if(thisInstance.options.maxPlusLines)
					{
						thisInstance.calcHeight();
					}
				}
			);
		},
		calcNum: function()
		{
			var newnum=this.options.maxChars-this.text.length;
			if(newnum==0)
			{
				this.counter.addClass("char-counter-hl");
			}
			else
			{
				this.counter.removeClass("char-counter-hl");
			}
			this.counter.text(newnum);
		},
		cutChars: function()
		{
			this.text=$(this.element).val();
			if(this.text.length>this.options.maxChars)
			{
				$(this.element).val(
					this.text=this.text.substr(0, this.options.maxChars)
				)
			}
		},
		calcHeight: function()
		{
			if(this.plusLines<this.options.maxPlusLines && $(this.element).scrollTop()>0)
			{
				var h=parseInt($(this.element).css('height'))+this.options.lineHeight;
				$(this.element).css('height',h);
				this.plusLines++;
			}
		},
		hideDefText: function(thisInstance)
		{
			thisInstance.defText.hide();
		},
		showDefText: function(thisInstance)
		{
			if(!thisInstance.text.length) thisInstance.defText.show();
		}
	});
})(jQuery)


