;(function( $ ){
	
	function SUEditor( elem ){
		var imageURL = '/layout/images/smilies/';
		
		this.elem = elem;
		this.smileys = [
			{'imageUrl': imageURL + 'smile01.gif', 'smiley': ':-)'},
			{'imageUrl': imageURL + 'smile02.gif', 'smiley': ':-('},
			{'imageUrl': imageURL + 'smile03.gif', 'smiley': ';-)'},
			{'imageUrl': imageURL + 'smile04.gif', 'smiley': ':-P'},
			{'imageUrl': imageURL + 'smile05.gif', 'smiley': '=-O'},
			{'imageUrl': imageURL + 'smile06.gif', 'smiley': ':-*'},
			{'imageUrl': imageURL + 'smile07.gif', 'smiley': '>:o'},
			{'imageUrl': imageURL + 'smile08.gif', 'smiley': '8-)'},
			{'imageUrl': imageURL + 'smile09.gif', 'smiley': ':-$'},
			{'imageUrl': imageURL + 'smile10.gif', 'smiley': ':-!'},
			{'imageUrl': imageURL + 'smile11.gif', 'smiley': ':-['},
			{'imageUrl': imageURL + 'smile12.gif', 'smiley': 'O:-)'},
			{'imageUrl': imageURL + 'smile13.gif', 'smiley': ':-/'},
			{'imageUrl': imageURL + 'smile14.gif', 'smiley': ":'C"},
			{'imageUrl': imageURL + 'smile15.gif', 'smiley': ':-X'},
			{'imageUrl': imageURL + 'smile16.gif', 'smiley': ':-D'},
			{'imageUrl': imageURL + 'smile17.gif', 'smiley': '#-)--~'},
			{'imageUrl': imageURL + 'smile18.gif', 'smiley': ':-c'},
			{'imageUrl': imageURL + 'smile19.gif', 'smiley': '8)'}
		];

		this.initUI();
		
	}
/*
 youtube
    [youtube]njNTmKDkl54[/youtube]
vimeo
    [vimeo]7809605[/vimeo]
soundcloud
    [soundcloud]heti-kohta-thin-air-original-mix[/soundcloud]
 */
	SUEditor.prototype = {
		
		initUI: function(){
			
			var self = this;
			
			this.quoteButton	= this.createButton( 'quote', 'quote' );
			this.imgButton 		= this.createButton( 'img', 'image' );
			this.urlButton		= this.createButton( 'url', 'url' );
			this.toolBar 		= $( '<div class="sueditor-tags-toolbar" />' );
			this.smileysBar 	= $('<div class="sueditor-smileys">');
			
			this.quoteButton.appendTo( this.toolBar );
			this.imgButton.appendTo( this.toolBar );
			this.urlButton.appendTo( this.toolBar );
			this.smileysBar.appendTo( this.toolBar );
			
			this.toolBar.insertAfter( this.elem) ;
			
			var smileyLen = this.smileys.length;
			while(smileyLen--){
				var smiley = self.smileys[smileyLen];
				this.smileysBar.append(self.createSmileyButton(smiley.imageUrl, smiley.smiley));	
			}
		
		},
		
		createButton: function( name, title ){
			
			var self = this;
			
			var button =$('<a href="#" class="sueditor-' + name + '">' + title + '</a>');
			button.bind( 'click.sueditor', function( event ){
				event.preventDefault();
				var car = self.elem.caret();
				var stringToWrap = car.text || '';
				var wrapped = self.addTags( stringToWrap, name );
				// iclude the tags, brackets and ending slash to the caret end position calculation
				var caretPos = car.end + ((name.length + 2) * 2 + 1); 
				self.elem.val( car.replace( wrapped ) );
				self.elem.focus().caret({start: caretPos, end: caretPos});
			});
			
			return button;
		},
		
		createSmileyButton: function( image, smiley ){
			var self = this;
			image = '<img src="'+image+'" alt="'+smiley+'" />';
			var smileyButton = $('<a href="#" class="sueditor-smiley">' + image + '</a>');
			smileyButton.bind( 'click.sueditor', function( event ){
				var caretPos = self.elem.caret().end + smiley.length;
				event.preventDefault();
				//cout(smiley);
				self.elem.val( self.elem.caret().replace( smiley ) );
				self.elem.focus().caret({start: caretPos, end: caretPos});
			});			 
			return(smileyButton);
		},
		
		addTags: function( snippet, tag ){
			return( '['+tag+']' + snippet + '[/' + tag + ']' );
		}
	};
	
	$.fn.sueditor = function(){
		return this.each( function(){
			var elem = $( this );
			var suEditor = new SUEditor( elem );
			elem.data( 'sueditor', { instance: suEditor } );
		});
	};
	
}( jQuery ));

