var eInsert_control;
var eInsert_HTML_into;

function init_HTML_toolbar(){
	eInsert_control = document.createElement( 'div' );
	eInsert_control.className = 'insert_control';
	if( window.bTypograph_script_loaded ){
		eInsert_control.appendChild( create_button( 'Типографить', function(){ eInsert_HTML_into.value = Typograph( eInsert_HTML_into.value, '' ); }, 'font-family: serif; margin-right: 1em;', 'Типографить' ) );
	}
	//eInsert_control.appendChild( create_button( 'Ж', function(){ insert_text_into_form_field( eInsert_HTML_into, '<strong>', '</strong>' ) }, 'font-weight: bold', 'Полужирный' ) );
	//eInsert_control.appendChild( create_button( 'К', function(){ insert_text_into_form_field( eInsert_HTML_into, '<em>', '</em>' ) }, 'font-style: italic', 'Курсив' ) );
	eInsert_control.appendChild( create_button( 'Ссылка...', function(){ var sURL = prompt( '', 'http://' ); if( sURL ){ insert_text_into_form_field( eInsert_HTML_into, '<a href="' + sURL + '">', 'ссылка</a>' ) } }, '', 'Гиперссылка' ) );
	document.getElementsByTagName( 'body' )[0].appendChild( eInsert_control );
	make_HTML_toolbar_acceptable( document );
}
function make_HTML_toolbar_acceptable( eThis ){
	var aeField = eThis.getElementsByTagName( 'textarea' );
	for( var i = 0 ; i < aeField.length ; i++ ){
		if( aeField[i].className.match( /(^|\s)x?HTML($|\s)/ ) ){
			cmnAdd_event( aeField[i], 'focus', define_HTML_into );
			//cmnAdd_event( aeField[i], 'blur', function(){ eInsert_control.style.display = 'none'; } );
		}
	}
	/*aeField = eThis.getElementsByTagName( 'input' );
	for( var i = 0 ; i < aeField.length ; i++ ){
		if( aeField[i].type.toLowerCase().match( /^(text)?$/i ) && aeField[i].parentNode.parentNode.className.match( /(^|\s)x?html($|\s)/ ) ){
			cmnAdd_event( aeField[i], 'focus', define_HTML_into );
		}
	}*/
}
function create_button( sValue, ptrOn, sStyle, sTitle ){
	var eBUTTON = document.createElement( 'input' );
	eBUTTON.type = 'button';
	eBUTTON.value = sValue;
	eBUTTON.title = sTitle;
	if( eBUTTON.runtimeStyle ){
		eBUTTON.runtimeStyle.cssText += ';' + sStyle;
	}else{
		eBUTTON.setAttribute( 'style', eBUTTON.style + ';' + sStyle );
	}
	eBUTTON.onclick = ptrOn;
	return eBUTTON;
}
function define_HTML_into(){
	eInsert_HTML_into = this;
	eInsert_HTML_into.parentNode.insertBefore( eInsert_control, eInsert_HTML_into );
	eInsert_control.style.display = 'block';
}
function insert_text_into_form_field( eField, sBefore, sAfter ){
	if( !sAfter ){
		sAfter = '';
	}
	if( eField.setSelectionRange ){
		var sText = eField.value.substring( eField.selectionStart, eField.selectionEnd );
		if( sAfter.length && sText.match( /\n/ ) ){
			sText = sText.replace( /([\x0d\x0a]+)/g, sAfter + '$1' + sBefore )
		}
		var iPosition = eField.selectionStart + sBefore.length + sText.length + sAfter.length;
		eField.value = eField.value.substring( 0, eField.selectionStart ) + sBefore
		               + sText + sAfter
		               + eField.value.substring( eField.selectionEnd, eField.value.length );
		eField.selectionStart = iPosition;
		eField.selectionEnd = eField.selectionStart;
	}else if( document.selection && document.selection.createRange ){
		eField.focus();
		var oRange = document.selection.createRange();
		oRange.text = sBefore + ( sAfter.length && oRange.text.match( /\n/ ) ? oRange.text.replace( /([\x0d\x0a]+)/g, sAfter + '$1' + sBefore ) : oRange.text ) + sAfter;
		oRange.select();
	}
	eField.focus();
}
function cmnAdd_event( eOn, sEvent_type, ptrFunction ){
	if( eOn.addEventListener ){
		eOn.addEventListener( sEvent_type, ptrFunction, false );
	}else{
		if( !ptrFunction.$$guid ){ ptrFunction.$$guid = cmnAdd_event.guid++; }
		if( !eOn.events ){ eOn.events = {}; }
		var aHandler = eOn.events[sEvent_type];
		if( !aHandler ){
			aHandler = eOn.events[sEvent_type] = {};
			if( eOn['on' + sEvent_type] ){ aHandler[0] = eOn['on' + sEvent_type]; }
			eOn['on' + sEvent_type] = cmnHandle_event;
		}
		aHandler[ptrFunction.$$guid] = ptrFunction;
	}
}
cmnAdd_event.guid = 1;

function cmnRemove_event( eOn, sEvent_type, ptrFunction ){
	if( eOn.removeEventListener ){
		eOn.removeEventListener( sEvent_type, ptrFunction, false );
	}else if( eOn.events && eOn.events[sEvent_type] && ptrFunction.$$guid ){
		delete eOn.events[sEvent_type][ptrFunction.$$guid];
	}
}

function cmnHandle_event( event ){
	event = event || cmnFixe_event( window.event );
	var returnValue = true;
	var aHandler = this.events[event.type];
	for( var i in aHandler ){
		if( !Object.prototype[i] ){
			this.$$ptrFunction = aHandler[i];
			if( this.$$ptrFunction(event) === false ){ returnValue = false; }
		}
	}
	if( this.$$ptrFunction ){ this.$$ptrFunction = null; }

	return returnValue;
}

function cmnFixe_event( event ){
	event.preventDefault = cmnFixe_event.preventDefault;
	event.stopPropagation = cmnFixe_event.stopPropagation;
	return event;
}
cmnFixe_event.preventDefault = function(){
	this.returnValue = false;
}
cmnFixe_event.stopPropagation = function(){
	this.cancelBubble = true;
}

cmnAdd_event( window, 'load', function(){ if( !eInsert_control )init_HTML_toolbar(); } );
