var edTags = new Array();
var edAcc = new Array();

function edTagObj( kS, pS, pE, kSE, kE, hS, hPS, hPE, hSE, hE) {
	this.kodeStart = kS;
	this.kodeParamStart = pS;
	this.kodeParamEnd = pE;
	this.kodeStartEnd = kSE;
	this.kodeEnd = kE;
	this.tagStart = hS; 	// open tag
	this.tagParamStart = hPS;
	this.tagParamEnd = hPE;
	this.tagStartEnd = hSE;
	this.tagEnd = hE;		// close tag
	}

function edAccObj( rf, ac, va, p1, p2) {
	this.ref_id = rf;
	this.access = ac;
	this.value = va;
	this.param1 = p1;
	this.param2 = p2;
	}

function AddClick( aEd, aIdx, aVal, aP1, aP2) {
	var ed_area = document.getElementById( aEd);
	if (( aP1) && ( aP1 != '') && ( aP1 != 'undefined')) { p1 = aP1; }
	else { p1 = ''; }
	if (( aP2) && ( aP2 != '') && ( aP2 != 'undefined')) { p2 = aP2; }
	else { p2 = ''; }
	var kode_st = edTags[ aIdx].kodeStart + aVal;
	if (( p1 + p2) != '') {
		 kode_st += edTags[ aIdx].kodeParamStart + p1 + edTags[ aIdx].kodeParamEnd + p2;
		 // problem med mellemrum i edTags - hvis een af paramtrene ikke findes, bliver det hele en lang smøre
		 }
	kode_st += edTags[ aIdx].kodeStartEnd;
	var kode_nd = edTags[ aIdx].kodeEnd;
	var LF_cnt = 0;
	ed_area.focus();
	if ( document.selection ) { 													// Browseren er IE - her tilføres variable, der gør det muligt at arbejde med IE som med FF etc.
		var arange = document.selection.createRange();
		var stored_range = arange.duplicate(); 											// Lav et kopi af den valgte tekst i textareaet 			
		stored_range.moveToElementText( ed_area );										// Sæt kopien til at høre sammen med textareaet
		stored_range.setEndPoint( 'EndToEnd', arange );									// Flyt slutpunktet af det ny til samme som slutpunktet af det gamle
		ed_area.selectionStart = stored_range.text.length - arange.text.length;	// Startpunktet af den oprindelige tekst er nu forskellen på længen af teksterne  
		ed_area.selectionEnd = ed_area.selectionStart + arange.text.length; 
		LF_cnt = CountLF( ed_area.value.substring( 0, ed_area.selectionStart));	// Antal lineskift før startpunktet
		// Indsætter ikke rigtigt lige efter CRLF - indsætter i stedet lige før
		} 
	if ( ed_area.selectionStart || ed_area.selectionStart == '0') {	//MOZILLA/NETSCAPE support
		var startPos = ed_area.selectionStart;
		var endPos = ed_area.selectionEnd;
		var cursorPos = endPos;
		var scrollTop = ed_area.scrollTop;
		txt_st = ed_area.value.substring( 0, startPos);
		txt_nd = ed_area.value.substring( endPos, ed_area.value.length);
		if (( startPos != endPos) && ( kode_nd != '')) {
			ed_area.value = txt_st + kode_st + ed_area.value.substring( startPos, endPos) + kode_nd + txt_nd;
			cursorPos += kode_st.length + kode_nd.length;
			}
		else {
			ed_area.value = txt_st + kode_st + kode_nd + txt_nd;
			cursorPos = startPos + kode_st.length;
			}
		ed_area.focus();
		SetCaretPos( ed_area, cursorPos - LF_cnt);
		ed_area.scrollTop = scrollTop;
		}
	else {
		ed_area.value += tag_st+tag_nd;
		}
	}

function SetCaretPos( aObj, aPos) {   
	if ( aObj.createTextRange) {   
		var arange = aObj.createTextRange();   
		arange.move( 'character', aPos);   
		arange.select();   
		}
	else if ( aObj.selectionStart) {   
		aObj.focus();   
		aObj.setSelectionRange( aPos, aPos);   
		}   
	}  

function CountLF( aStr) {
	cnt = 0;
	while ( aStr.indexOf( '\r') > -1) { 
		aStr = aStr.replace( '\r', ''); 
		cnt += 1;
		}
	return cnt;
	}


