/****

replace inner with content or something
update_editor should set the text of the textarea to all the innerHTMLs of the inner
concatenated together;

****/

var IDtoUpdate;

function getElementByClass(theClass) {
	//alert('theClass' + theClass);	
	//Create Array of All HTML Tags
	var allHTMLTags = new Array();
	var allMatchingHTMLTags = new Array();
	allHTMLTags=document.getElementsByTagName("*");
	//Loop through all tags using a for loop
	for (i=0; i<allHTMLTags.length; i++) {
	//Get all tags with the specified class name.
	
		if (allHTMLTags[i].className==theClass) {
		//alert("in matching class " + theClass);	
		//Place any code you want to apply to all
		//pages with the class specified.
		//In this example is to “display:none;” thnodes = document.getElementById(inner_field).childNodes;

		//Making them all dissapear on the page.
		//allHTMLTags[i].style.display='none';
		var id = allHTMLTags[i].id;
		value = allHTMLTags[i].value;
		//alert("id = " + id);
		//lambee_editor(id, value);
		allMatchingHTMLTags.push(allHTMLTags[i]);

		
		}
	}
	return allMatchingHTMLTags;
}

function startup12()
{
	//alert("starting");

		
	elements = getElementByClass('lambee_editor');
	for(i=0; i<elements.length; i++)
	{
		editor = elements[i];		
		lambee_editor(editor.id,editor.value);
	}
}
function format_button_pressed(tag, text)
{
	ws = window.getSelection();
//	alert(ws);
	//alert(ranges);
	parent = ws.getRangeAt(0).commonAncestorContainer.parentElement;
	oldText = parent.innerHTML;
	start = ws.getRangeAt(0).startOffset;
	end   = ws.getRangeAt(0).endOffset
	newNode = document.createElement(tag);
	//newNode.appendChild(document.createTextNode(ws));

	alert(parent.nodeName);
	if(parent.nodeName == tag)
	{
		contents = document.createDocumentFragment();
		contents.appendChild(ws.getRangeAt(0).extractContents());
		alert('selected ' + contents.firstChild.nodeValue);
		//ws.getRangeAt(0).insertNode(document.createTextNode(contents.firstChild.nodeValue));
		//alert('parent | parents Parent ' + parent + ' | ' + parent.parentElement);
		parent.parentElement.insertBefore(document.createTextNode(contents.firstChild.nodeValue), parent);
		parent.parentElement.removeChild(parent);
	} else {
	
		ws.getRangeAt(0).surroundContents(newNode);
	}

	//newText = oldText.substring(0,start) + "<strong>" + oldText.substring(start,end) + "</strong>" + oldText.substring(end, oldText.length);
	clean(document);
	ws.getRangeAt(0).detach();
	update_editor('caller', text);
	//parent.innerHTML = "<strong>"+newText+"</strong>";

}

function clean(p)
{
	//ws = window.getSelection();
//	alert(ws);
	//alert(ranges);
	///parent = ws.getRangeAt(0).commonAncestorContainer.parentElement;
	//alert(p);
	parent = p;
	nodes =	parent.childNodes;
	for(i=0; i<nodes.length; i++)
	{
		if(nodes[i].nodeName == parent.NodeName)
		{
			// remove value from node and add it to the parent
			content = nodes[i].nodeValue;
			//alert(nodeValue);
		} else {
			//alert('recursing');		 	
			clean(nodes[i]);
			
		}
	}
}

function clear_formatting_button_pressed(field)
{

	ws = window.getSelection();
//	alert(ws);
	//alert(ranges);
	parent = ws.getRangeAt(0).commonAncestorContainer.parentElement;

	contents = document.createDocumentFragment();
	contents.appendChild(ws.getRangeAt(0).extractContents());
	//alert('selected ' + contents.firstChild.nodeValue);
	//ws.getRangeAt(0).insertNode(document.createTextNode(contents.firstChild.nodeValue));
	//alert('parent | parents Parent ' + parent + ' | ' + parent.parentElement);
	parent.parentElement.insertBefore(document.createTextNode(contents.firstChild.nodeValue), parent);

}



function lambee_editor(fieldName, value)
{
	//alert("we are in lambee_editor() " + fieldName);
	
	//document.write("<link rel='stylesheet' href='lambee.css' type='text/css' media='screen' />");
	document.write("<div id='lambee_outer' class='lambee_outer'>");
	
	draw_toolbars(fieldName);
	draw_inner(fieldName, value);	
	document.writeln("</div>");
	//draw_hidden();
}

function draw_toolbars(fieldName)
{
	//var buttons = "<div class='lambee_buttons'  onClick='javascript:format_bold("+fieldName+")'>B</div>";
	clear = "<input type='button' id='clearBtn' name='clearBtn' value='clear' onClick='javascript:clear_formatting_button_pressed("+fieldName+")'>"
	italics = "<input type='button' id='italics' name='italics' value='italics' onClick='javascript:format_button_pressed(\"em\", "+fieldName+")'>"
	underline = "<input type='button' id='underline' name='underline' value='underline' onClick='javascript:format_button_pressed(\"U\", "+fieldName+")'>"
	buttons = "<input type='button' id='bold' name='bold' value='bold' onClick='javascript:format_button_pressed(\"B\", "+fieldName+")'>";
	buttons += underline + italics + clear;
	document.write(buttons);
}

