var req='<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><SavePage xmlns="http://www.gowls.com/"><name>@name</name><content>@content</content></SavePage></soap12:Body></soap12:Envelope>'
var q = new QJAXQueue()
var ed = null
var focused=null
var chars=new Array("&nbsp;", "&iexcl;", "&curren;", "&cent;", "&pound;", "&yen;", "&brvbar;", "&sect;", "&uml;", "&copy;", "&ordf;", "&laquo;", "&not;", "&shy;", "&reg;", "&trade;", "&macr;", "&deg;", "&plusmn;", "&sup2;", "&sup3;", "&acute;", "&micro;", "&para;", "&middot;", "&cedil;", "&sup1;", "&ordm;", "&raquo;", "&frac14;", "&frac12;", "&frac34;", "&iquest;", "&times;", "&divide;", "&Agrave;", "&Aacute;", "&Acirc;", "&Atilde;", "&Auml;", "&Aring;", "&AElig;", "&Ccedil;", "&Egrave;", "&Eacute;", "&Ecirc;", "&Euml;", "&Igrave;", "&Iacute;", "&Icirc;", "&Iuml;", "&ETH;", "&Ntilde;", "&Ograve;", "&Oacute;", "&Ocirc;", "&Otilde;", "&Ouml;", "&Oslash;", "&Ugrave;", "&Uacute;", "&Ucirc;", "&Uuml;", "&Yacute;", "&THORN;", "&szlig;", "&agrave;", "&aacute;", "&acirc;", "&atilde;", "&auml;", "&aring;", "&aelig;", "&ccedil;", "&egrave;", "&eacute;", "&ecirc;", "&euml;", "&igrave;", "&iacute;", "&icirc;", "&iuml;", "&eth;", "&ntilde;", "&ograve;", "&oacute;", "&ocirc;", "&otilde;", "&ouml;", "&oslash;", "&ugrave;", "&uacute;", "&ucirc;", "&uuml;", "&yacute;", "&thorn;", "&yuml;", "&mdash;")
var name

function setFocus(obj) {
	focused = obj
	window.status="focused"
}

function scrollEdit() {
	ed.style.top = document.body.scrollTop
}

function closeImage(w,src,alt,cl) {
	if (!focused) window.status="No insertion point."
	w.close()
	var img = new Image()
	img.src = src
	img.alt=alt
	//alert(img.outerHTML)
	focused.focus()
	//cmd('InsertImage',src)
	var r=document.selection.createRange()
	img.style.border="1px solid black"
	img.className=cl
	r.pasteHTML(img.outerHTML)
}

function addImage() {
	var childWindow=open('addImage.aspx','addImage',"toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=400, height=120")
	if (childWindow.opener == null) childWindow.opener = self
}

function newPage() {
	name = prompt("Enter page name: (no spaces)","NewPage")
	save(name)
}	

function save(name) {
	var r = new QJAXRequest()
	unsaveable()
	var content = escape(document.body.parentNode.innerHTML.replace(/&/g,"&amp;"))
	saveable()
	r.url="Service.asmx"
	r.callback=saved
	r.callerror=saveError
	r.addHeader('Content-Type','application/soap+xml; charset=utf-8')
	
	r.data = req.replace(/@name/,name).replace(/@content/,content)
    	rId=q.add(r)
}

function saved() {
	if (!name) {window.location=window.location}
	else {window.location=name + ".html"}
}

function saveError(id,xml,text,time,req) {
	alert(text)
}
var fileName=null

function cmd(name,arg) {
	focused.focus()
	document.execCommand(name,false,arg)
	focused.focus()
	var r=document.selection.createRange()
	r.scrollIntoView(false)
}

function link() {
	var url=prompt("Enter URL")
	cmd("CreateLink",url)
}

function mark() {
	var url=prompt("Enter Bookmark Name")
	cmd("CreateBookmark",url)
}

function bold() {
	document.execCommand("bold",false)
	focused.focus()
}

function italic() {
	document.execCommand("italic",false)
	focused.focus()

}