function FormStr( aStr) {
	for ( idx = 1; idx < edTags.length; idx++) {
		Tags = edTags[ idx];
		s_kode = Tags.kodeStart;
		ps_kode = Tags.kodeParamStart;
		pe_kode = Tags.kodeParamEnd;
		se_kode = Tags.kodeStartEnd;
		e_kode = Tags.kodeEnd;
		while (( kode_s_pos = aStr.indexOf( s_kode)) > -1) {
			aStr = aStr.replace( s_kode, Tags.tagStart);
			if (( se_kode != '') && (( kode_e_pos = aStr.indexOf( se_kode, kode_s_pos)) > -1)) {
				tmp_tag = Tags.tagParamStart;
				if ( ps_kode != '') { tmp_pos = aStr.indexOf( ps_kode, kode_s_pos); }
				else { tmp_pos = -1; }
				if (( tmp_pos > -1) && ( tmp_pos < kode_e_pos)) {
					aStr = aStr.replace( ps_kode, tmp_tag);
					tmp_tag = Tags.tagParamEnd;
					kode_e_pos = aStr.indexOf( se_kode, kode_s_pos);
					}
				else { tmp_tag += Tags.tagParamEnd; }
				if ( pe_kode != '') { tmp_pos = aStr.indexOf( pe_kode, kode_s_pos); }
				else { tmp_pos = -1; }
				if (( tmp_pos > -1) && ( tmp_pos < kode_e_pos)) {
					aStr = aStr.replace( pe_kode, tmp_tag);
					tmp_tag = Tags.tagStartEnd;
					}
				else { tmp_tag += Tags.tagStartEnd; }
				aStr = aStr.replace( se_kode, tmp_tag);
				}
			else { kode_e_pos = kode_s_pos; }
			if ( e_kode != '') { tmp_pos = aStr.indexOf( e_kode, kode_s_pos); }
			else { tmp_pos = -1; }
			if (( tmp_pos > -1) && ( tmp_pos > kode_e_pos)) { 
				aStr = aStr.replace( e_kode, Tags.tagEnd);
				}
			}
		}
	return aStr;
	}


function Str2Lines( aStr, tab_ant) {
	tabs = '';
	for ( idx = 0; idx < tab_ant; idx++) { tabs += "\t"; }
	while ( aStr.indexOf( '\r') > -1) { aStr = aStr.replace( '\r', ''); }
//	while ( aStr.indexOf( '\n') > -1) { aStr = aStr.replace( '\n', '</p>'+tabs+'<p>'); }
	while ( aStr.indexOf( '\n') > -1) { aStr = aStr.replace( '\n', '[BR]'); }
	while ( aStr.indexOf( '[BR]') > -1) { aStr = aStr.replace( '[BR]', '<br />\n'+tabs); }
	return aStr;
	}

function Lines2Paragrafs( aStr, tab_ant) {
	tabs = '';
	for ( idx = 0; idx < tab_ant; idx++) { tabs += "\t"; }
	while ( aStr.indexOf( '\r') > -1) { aStr = aStr.replace( '\r', ''); }
//	while ( aStr.indexOf( '\n') > -1) { aStr = aStr.replace( '\n', '</p>'+tabs+'<p>'); }
	while ( aStr.indexOf( '\n') > -1) { aStr = aStr.replace( '\n', '[BR]<p>'); }
	while ( aStr.indexOf( '[BR]') > -1) { aStr = aStr.replace( '[BR]', '<\p>\n'+tabs); }
	return '<p>'+aStr+'</p>';
	}


function EdtKey( aField, e) {
	evt = window.event ? window.event : e;
	ctl = evt.ctrlKey;
	car = evt.keyCode;
	if ( ctl && ( car != 0)) {
		for ( idx = 1; idx < edAcc.length; idx++) {
			if (( edAcc[ idx].access != '') && ( edAcc[ idx].access == String.fromCharCode( car).toUpperCase())) {
				if ( window.event) { event.returnValue = false; }
				else { e.preventDefault(); }
				AddClick( aField, edAcc[ idx].ref_id, edAcc[ idx].value, edAcc[ idx].param1, edAcc[ idx].param2);
				}
			}
		}
	}


