// MAIN.LIB.JS
// Libreria di funzioni Javascript per la gestione dei form di main.lib.php.
//
// autore: Roberto Pasini - bus3@artesottomarina.it
// Licenza GNU/GPL v.2: usate/copiate/modificate ma mantenete intatto questo header. Se trovate bug, ditemelo per e-mail.
//
// v2.10

/***************** init ****************/
//tasti
function b3_GenerateKeys(target) {
	keys='<div class="mainbkg">'
		+'<img src="./img/prev.gif" name="prev" id="prev_'+target+'" onClick="b3_swapDesignMode(\''+target+'\');" class="mainbtn" style="float:right;" />'
		+'<img src="./img/b.gif" onClick="SetSimpleTag(\''+target+'\',\'<strong>\',\'</strong>\')" alt="Grassetto" class="mainbtn" />'
		+'<img src="./img/i.gif" onClick="SetSimpleTag(\''+target+'\',\'<em>\',\'</em>\')" alt="Corsivo" class="mainbtn" />'
		+'<img src="./img/u.gif" onClick="SetSimpleTag(\''+target+'\',\'<u>\',\'</u>\')" alt="Sottolineato" class="mainbtn" /> '
		+'<img src="./img/ul.gif" onClick="SetList(\''+target+'\',\'ul\')" alt="Lista" class="mainbtn" />'
		+'<img src="./img/ol.gif" onClick="SetList(\''+target+'\',\'ol\')" alt="Lista Numerata" class="mainbtn" /> '
		+'<img src="./img/a.gif" onClick="SetA(\''+target+'\')" alt="Collegamento" class="mainbtn" /> '
		+'<img src="./img/mailto.gif" onClick="SetMailto(\''+target+'\')" alt="E-mail" class="mainbtn" /> '
		+'<img src="./img/+.gif" onClick="ChangeHeight(\''+target+'\',100);" alt="-" />'
		+'<img src="./img/-.gif" onClick="ChangeHeight(\''+target+'\',-100);" alt="+" />'
		+'</div>';
	return keys;
	}


//swappa la visualizzazione sorgente/anteprima
function b3_swapDesignMode(target) {
	var textarea=document.getElementById(target);
	var iframe=document.getElementById('iframe_'+target);
	if(textarea.style.display=='none') {
		textarea.style.width=iframe.style.width;
		textarea.style.height=iframe.style.height;
		document.getElementById('prev_'+target).src='./img/prev.gif';
		textarea.style.display='inline';
		iframe.style.display='none';
		cnt=iframe.contentWindow.document.body.innerHTML; // copio
		cnt=b3_IframeToTextarea(cnt); // pulisco
		textarea.value=cnt; // incollo
		}
	else {
		iframe.style.width=textarea.style.width;
		iframe.style.height=textarea.style.height;
		document.getElementById('prev_'+target).src='./img/source.gif';
		textarea.style.display='none';
		iframe.style.display='inline';
		cnt=textarea.value; // copio
		cnt=b3_TextareaToIframe(cnt); // pulisco
		iframe.contentWindow.document.body.innerHTML=cnt; // incollo
		}
	}

function b3_onsubmit() {
	for(i=0;document.getElementsByTagName('div')[i];i++) {
		div=document.getElementsByTagName('div')[i];
		if(div.className=="RichContainer") {
			id=div.getElementsByTagName('textarea')[0].id;
			b3_swapDesignMode(id);
			}
		}
	}


/***************** azioni ****************/
//cambia l'altezza della textarea
function ChangeHeight(elementID,pixels) {
	document.getElementById(elementID).style.display!='none' ? target=document.getElementById(elementID) : target=document.getElementById('iframe_'+elementID);
	h=target.style.height;
	h=h.replace(/[^[0-9]]*/g,'');
	finalSize=Number(h)+pixels;
	if(finalSize>0) target.style.height=finalSize+"px";
	}

//setta i tag semplici
function SetSimpleTag(elementID,addBefore,addAfter) {
	target=document.getElementById(elementID);
	if(target.style.display=='none') {
		var obj=document.getElementById('iframe_'+elementID);
		if(addBefore=='<strong>') formatHTML(obj,'bold',false);
		else if(addBefore=='<em>') formatHTML(obj,'italic',false);
		else if(addBefore=='<u>') formatHTML(obj,'underline',false);
		}
	else {
		var obj=document.getElementById(elementID);
		formatSource(obj,addBefore,addAfter);
		}
	}