function underline() {
	document.execCommand("underline",false)
	focused.focus()

}

function color(c) {

}

function add(a) {
	focused.focus()
	var r=document.selection.createRange()
	var temp = document.createElement('span')
	temp.innerHTML=chars[a]
	r.text=temp.innerText
}

function addSectionAbove(pos) {
	pos = pos ? pos : "wide"
	var p = focused.parentNode
	var n = focused.cloneNode(true)
	n = p.insertBefore(n,focused)
	focused = focused.previousSibling
	focused.focus()
}

function addSectionBelow(pos) {
	pos = pos ? pos : "wide"
	var p = focused.parentNode
	var n = focused.cloneNode(true)
	var a = focused.nextSibling ? focused.nextSibling : null
	if (a) {
		p.insertBefore(n,a)
	} else {
		p.appendChild(n)
	}
	focused = a ? a.previousSibling : p.lastChild
	focused.focus()
}

function delSection() {
	var p = focused.parentNode
	p.removeChild(focused)
	focused=null
}

function sectionPos(pos) {
	focused.className=pos + " section"
}

function showSource() {
	document.getElementById("source").innerText=focused.innerHTML
}
function saveable() {
	noEdit()
	return
	if (navigator.appName!="Microsoft Internet Explorer") { return }
	ed = document.createElement("div")
	ed.className = "editPane"
	ed.style.height="1em"
	ed.style.width="3em"
	ed.style.overflow="hidden"
	var t = document.createElement("div")
	t.appendChild(document.createTextNode("Edit"))
	t.onclick=doEdit	
	t.id="editm"
	ed.appendChild(t)
	ed.onmouseover=expand
	ed.onmouseout=collapse
	
	var btn = document.createElement("a")
	btn.value="New"
	btn.className="cmd"
	btn.href="javascript:newPage()"
	btn.innerText="New"
	ed.appendChild(btn)
	
	var btn = document.createElement("a")
	btn.value="Save"
	btn.className="cmd"
	btn.href="javascript:save()"
	btn.innerText="Save"
	ed.appendChild(btn)
	
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="<strong>B</strong>"
	btn.href="javascript:cmd('bold')"
	ed.appendChild(btn)
	
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="<em>I</em>"
	btn.href="javascript:cmd('italic')"
	ed.appendChild(btn)
	
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML='<span style="text-decoration:underline">U</span>'
	btn.href="javascript:cmd('underline')"
	ed.appendChild(btn)
	
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML='+Link'
	btn.href="javascript:link()"
	ed.appendChild(btn)
	
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML='+Bookmark'
	btn.href="javascript:mark()"
	ed.appendChild(btn)
		
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="Outline"
	btn.href="javascript:cmd('InsertOrderedList')"
	ed.appendChild(btn)

	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="Bullets"
	btn.href="javascript:cmd('InsertUnorderedList')"
	ed.appendChild(btn)

	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="Indent"
	btn.href="javascript:cmd('Indent')"
	ed.appendChild(btn)

	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="Outdent"
	btn.href="javascript:cmd('Outdent')"
	ed.appendChild(btn)

	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="+Image"
	btn.href="javascript:addImage()"
	ed.appendChild(btn)
		
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="+Section&nbsp;Below"
	btn.href="javascript:addSectionBelow()"
	ed.appendChild(btn)
		
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="+Section&nbsp;Above"
	btn.href="javascript:addSectionAbove()"
	ed.appendChild(btn)
			
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="-Section"
	btn.href="javascript:delSection()"
	ed.appendChild(btn)
			
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="Left"
	btn.href="javascript:sectionPos('left')"
	ed.appendChild(btn)
			
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="Right"
	btn.href="javascript:sectionPos('right')"
	ed.appendChild(btn)
			
	btn=document.createElement('a')
	btn.className="cmd"
	btn.innerHTML="Wide"
	btn.href="javascript:sectionPos('wide')"
	ed.appendChild(btn)

	/*a.innerHTML = '<hr />
	<button onclick="cmd(\'bold\')">b</button>
	<button onclick="cmd(\'italic\')">i</button>
	<button onclick="cmd(\'underline\')">ul</button>
	<button onclick="cmd(\'InsertOrderedList\')">outline</button>
	<button onclick="cmd(\'InsertUnorderedList\')">bullets</button>
	<button onclick="cmd(\'Indent\')">indent</button>
	<button onclick="cmd(\'Outdent\')">outdent</button>
	<hr /><a class="char" href="javascript:add(\'&int;\')">&int;</a><a class="char" href="javascript:add(\'&there4;\')">&there4;</a><a class="char" href="javascript:add(\'&forall;\')">&forall;</a><a class="char" href="javascript:add(\'&part;\')">&part;</a><a class="char" href="javascript:add(\'&exist;\')">&exist;</a><a class="char" href="javascript:add(\'&nabla;\')">&nabla;</a><a class="char" href="javascript:add(\'&isin;\')">&isin;</a><a class="char" href="javascript:add(\'&ni;\')">&ni;</a><a class="char" href="javascript:add(\'&prod;\')">&prod;</a><a class="char" href="javascript:add(\'&sum;\')">&sum;</a><a class="char" href="javascript:add(\'&radic;\')">&radic;</a><a class="char" href="javascript:add(\'&prop;\')">&prop;</a><a class="char" href="javascript:add(\'&infin;\')">&infin;</a><a class="char" href="javascript:add(\'&ang;\')">&ang;</a><a class="char" href="javascript:add(\'&and;\')">&and;</a><a class="char" href="javascript:add(\'&or;\')">&or;</a><a class="char" href="javascript:add(\'&cap;\')">&cap;</a><a class="char" href="javascript:add(\'&cup;\')">&cup;</a><a class="char" href="javascript:add(\'&sim;\')">&sim;</a><a class="char" href="javascript:add(\'&asymp;\')">&asymp;</a><a class="char" href="javascript:add(\'&ne;\')">&ne;</a><a class="char" href="javascript:add(\'&le;\')">&le;</a><a class="char" href="javascript:add(\'&ge;\')">&ge;</a><a class="char" href="javascript:add(\'&sup;\')">&sup;</a><a class="char" href="javascript:add(\'&sub;\')">&sub;</a><a class="char" href="javascript:add(\'&supe;\')">&supe;</a><a class="char" href="javascript:add(\'&sube;\')">&sube;</a><a class="char" href="javascript:add(\'&oplus;\')">&oplus;</a><a class="char" href="javascript:add(\'&perp;\')">&perp;</a>'*/
	
	
	var a = document.createElement("div")
	for (ci in chars) {
		var al = document.createElement('a')
		al.className="char"
		al.href="javascript:add(" + ci + ")"
		al.innerHTML = chars[ci]
		a.appendChild(al)
	}
	ed.appendChild(a)
	
	
	document.body.appendChild(ed)
	document.body.onscroll = scrollEdit
}

function unsaveable() {
	var par = ed.parentNode
	par.removeChild(ed)
}

function expand() {
	ed.style.height="auto"
	ed.style.width="auto"
}

function collapse() {
	ed.style.height="1em"
	ed.style.width="3em"
}

function noEdit() {
	var divs = document.getElementsByTagName('div')
	window.status=0
	for (di in divs) {
		if ("true"==divs[di].contentEditable) {
			divs[di].editEnabled = "true"
			divs[di].contentEditable="false"
			divs[di].onclick=null
			window.status++
		}
	}
	var t = document.getElementById("editm")
	if (t) t.onclick = doEdit
}

function doEdit() {
	var divs = document.getElementsByTagName('div')
	for (di in divs) {
		if ("true"==divs[di].editEnabled||"true"==divs[di].contentEditable) {
			divs[di].contentEditable="true"
			divs[di].editEnabled="true"
			divs[di].onclick=new Function("setFocus(this)")
		}
	}
	var t = document.getElementById("editm")
	if (t) t.onclick = noEdit
}
