function bbStrong( caller) {
	bbEnvelope( caller, 'b');
}
function bbEm( caller) {
	bbEnvelope( caller, 'i');
}
/*function bbOl( caller) {
	bbListEnvelope( caller, 'ol');
}
*/
function bbUl( caller) {
	bbListEnvelope( caller, 'list');
}
function bbListEnvelope( caller, mark) {
	var topNode = caller.parentNode.parentNode.parentNode;
	var range = $( 'textarea', topNode).getSelection();
	if (range.text.length > 0 && false == bbValidate( range.text)) {
		bbPutError( topNode);
		return( false);
	}
	$( '.bbErr', topNode).slideUp();
	if (range.text.length > 0) {
		range.text = '[*]'+range.text.replace( /\n/g, '\n[*]');
	} else {
		range.text = '[*]pozycja pierwsza\n[*]pozycja druga';
	}
	$( 'textarea', topNode).replaceSelection( '['+mark+']\n'+range.text+'\n[/'+mark+']');
	return( true);
}
function bbEnvelope( caller, mark) {
	var topNode = caller.parentNode.parentNode.parentNode;
	var range = $( 'textarea', topNode).getSelection();
	if (range.text.length > 0 && false == bbValidate( range.text)) {
		bbPutError( topNode);
		return( false);
	}
	$( '.bbErr', topNode).slideUp();
	$( 'textarea', topNode).replaceSelection( '['+mark+']'+range.text+'[/'+mark+']');
}

function bbPutError( topNode) {
	if (bbCheckResult == '') {
		return( true);
	}
	$( '.bbErr span', topNode).text( bbCheckResult);
	$( '.bbErr', topNode).slideDown();
}

function bbAreaFocus( caller) {
//	$( 'fieldset', caller.parentNode).slideUp();
	$( '#bbACaption, #bbAHref', caller.parentNode).val( '');
}

var bbASel;
function bbA( caller) {
	var topNode = caller.parentNode.parentNode.parentNode;
	var range = $( 'textarea', topNode).getSelection();
	bbASel = range;
	if (range.text.length > 0) {
		if (false == bbValidate( range.text)) {
			bbPutError( topNode);
			return( false);
		}
		$('#bbACaption', topNode).val( range.text);
		if (range.text.substr( 0, 7) == 'http://') {
			$('#bbAHref', topNode).val( range.text);
		}
	}
	$( '.bbErr', topNode).slideUp();
	$( 'fieldset', topNode).slideToggle();
}
function bbASet( caller) {
	var topNode = caller.parentNode.parentNode;
	var caption = $( '#bbACaption', topNode).val();
	var href = $( '#bbAHref', topNode).val();
	$( '#bbACaption, #bbAHref', topNode).removeClass( 'invalid');
	var valid = true;
	if (caption == '') {
		$( '#bbACaption', topNode).addClass( 'invalid');
		valid = false;
	}
	if (href == '' || href.substr( 0, 7) != 'http://') {
		$( '#bbAHref', topNode).addClass( 'invalid');
		valid = false;
	}
	if (false == valid) {
		return( false);
	}
//	alert( bbASel.start+' '+bbASel.end);
	var out = '[url default="'+href+'"]'+caption+'[/url]';
	var val = $( 'textarea', topNode).val();
	val = val.substr( 0, bbASel.start)+out+val.substr( bbASel.end);
	$( 'textarea', topNode).val( val);
	$( '#bbACaption, #bbAHref', topNode).val( '');
	$( 'fieldset', topNode).slideUp();
}

var bbCheckResult = '';
function bbValidate( txt) {
	bbCheckResult = '';
	var p = txt.split( /(\[\/?(b|i|ol|ul|url)[^\]]*\])/g);
	var stack = [];
	for (var i=0; i<p.length; i++) {
/*		alert( p[i]);
		continue;
*/		if (p[i].substr( 0, 1) != '[' || p[i].substr( -1, 1) != ']') {
			continue;
		}
		if (p[i].substr( 1, 1) == '/') {
			var item = (stack.length > 0) ? stack.pop() : '';
			if (item != p[i+1]) {
				bbCheckResult = (i>0 && p[i-1] != '') ? p[i-1] : p[i-1];
				return( false);
			}
			continue;
		}
		stack.push(p[i+1]);
	}
	if (stack.length > 0) {
		bbCheckResult = (p[0] != '') ? p[0] : p[1];
		return( false);
	}
	return( true);
}

function blogPreview( caller) {
	var data = {content:$('#center textarea').val()};
	$.post( '/ajax/BlogBuilder/preview', data, blogPreviewClb);
	$('.bbPreview').html( '<img src="/img/ajax_loader.gif" alt="" />');
}
function blogPreviewClb( msg) {
	$('#center .bbPreview').html( msg);
}

function bbEmotShow( caller) {
	$('.emotIcons:hidden', caller.parentNode).slideDown( 'fast');
	$(document).one( 'mousedown', function() { bbEmotHide();});
}
function bbEmotHide() {
	$('.emotIcons:visible').slideUp( 'fast');
}
function bbEmot( icon, caller) {
	var topNode = caller.form;
	$( 'textarea', topNode).replaceSelection( '[emot icon="'+icon+'"]');
}