function  draw_inner(fieldName, value)
{
	//alert('fieldName = ' + fieldName);
	inner_field = fieldName + '_inner';	
	//alert(inner_field);
	//alert('fieldName = ' + html_field);
	document.writeln("<div id='"+inner_field+"' class='lambee_inner'>");

	document.writeln("</div>");
	draw_html(fieldName, value);
}

function draw_html(fieldName, value)
{
	
	//alert('in draw html and fieldName is ' + fieldName);	
	html_field = fieldName + '_html';
	random_id = Math.floor(Math.random()*100000);

	
	
	//textarea = "<div id='"+html_field+"' class='lambee_user_text' rows='10' cols='50' contenteditable='true' onKeyUp='javascript:update_editor("+fieldName+");'>"+value+"</div>"
	//document.writeln(textarea);

		//var code = document.getElementById(fieldName.id).value;
		var p = document.createElement("p");
		caller = html_field + random_id;
		p.setAttribute("id", html_field + random_id);
		p.setAttribute("class",'lambee_user_text');
		p.setAttribute("contenteditable", "true");
		//alert(fieldName.id);		
		update = "javascript:update_editor("+caller+", "+fieldName+")";
		p.setAttribute("onKeyUp", update);
		inner = fieldName + "_inner";
		//alert(value);
		//p.appendChild(document.createTextNode(value));
		p.innerHTML = value;
		//alert(inner);
		outer = document.getElementById(inner);
		outer.appendChild(p);
		p.focus();
		
		//alert('here ' + p.innerHTML);	

	
		
}

function draw_hidden()
{
	textarea = "<textarea id='test' rows='10' cols='80'></textarea>";
	document.write( textarea );
}




function update_editor(caller, fieldName)
{
	//alert('update' + fieldName.id);
	//alert(caller.id);
	key = event.keyCode
	shiftPressed = event.shiftKey;
	
	//alert(key);

	// Enter Key Pressed ::: Create and display new element
	if(key == "13" && shiftPressed == false) 
	{	
		draw_html(fieldName.id, 'default text for new ps');		
	}
			
	innerFieldName = fieldName.id + "_inner";	
	innerField = document.getElementById(inner_field);

	inner_field = fieldName.id + "_inner";	
	var text="";
	nodes = document.getElementById(inner_field).childNodes;
	for(i=1; i<nodes.length; i++) //for some reason element 0 is undefined
	{

		
		// Enter Key Presed ::: replace unneccessary divs
		if( key == '13' )
		{
			 newHtml = nodes[i].innerHTML.replace('<div><br></div>', '')		
			 nodes[i].innerHTML = newHtml;
		}
		// Backspace
		if(nodes[i].innerHTML == '<br>' && key == '8' && i > 1)
		{
			//alert('delete this node');
			innerField.removeChild(nodes[i]);
		} else {
			newText = nodes[i].innerHTML;
			text += '<p>' + newText + '</p>';
		}
		//alert(nodes[i] + ' is ' + text);
	}

	//alert(text);

	//used to work	
	document.getElementById(fieldName.id).value = text;
	
}



function getSelText()
{
	   // alert("in get sel text");
	    txt = 'nothing';
	   
		// alert(document.getSelection + " chris " + document.selection);
	    sel = document.getSelection();
	    alert(sel);

	    if (window.getSelection)
	    {
		//alert(window.getSelection().getRangeAt(0));
		txt = window.getSelection();
		//alert("window text " + txt);
	
		     }
	    else if (document.getSelection) // FireFox
	    {
		txt = document.getSelection();
		alert("document text " + txt);
	
		    }
	    else if (document.selection)  // IE 6/7
	    {
		txt = document.selection.createRange().text;
		alert("document selection text " + txt);
		
	    }
	    else return;

	//txt.style.fontWeight = "bold";
	//return txt;
	//document.aform.selectedtext.value =  txt;
	//alert("aksldas" + txt);
	return txt;
}
/*

/**
 * function getSelection()
 * 
 * + returns currently selected text
 **/    /*

function getSelectedText()
{
	var txt = 'nothing';
	var foundIn = '';
	if (window.getSelection)	
	{
		txt = window.getSelection();		
	}
	else if (document.getSelection)
	{
		txt = document.getSelection();		
	}
	else if (document.selection)
	{	
		txt = document.selection.createRange();
	}
	else return txt;

  return txt;
}



function handle_formatting_buttons()
{
  
}





function getCaret(el) {
	//alert("anthinags"); 	
  if (el.selectionStart) {

    return el.selectionStart;B
  } else if (document.selection) {
	    el.focus();
 
    var r = document.selection.createRange();
    if (r == null) {
      return 0;
    }
 
    var re = el.createTextRange(),
        rc = re.duplicate();
    re.moveToBookmark(r.getBookmark());
    rc.setEndPoint('EndToStart', re);

    

    return rc.text.length;
  } 
	//alert("anthinags"); 
  return 0;
}

 */


