// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//                    All Rights Reserved,  Alen  Pokos                              //
//                        contact :  ghosap@ghosap.com                               //
//    Copying, editing, or deleting of any portion of this script is forbbiden.      //
// Distibution is allowed only with expressed and detailed perrmision from author.   //
//                 For any questions or permisions contact author.                   //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//                    Sva prava zadržana ,  Alen  Pokos                              //
//                        Kontakt :  ghosap@ghosap.com                               //
// Svako koriranje, promjena ili brisanje bilo kojeg djela ove skripte je zabranjeno //
//                  Distribucija dozvoljena samo sa odobrenjem autora.               //
//                    Za sva pitanja kontaktirajte autora                            //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

function rteLite(toid){
	try{
		rteLiteDraw(toid);
	}catch(err){
		alert("rteLite -> call:rteLiteDraw, " + err.description);
	}
}

function rteLiteDraw(toId){
	var to = document.getElementById(toId);
	var rteLite_id = toId;
	//draw toolbar
	var rteLiteToolbar = document.createElement('DIV');
	rteLiteToolbar.className = 'rteLiteToolbar';
	rteLiteToolbar.name = 'rteLiteToolbar';
	rteLiteToolbar.id = rteLite_id + '_rteLiteToolbar';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="Bold" class="rteLiteFuncButton rteLiteIcon rteLiteIconBold" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);"><img src="/ico/rteLite/bold.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="Italic" class="rteLiteFuncButton rteLiteIcon rteLiteIconItalic" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);"><img src="/ico/rteLite/italics.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="Underline" class="rteLiteFuncButton rteLiteIcon rteLiteIconUnderline" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);"><img src="/ico/rteLite/underline.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="Strikethrough" class="rteLiteFuncButton rteLiteIcon rteLiteIconStrikethrough" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);"><img src="/ico/rteLite/strikethrough.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="InsertOrderedList" class="rteLiteFuncButton rteLiteIcon rteLiteIconInsertOrderedList" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);"><img src="/ico/rteLite/list_ordered.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="rteLiteSelectFGColor" class="rteLiteFuncButton rteLiteIcon rteLiteIconSelectFGColor" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);" title="Select foreground color"><img src="/ico/rteLite/forecolor.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="rteLiteInsertHyperlink" class="rteLiteFuncButton rteLiteIcon rteLiteIconInsertHyperlink" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);" title="Insert Hyperlink"><img src="/ico/rteLite/insert_hyperlink.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="rteLiteInsertImage" class="rteLiteFuncButton rteLiteIcon rteLiteIconInsertImage" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);" title="Insert picture"><img src="/ico/rteLite/insert_picture.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="FontSize" class="rteLiteFuncButton rteLiteIcon rteLiteIconFontSize" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);" title="Select font size"><img src="/ico/rteLite/font_size.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="Code" class="rteLiteFuncButton rteLiteIcon rteLiteIconCode" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);" title="Code"><img src="/ico/rteLite/code.gif" alt=""></a>';
	rteLiteToolbar.innerHTML += '<a href="javascript://" name="Quote" class="rteLiteFuncButton rteLiteIcon rteLiteIconQuote" onclick="rteLiteToolbarFunEvent(&#039;'+rteLite_id+'&#039;,this);" title="Quote"><img src="/ico/rteLite/quote.gif" alt=""></a>';
	
	try{
		to.parentNode.insertBefore(rteLiteToolbar,to);
	}catch(err){
		alert("rteLiteDraw -> insertBefore, " + err.description);
	}
}