//link
function SetA(elementID) {
	textarea=document.getElementById(elementID);
	iframe=document.getElementById('iframe_'+elementID);
	if(textarea.style.display=='none') {
		var url=prompt('Inserisci l\'indirizzo che intendi collegare','http://');
		formatHTML(iframe,'createlink',url);
		}
	else {
		var url=prompt('Inserisci l\'indirizzo che intendi collegare','http://');
		if(url) {
			var descr=prompt('Inserisci una descrizione breve (facoltativo)','');
			if(descr) { url+='" title="'+descr.replace(/"/g,'&quot;'); }
			if(confirm('Vuoi che il collegamento si apra\nin una nuova finestra?','N')) url+='" target="_blank';
			url='<a href="'+url+'">';
			SetSimpleTag(elementID,url,'</a>');
			}
		}
	}

//email
function SetMailto(elementID) {
	textarea=document.getElementById(elementID);
	iframe=document.getElementById('iframe_'+elementID);
	if(textarea.style.display=='none') {
		var url=prompt('Inserisci l\'indirizzo e-mail da collegare','');
		formatHTML(iframe,'createlink','mailto:'+url);
		}
	else {
		var url=prompt('Inserisci l\'indirizzo e-mail da collegare','');
		if(url) {
			url='<a href="mailto:'+url+'">';
			SetSimpleTag(elementID,url,'</a>');
			}
		}
	}
	
//liste
function SetList(elementID,type) {
	textarea=document.getElementById(elementID);
	iframe=document.getElementById('iframe_'+elementID);
	if(textarea.style.display=='none') {
		if(type=='ul') formatHTML(iframe,'insertunorderedlist',false);
		else if(type=='ol') formatHTML(iframe,'insertorderedlist',false);
		}
	else {
		var list="<"+type+">\n";
		var listNumber=prompt('Quanti elementi vuoi inserire nella lista?','1');
		if(listNumber) {
			for(iii=1;listNumber>=iii;iii++) {
				list+="<li>"+prompt(iii+'° punto della lista:','')+"</li>\n";
				}
			list+="</"+type+">\n";
			SetSimpleTag(elementID,'',list);
			}
		}
	}

/***************** sottoazioni ****************/
// Formatta il testo
function formatHTML(where,what,opt) {
	if(where.contentDocument) where.contentDocument.execCommand('styleWithCSS', false, false);
	where.contentWindow.document.execCommand(what,false,opt);
	where.contentWindow.focus();
	}
function formatSource(obj,addBefore,addAfter) {
	// Netscape, Mozilla, Firefox
	if(typeof(obj.selectionStart)!="undefined")	{
		obj.focus();
		var start_selection=Math.min(obj.selectionStart, obj.selectionEnd),
			end_selection=Math.max(obj.selectionStart, obj.selectionEnd);
		var startText=(obj.value).substring(0,start_selection);
		var selectedText=(obj.value).substring(start_selection,end_selection);
		var endText=(obj.value).substring(end_selection,obj.textLength);
		var scrollTop=obj.scrollTop;
		obj.value=startText+addBefore+selectedText+addAfter+endText;
		obj.selectionStart=start_selection;
		obj.selectionEnd=start_selection+addBefore.length+selectedText.length+addAfter.length;
		obj.scrollTop=scrollTop;
		}
	// Internet Explorer
	if(obj.createTextRange)	{
		var selectedText=document.selection.createRange().text;
		obj.focus(obj.caretPos);
		obj.caretPos=document.selection.createRange();
		obj.caretPos.text=addBefore+selectedText+addAfter;
		obj.caretPos.moveStart("character",(addBefore.length+selectedText.length+addAfter.length)*-1);
		obj.caretPos.select();
		}
		obj.focus();
	}

/* init della modalità html */
function b3_richEditOn() {
	for(i=0;document.getElementsByTagName('div')[i];i++) {
		div=document.getElementsByTagName('div')[i];
		if(div.className=="TextContainer"||div.className=="RichContainer") {
			target=div.getElementsByTagName('textarea')[0].name;
			div.innerHTML=b3_GenerateKeys(target)+div.innerHTML; //attivo i tasti
			}
		if(div.className=="RichContainer") {
			target=div.getElementsByTagName('textarea')[0].name;
			div.innerHTML+=b3_GenerateIframe('iframe_'+target);
			b3_editOn(document.getElementById('iframe_'+target));
			}
		}

	for(i=0;document.forms[i];i++) {
		document.forms[i].onsubmit=b3_onsubmit;
		}
	}
//crea l'iframe
function b3_GenerateIframe(elementID) {
	//iframe='<iframe id="'+elementID+'" onload="b3_editOn(this);"></iframe>';
	iframe='<iframe id="'+elementID+'"></iframe>';
	return iframe;
	}
//attiva la modalita' editing wysiwyg
function b3_editOn(element) {
	element.contentWindow.document.designMode="on";
	element.contentWindow.document.open();
	element.contentWindow.document.write('<HTML><BODY MONOSPACE STYLE="background-color:#FFF;font:10pt Arial,Verdana,sans-serif"></HTML></BODY>');
	element.contentWindow.document.close();
	if(element.contentDocument) element.contentDocument.execCommand('styleWithCSS',false,false);
	b3_swapDesignMode(element.id.substring(7));
	}

/********* pulizia del testo **********/
function b3_IframeToTextarea(cnt) {
	cnt=cnt.replace(/\n/gi,' ');
	cnt=cnt.replace(/\t/gi,'');
	cnt=cnt.replace(/<br.*?>/gi,"\n");
	cnt=cnt.replace(/<\/?p.*?>/gi,'');
	cnt=cnt.replace(/<b.*?>/gi,'<strong>');
	cnt=cnt.replace(/<\/b>/gi,'</strong>');
	cnt=cnt.replace(/<i.*?>/gi,'<em>');
	cnt=cnt.replace(/<\/i>/gi,'</em>');
	cnt=cnt.replace(/<ol.*?>/gi,'<ol>\n');
	cnt=cnt.replace(/<ul.*?>/gi,'<ul>\n');
	cnt=cnt.replace(/<\/li>/gi,'</li>\n');
	cnt=cnt.replace(/<\/ol>/gi,'</ol>\n');
	cnt=cnt.replace(/<\/ul>/gi,'</ul>\n');
	cnt=cnt.replace(/\s*<thead/gi,"<thead");
	cnt=cnt.replace(/\s*<\/thead/gi,"</thead");
	cnt=cnt.replace(/\s*<tbody/gi,"<tbody");
	cnt=cnt.replace(/\s*<\/tbody/gi,"</tbody");
	cnt=cnt.replace(/\s*<tr/gi,"<tr");
	cnt=cnt.replace(/\s*<\/tr/gi,"</tr");
	cnt=cnt.replace(/\s*<td/gi,"<td");
	cnt=cnt.replace(/\s*<\/td/gi,"</td");
	cnt=cnt.replace(/\s*<th/gi,"<th");
	cnt=cnt.replace(/\s*<\/th/gi,"</th");
	cnt=cnt.replace(/\s*<col/gi,"<col");
	cnt=cnt.replace(/\s*<\/col/gi,"</col");
	cnt=cnt.replace(/&nbsp;/gi," ");
	cnt=cnt.replace(/<\/?o:p.*?>/gi," ");
	cnt=cnt.replace(/<\/?font.*?>/gi," ");
	cnt=cnt.replace(/<\/?span.*?>/gi," ");
	cnt=cnt.replace(/<\/?img.*?>/gi," ");
	cnt=cnt.replace(/<\/?blockquote?>/gi," ");
	return cnt;
	}
function b3_TextareaToIframe(cnt) {
	cnt=cnt.replace(/<strong>/gi,'<b>');
	cnt=cnt.replace(/<\/strong>/gi,'</b>');
	cnt=cnt.replace(/<em>/gi,'<i>');
	cnt=cnt.replace(/<\/em>/gi,'</i>');
	cnt=cnt.replace(/<ol>\n/gi,'<ol>');
	cnt=cnt.replace(/<ul>\n/gi,'<ul>');
	cnt=cnt.replace(/<\/li>\n/gi,'</li>');
	cnt=cnt.replace(/<\/ol>\n/gi,'</ol>');
	cnt=cnt.replace(/<\/ul>\n/gi,'</ul>');
	cnt=cnt.replace(/\n/g,"<br>");
	cnt=cnt.replace(/  /g," &nbsp;");
	return cnt;
	}