document.observe('dom:loaded', function(){
	fhSmilies.init();
	
});



var fhSmilies = {
	txtarea: 'message',					//ID of the textarea
	messages: 'li.message p.text',		//Identifier for smiley replacement
	smiliesUL: 'smilies',				//UL to fill with smilies
	smilies: [	//Array with smilies (shortcut, regexpr, file)
	          	[':)',':\\)', 'smile.gif'],
	          	[':d',':d|:D', 'largesmile.gif'],
	          	[';)',';\\)', 'blink.gif'],
	          	[':(',':\\(', 'sad.gif'],
	          	[':$',':\\$', 'shy.gif'],
	          	[':x',':x|:X', 'frustrated.gif'],
	          	[':s',':s|:S', 'sick.gif'],
	          	[':p',':p|:P', 'tong.gif'],
	          	[':-ppp',':-ppp|:-PPP', 'tong2.gif'],
	          	[':licking:',':licking:', 'tong3.gif'],
	          	['(y)','\\(y\\)|\\(Y\\)', 'thumb.gif'],
	          	['(l)','\\(l\\)|\\(L\\)', 'love.gif'],
	          	[':angry:', ':angry:', 'angry.gif'],
	          	['(()', '\\(\\(\\)', 'confused.gif'],
	          	[':takepicture:', ':takepicture:', 'takepicture.gif'],
	          	[':hearts:', ':hearts:', 'hearts.gif'],
	          	['(k)', '\\(k\\)', 'kiss.gif'],
	          	[':hugging:', ':hugging:', 'hugging.gif'],
	          	[':teddy:', ':teddy:', 'teddy.gif']
	],
	
	init: function(){
   	fhSmilies.findAndReplace(fhSmilies.messages);
    if($(fhSmilies.smiliesUL)){
    	fhSmilies.fillUL();
    	fhSmilies.findAndReplace('ul#'+fhSmilies.smiliesUL+' li');
  		$$('ul#'+fhSmilies.smiliesUL+' li').each(function(el){
  			el.observe('click', function(){
  				fhSmilies.insert(el);
  			});
  		});
    }
	},
	insert: function(el){
		var txtarea = $(fhSmilies.txtarea);
		smiley = ' ' + el.id + ' ';
		fhSmilies.insertAtCursor(txtarea, smiley);
	},
	insertAtCursor: function (myField, myValue) {
	    if (document.selection) {
	        myField.focus();
	        sel = document.selection.createRange();
	        sel.text = myValue;
	    } else if (myField.selectionStart || myField.selectionStart == '0') {
	        myField.focus();
	        var startPos = myField.selectionStart;
	        var endPos = myField.selectionEnd;
	        myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
	        myField.setSelectionRange(endPos+myValue.length, endPos+myValue.length);
	    } else {
	        myField.value += myValue;
	    }
	},
	findAndReplace: function(identifier){
		$$(identifier).each(function(el){
			fhSmilies.smilies.each(function(smiley){
				el.innerHTML = el.innerHTML.gsub(smiley[1],'<img src="'+imageUrl+'/smilies/'+smiley[2]+'" alt="'+smiley[0]+'" style="display: inline;" />')
			});
		});
	},
	fillUL: function(){
		fhSmilies.smilies.each(function(smiley){
			$(fhSmilies.smiliesUL).insert({
			 'bottom':'<li id="'+smiley[0]+'">'+smiley[0]+'</li>'
		  });
		});
	}
}