function rteLiteToolbarFunEvent(rteLiteId,bo){
	var to = document.getElementById(rteLiteId);
	var html  = '';
	var selection  = '';
	switch(bo.name){
		case 'rteLiteSelectFGColor':
			//prompt for color and insert html
			var color = prompt('Molimo unesite naziv ili kod (oznaku) boje :','');
			if(!color){break;}
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[color='+color+']'+selection+'[/color]',8+color.length,selection.length);
		break;
		case 'rteLiteInsertHyperlink':
			//prompt for url and if none selection optional label
			var linkURL = prompt('Molimo unesite web adresu:','http://');
			if(!linkURL){break;}
			var selection = rteLiteGetSelection(rteLiteId);
			defLabel = (selection.length<1) ?linkURL:selection;
			var label = prompt('Unesite labelu linka:',defLabel);
			if((label != linkURL || label.length<1 ) && label!=null){
				rteLiteInsertHtml(rteLiteId,'[url='+linkURL+']'+label+'[/url]');
			}else{
				rteLiteInsertHtml(rteLiteId,'[url]'+linkURL+'[/url]',5,linkURL.length);
			}
		break;
		case 'rteLiteInsertImage':
			//prompt for url and insert html
			var imageUrl = prompt('Molimo unesite web adresu slike :','http://');
			if(!imageUrl){break;}
			rteLiteInsertHtml(rteLiteId,'[img]'+imageUrl+'[/img]',5,imageUrl.length);
		break;
		case 'FontSize':
			//prompt for url and insert html
			var size = prompt('Molimo unesite veličinu fonta (u pikselima) :','');
			if(!size || size < 1 || size > 99){break;}
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[size='+size+']'+selection+'[/size]',7+size.length,selection.length);
		break;
		case 'Code':
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[code]'+selection+'[/code]',6,selection.length);
		break;
		case 'Quote':
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[quote]'+selection+'[/quote]',7,selection.length);
		break;
		case 'Bold':
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[b]'+selection+'[/b]',3,selection.length);
		break;
		case 'Italic':
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[i]'+selection+'[/i]',3,selection.length);
		break;
		case 'Underline':
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[u]'+selection+'[/u]',3,selection.length);
		break;
		case 'Strikethrough':
			selection = rteLiteGetSelection(rteLiteId);
			rteLiteInsertHtml(rteLiteId,'[s]'+selection+'[/s]',3,selection.length);
		break;
		case 'InsertOrderedList':
			var selection = rteLiteGetSelection(rteLiteId);
			var listElements = '';
			//ako je selekcija postoji onda to ide u li ako ne
			if(selection.length<1){
				while(newEl = prompt('Molimo unesite novi element liste :'+"\n"+'Prazno ili Cancel za prekid unosa.','')){
					listElements += '[*]' + newEl;
				}
			}else{
				var regex = new RegExp('([\r\n]+|^[\r\n]*)(?!\\[\\*\\]|\\[\\/?list)(?=[^\r\n])', 'gi');
				listElements = selection.replace(regex, '$1[*]');
			}
			
			if(listElements.length<1){break;}
			rteLiteInsertHtml(rteLiteId,'[list]'+listElements+'[/list]',0,listElements.length);
		break;
	}
	to.focus();
	return true;
}
function rteLiteGetSelection(rteLiteId){
	var to = document.getElementById(rteLiteId);
	
	var agt=navigator.userAgent.toLowerCase();
	var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)) ? 1 : 0;
	
	if(is_ie){
		try{
			var str = document.selection.createRange().text;
		}catch(err){
			alert("rteLiteGetSelection -> createRange, " + err.description);
		}
		
	}else{
		var startPos = to.selectionStart;
		var endPos = to.selectionEnd;
		var before = to.value.substr(0, startPos);
		var selected = to.value.substr(to.selectionStart, (to.selectionEnd - to.selectionStart));
		var after = to.value.substr(to.selectionEnd, (to.value.length - to.selectionEnd));
		var str = selected;
	}
	
	return str;
}
function rteLiteInsertHtml(rteLiteId,html,focusOffset,focusLength){
    var to = document.getElementById(rteLiteId);
	
	var agt=navigator.userAgent.toLowerCase();
	var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)) ? 1 : 0;
	
	if(is_ie){
		to.focus();
		try{
			var selection = document.selection.createRange();
		}catch(err){
			alert("rteLiteInsertHtml -> createRange, " + err.description);
		}
		if(selection.text.length == 0){
			focusLength = 0;
		}
		if(true){
			try{
				selection.text = html; //why ie loses reference here
			}catch(err){
				alert("rteLiteInsertHtml -> setText2Html, " + err.description);
			}
			try{
				selection.select();
				to.focus();
			}catch(err){
				alert("rteLiteInsertHtml -> selectionUpdate, " + err.description);
			}
			try{
				if(focusLength>0){ //ie problem, lost reference
					//selection.moveStart('character', focusOffset);
					//selection.setEndPoint('EndToStart',selection);
					//selection.moveEnd('character', focusLength);
				}else{ //ie problem, lost reference
					//selection.collapse(true);
					//selection.moveStart('character', focusOffset);
					//selection.setEndPoint('EndToStart',selection);
				}
			}catch(err){
				alert("rteLiteInsertHtml -> selectionMove, " + err.description);
			}
			selection.select();
			to.focus();
		}
	}else{
		var startPos = to.selectionStart;
		var endPos = to.selectionEnd;
		var before = to.value.substr(0, startPos);
		var selected = to.value.substr(to.selectionStart, (to.selectionEnd - to.selectionStart));
		var after = to.value.substr(to.selectionEnd, (to.value.length - to.selectionEnd));
		
		to.value = before + html + after;
		
		to.selectionStart = startPos + focusOffset;
		to.selectionEnd = startPos + focusOffset + focusLength;
		to.focus();
	}
}
