/*
 * jQuery plugin: fieldSelection - v0.1.0 - last change: 2006-12-16
 * (c) 2006 Alex Brem <alex@0xab.cd> - http://blog.0xab.cd
   http://laboratorium.0xab.cd/jquery/fieldselection/0.2.3-test/jquery-fieldselection.js
 */

(function() {

	var fieldSelection = {

		getSelection: function() {

			var e = this.jquery ? this[0] : this;

			return (

				/* mozilla / dom 3.0 */
				('selectionStart' in e && function() {
					var l = e.selectionEnd - e.selectionStart;
					return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) };
				}) ||

				/* exploder */
				(document.selection && function() {

					e.focus();

					var r = document.selection.createRange();
					if (r == null) {
						return { start: 0, end: e.value.length, length: 0 }
					}

					var re = e.createTextRange();
					var rc = re.duplicate();
					re.moveToBookmark(r.getBookmark());
					rc.setEndPoint('EndToStart', re);

					return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text };
				}) ||

				/* browser not supported */
				function() {
					return { start: 0, end: e.value.length, length: 0 };
				}

			)();

		},

		replaceSelection: function() {

			var e = this.jquery ? this[0] : this;
			var text = arguments[0] || '';

			return (

				/* mozilla / dom 3.0 */
				('selectionStart' in e && function() {
					e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length);
					return this;
				}) ||

				/* exploder */
				(document.selection && function() {
					e.focus();
					document.selection.createRange().text = text;
					return this;
				}) ||

				/* browser not supported */
				function() {
					e.value += text;
					return this;
				}

			)();

		}

	};

	jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; });

})();

// BELOW AUTORED BY DAVID ANDRUS
(function($){
	
	$.fn.richText = function(options){
		
		/* make more flexible later
		var defaults = {
		};
		
		var options = $.extend(defaults, options)
        */

		return this.each(function(){
			
			var textbox = $(this);
			
			$(this)
			.wrap('<div class="editor"></div>') // wrap in editor div

			$(".editor").prepend('\
			<ul class="rt_actions">\
				<li><a href="#" class="rtbold" title="bold"><img src="/images/cc/te_bold.gif" alt="bold" /></a></li>\
				<li><a href="#" class="rtitalic" title="italic"><img src="/images/cc/te_italic.gif" alt="italic" /></a></li>\
				<li><a href="#" class="rtstrike" title="strike"><img src="/images/cc/te_strike.gif" alt="strike" /></a></li>\
				<li><a href="#" class="rtunder" title="underline"><img src="/images/cc/te_underline.gif" alt="underline" /></a></li>\
				<li><a href="#" class="rtlink" title="link"><img src="/images/cc/te_link.gif" alt="link" /></a></li>\
				<li><a href="/forum/editorlist/" class="rtmedia" title="from library"><img src="/images/cc/te_media.gif" alt="media" /></a></li>\
				<li><a href="#" class="rtyoutube" title="YouTube Video"><img src="/images/cc/te_youtube.gif" alt="you tube" /></a></li>\
			</ul>\
			')
			$(this).bind("focus blur change click mouseup hover select keydown keyup", function(){
				
				$(".preview").html($(this).attr("value"));
				$(".preview blockquote").each(function(){
					var citeArr = ($(this).attr('cite')).split('/');
					var username = citeArr[citeArr.length - 1];
					var userlink = '<a href="/users/'+ username +'/channel/">' + username + '</a>';
					var timestamp = $(this).attr('timestamp');
					var jsTime = new Date(timestamp * 1000);
					$(this).before('<div class="byline"><strong>Quote</strong> (' + userlink + ' at ' + jsTime.toLocaleString() +'):</div>')
				})
				
				//replace [media src="??"] with item placeholder and replace \n in textbox with <br /> in preview
				//var $rep_str = '<div style="height:300px;width:400px;background:#ddd"><h1>PLACEHOLDER</h1></div>';
				//var $full_text = ($(".preview").html()).replace(/\[media src="([0-9]+)"\]/g, $rep_str).replace(/\n/g, "<br />");
				
				//var $full_text = ($(".preview").html()).replace(/\n/g, "<br />");
				//$(".preview").html($full_text);
				
			}).click();
			
			$(".rt_actions a").click(function(e){
				e.preventDefault();
			})
			
			// tags for editing
			
			$('.rtbold').click(function(e){
				var range = $(textbox).getSelection();
				$(textbox).replaceSelection("<b>" + range.text + "</b>");
				$(textbox).click();
			})
			
			$('.rtitalic').click(function(e){
				var range = $(textbox).getSelection();
				$(textbox).replaceSelection("<i>" + range.text + "</i>");
				$(textbox).click();
			})
			
			$('.rtunder').click(function(e){
				var range = $(textbox).getSelection();
				$(textbox).replaceSelection("<u>" + range.text + "</u>");
				$(textbox).click();
			})
			
			$('.rtstrike').click(function(e){
				var range = $(textbox).getSelection();
				$(textbox).replaceSelection("<strike>" + range.text + "</strike>");
				$(textbox).click();
			})
			
			$('.rtlink').click(function(e){
				var range = $(textbox).getSelection();
				var url = prompt("Enter Link URL", "http://");
				if(url){
					var lText = (range.text > "") ? range.text : url;
					$(textbox).replaceSelection('<a href="'+ url +'">' + lText + '</a>');
					$(textbox).click();
				}
			});
			
			$('.rtyoutube').click(function(e){
				var range = $(textbox).getSelection();
				var url = prompt("Enter YouTube URL", "http://");
				if(url){
					var contentId = url.substr(url.indexOf("=") + 1);
					var lText = (range.text > "") ? range.text : url;
					$(textbox).replaceSelection('<media type="youtube" src="' + contentId + '"></media>');
					$(textbox).click();
				}
			})
			
			$(".rtmedia").facebox({closeImage   : '/include/vendor/facebox/closelabel.gif', loadingImage:'/include/vendor/facebox/loading.gif'});
			// attach behavior when facebox is revelaled
			$(document).bind('reveal.facebox', function() {
				var media_type, content_id;
				$("#facebox .page_numbers a").facebox()
				$("#editor_media a").click(function(e){
					
					var mediaType = $(this).attr("media_type");
					var contentId = $(this).attr("content_id");
					var userName = $(this).attr("username");
					var original = $(this).attr("original");
					
					if(mediaType == '2'){ //IMAGES
						var newPath;
						if(original.match(/\.gif$/i)){ // if GIF (necessary to support animated gifs)
							 newPath = original;
						} else {
							newPath = original.replace(/_[A-Z]{2}\.[A-Z]{3}$/i, '_dd.jpg');
						}
						$(textbox).replaceSelection('<div class="image"><img src="' + newPath + '" /></div>');
					} 
					
					if(mediaType == '4' || mediaType == '1'){ //VIDEOS and AUDIO
						$(textbox).replaceSelection('<media src="' + contentId + '"></media>');
					}
					
					$(textbox).click();
					$(document).trigger('close.facebox');
					e.preventDefault();
					
				});
			});
			
			$(this).keypress(function(e){
				if(e.which == 13){
					var range = $(textbox).getSelection();
					$(textbox).replaceSelection("<br />");
					$(textbox).click();
				}			
			});
        });

     };
})(jQuery);


