/* javascript for tools */

var t;
var code;

function ge(s) {
	return document.getElementById(s);
}
// generates navigation/header
function generateNav() {
	var myNav = '';
	if(! ge('nav') ) {
		myNav = document.createElement('div');
		myNav.id = 'nav';
		myNav.innerHTML = '<!-- Navigation -->';
		
		document.body.insertBefore(myNav,document.body.childNodes[0]);
	} else {
		myNav = ge('nav');
	}
	//,'file_manager'
	var arrNav = new Array('cfscripter','changeDelims','javascript','lcase','preview_html');
	for (i in arrNav) {
		var myA = document.createElement('a');
		myA.setAttribute('href',arrNav[i] + '.cfm');
		myA.innerHTML = arrNav[i];
		var myLI = document.createElement('li');
		myLI.appendChild(myA);
		myNav.appendChild(myLI);
	}
	try {
		selectPage();
	} catch(e) {}
}

function changeDelims() {
	var out = ge('text_orig').value;
	var searchFor = new RegExp(ge('delim_orig').value, 'gi');
	var replaceWith = new String(ge('delim_new').value);

	out = out.replace(searchFor,replaceWith);		// replace original delimiters with new one
	out = addTabs(out);

	ge('text_new').value = out;
}

function changeCF() {
	var o = ge('oldcftags');
	var n = ge('newcfscript');
	var out = o.value;

	out = out.replace(/<?cfset ([^>]*)\/?>/gi,'$1;');	// replace cfsets
	out = out.replace(/(\S)=(\S)/g,'$1 = $2');			// pad equal sign
	out = out.replace(/\b\s+=/gi, ' =');				// replace long white spaces before = sign
	out = out.replace(/=\s+\b/gi, '= ');				// replace long white spaces after = sign
	out = out.replace(/\b\s+\b/gi, ' ');				// replace long white spaces between words
	out = out.replace(/\<\!\-+ /gi,'// ');				// replace comments
	out = out.replace(/--->/gi,'');						// replace comments
	out = out.replace(/<cfswitch expression\s?=\s?('|")([^'"]*)('|")\s?>/gi,'switch ($2) {').replace(/#/gi,'');	// replace cfswitch
	out = out.replace(/<cfcase value\s?=\s?('|")([^'"]*)('|")[^>]*>/gi,'case \'$2\':');	// replace cfcase
	out = out.replace(/<\/cfcase>/gi,'\tbreak;');		// replace /cfcase
	out = out.replace(/<cfdefaultcase>/gi,'default:');		// replace cfdefaultcase
	out = out.replace(/<\/cfdefaultcase>/gi,'\tbreak;');		// replace /cfdefaultcase
	out = out.replace(/<\/cfswitch>/gi,'}');		// replace /cfswitch
	out = out.replace(/\s*\/;/gi,';');				// replace /; with ;
	out = out.replace(/<cfif([^>]*)>/gi,'if ($1) {');		// replace cfif
	out = out.replace(/<cfelse>/gi,'} else {');			// replace cfelse
	out = out.replace(/<\/cfif>/gi,'}');				// replace /cfif
	//out = out.replace(/\/?>/gi,';\r');
	out = addTabs(out);

	n.value = out;
}
function addTabs(str) {
	if(ge('tabs').value > 0) {
		for(var i=0;i<ge('tabs').value;i++) {
			str = str.replace(/\n/gi,'\n\t');
		}
	}
	return str;
}
function makeMeLow(obj) {
	ge('newText').value=obj.value.toLowerCase();
}
function loopThru() {
	var tempHTML = '';
	var myObj = eval(ge('obj').value);
	for (i in myObj) {
		thisLink0 = '';
		thisLink1 = '';	// start end links
		try {
			if(myObj[i]) {
				thisLink0 = '<' + 'a href=javascript:setObj(\'' + i + '\')>'; 
				thisLink1 = '<' + '/a>';
				tempHTML += '<' + 'tr><' + 'td>' + thisLink0 + i + thisLink1 + '<' + '/td>';
				tempHTML += '<' + 'td><' + 'pre>' + myObj[i] + '<' + '/pre><' + '/td><' + '/tr>';
			}
		} catch(e) {}
	}
	var thd = '<' + 'thead><' + 'tr><' + 'th>element<' + '/th><' + 'th>value<' + '/th><' + '/tr><' + '/thead>';
	tempHTML = '<' + 'table class=\'sortable report\'>' + thd + tempHTML + '<' + '/table>';

	ge('output').innerHTML = tempHTML;
}

function setObj(str) {
	ge('obj').value = ge('obj').value + '.' + str;
	try {
		loopThru();
	} catch(e) {}
}




/*
From http://fundisom.com/live_preview.html
*/

function live_preview() {
	prev = window.open("","preview");
	prev.document.open();
	prev.document.writeln("<html><head><title>live preview window</title></head>");
	prev.document.writeln("<body style=\"background: #ffffff; font: 12px normal Verdana, Arial, sans-serif;\">");
	prev.document.writeln(code);
	prev.document.writeln("</body></html>");
	prev.document.close();
}

// this introduces some delay so that the code is not re-evaluated at every  keystroke.
function delay_live_preview(thecode)  {
	if(t) { window.clearTimeout(t) }
	code = thecode;
	t = window.setTimeout("live_preview()",400);
}


function AddText(form, Action) {
	var AddTxt="";
	var txt="";
	var txt1="";
	var txt2="";
	var txt3="";

	switch(Action) {

	case 1:
		txt=prompt("bigger text","");
		if(txt!=null)
			AddTxt="<span style=\"font-size: 1.5em;\">"+txt+"</span>";
		break;
	case 2:
		txt=prompt("bold text","");
		if(txt!=null)
			AddTxt=" <strong>"+txt+"</strong> ";
		break;
	case 3:
		txt=prompt("italic text","");
		if(txt!=null)
			AddTxt=" <em>"+txt+"</em> ";
		break;
	case 4:
		txt=prompt("URL of the link.","http://");
		if(txt!="http://")
		{
			AddTxt=" <" + "a href=\""+txt+"\"";
			txt1=prompt("target of the Link \r(blank for new window, name of frame or leave empty)","");
			if(txt1!="")
			{
				AddTxt+=" target=\""+txt1+"\">";
			}else{
				AddTxt+=">";
			}
			txt2=prompt("linked text","");
			if(txt1!=null)
			{
				AddTxt+=txt2+"<" + "/a> ";
			}
		}
		break;
	case 5:
		txt=prompt("email-adress.","");
		if(txt!="")
		{
			AddTxt=" <" + "a href=\"mailto:"+txt+"\">";
			txt=prompt("linked text","send email to ");
			AddTxt+=txt+"<" + "/a> ";
		}
		break;
	case 6:
		txt=prompt("URL of image.","http://");
		if(txt!="http://")
		{
			AddTxt="<" + "img src=\""+txt+"\"";
			txt=prompt("alternate text","");
			if(txt!="")
			{
				AddTxt+=" alt=\""+txt+"\"";
			}
			txt1=prompt("alignment \r(left, center, right)","");
			if(txt1!="")
			{
				AddTxt+=" align=\""+txt1+"\"";
			}
			txt2=prompt("distance to text in pixel","10");
			if(txt2!="")
			{
				AddTxt+=" vspace=\""+txt2+"px\" hspace=\""+txt2+"px\"";
			}
			txt3=prompt("width of image \r(for original size leave empty,\ror enter width in pixel)","");
			if(txt3!="")
			{
				AddTxt+=" width=\""+txt3+"px\">";
			}else{
				AddTxt+=" />";
			}
		}
		break;
	case 7:
		AddTxt="<" + "br />\n";
		break;
	case 8:
		txt=prompt("textcolor (#FF0000 is red, #808080 is grey, 0000FF is blue)","#");
		if(txt!="#")
		{
			AddTxt="<" + "span style=\"color: "+txt+";\">";
		}
		txt1=prompt("text to be colored","");
		if(txt1!="")
		{
			AddTxt+=""+txt1+"</span>";
		}
		break;
	}

	form.code.value+=AddTxt;
	delay_live_preview(form.code.value);
	document.form.code.focus();
}



/*
From http://ejohn.org/projects/flexible-javascript-events/
In response to a contest announced at
http://www.quirksmode.org/blog/archives/2005/09/addevent_recodi.html
to re-write addEvent()
*/
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

addEvent( window, 'load', generateNav );