// Copyright 2004, 2005 Crispin Perdue, All Rights Reserved
// cris@perdues.com


var iw_devMode=!!location.hostname.match(/^[0-9.]+$|^[a-zA-Z0-9_-]+$/);var iw_demoDelay=200;var iw_debug_actions=false;var iw_debug=false;var iw_firstUpdate="blank.html";var iw_onDirtyUI;var iw_requestData;var iw_actionInfo=new Hash;var iw_mainFrame=window;var iw_updateFrame;var iw_loaded;var iw_toolState=new Hash;iw_toolState.simpleModes=new Hash;function setupModes(node,andTop){var a=node.getElementsByTagName("*");for(var i=(andTop?-1:0);i<a.length;i++){var e=i==-1?node:a[i];var modeAttr=e.getAttribute("mode");var mode=modeAttr||e.id;if(mode){var m=mode.match
(/^([_a-zA-Z][_a-zA-Z0-9]*):([_a-zA-Z0-9]*)$/);check(!(modeAttr&&!m),"Illegal simple mode: ",mode);if(m){var nm=m[1];if(!simpleModes[nm]){simpleModes[nm]=new Hash;}
var id=findID(e);simpleModes[nm][m[2]]=id;}}}}
var agent=navigator.userAgent;var isOpera=agent.match(/Opera/);var isKHTML=agent.match(/KHTML/);var isIE=agent.match(/MSIE/)&&!isOpera;var saveAll=true;var saveStyles=!saveAll;var useIESaveHistory=false;var useFrameSet=false;var useXMLHttpRequest=false;var undef;var mainBody;var docHead;var styleState=new Hash;var handlers=new Hash;var allFields;var allForms;var cleanForms=false;var pageModes=new Hash;var simpleModes=iw_toolState.simpleModes;function Hash(){}
var evContext=window;function doUpdate(){var action=findAction("Update");var code="";if(action){var doc=action.ownerDocument;check(doc==iw_updateFrame.document,"Update found in wrong window");var scripts=doc.getElementsByTagName("script");for(var i=0;i<scripts.length;i++){var script=scripts[i];if(script.type!="text/iwp")
continue;code+=script.innerHTML;code+="\n";}
try{evContext=eval
("(function(){\n"+code
+"\nreturn {eval:function(x){return eval(x);}}\n})()");doAction("Update");}finally{evalContext=window;}}}
function defineModes(){var e=document.getElementById("iw_modes");return e?pageModes=node2Object(e):null;}
function www(text){document.writeln(text);}
function supportHere(){if(useIESaveHistory){www('<style type="text/css">');www('<!--');www(' .iw_preserve {behavior: url(#default#savehistory);}');www('-->');www('</style>');}
www('<iframe id=iw_frame_id name=iw_frame ');www(' src='+iw_firstUpdate+' width=90% height=0 ');if(!isKHTML){www(' style="display: none;"');}
www(' ></iframe>');www('<div id=iw_div width=100% height=50 style="display: none;">');www('<form name=iw_form>');www('<b>Attributes</b><br>');www('<textarea name=attrs rows=3 cols=80></textarea><br>');www('<b>Styles</b><br>');www('<textarea name=styles rows=3 cols=80></textarea><br>');www('<b>Handlers</b><br>');www('<textarea name=handlers rows=3 cols=80></textarea><br>');www('<b>Forms state</b><br>');www('<textarea name=forms rows=3 cols=80></textarea><br>');www('<b>Toolkit state</b><br>');www('<textarea name=toolkit rows=3 cols=80></textarea><br>');www('<b>Application status</b><br>');www('<textarea name=status rows=3 cols=80 class=iw_preserve></textarea><br>');www('<b>Element contents</b><br>');www('<textarea name=contents rows=3 cols=80></textarea><br>');www('<b>Document contents</b><br>');www('<textarea name=html rows=10 cols=80 class=iw_preserve></textarea><br>');www('</form>');www('</div>');www('<div id=iw_draghandle style="position: absolute; left: 0; top: 0; visibility: hidden">');www('<table cellspacing="0" cellpadding="0"><tr><td id=iw_dragcopy>');www('</td></tr></table>');www('</div>');}
function iframe(name,src){document.write
('<iframe name="'+name+'" src="'+src+'" width=100 height=0\n'
+' style="border-style: none; visibility: hidden; overflow: hidden;\n'
+' position: absolute; left: 0px; top: 0px;"></iframe>\n');}
var iw_libs=[]
function require(src){if(!contains(iw_libs,src)){iframe(src,src);iw_libs.push(src);}}
function registerLibraries(){for(i in iw_libs){var w=frames[iw_libs[i]];check(w,"No frame ",iw_libs[i]);if(!w)continue;lib=w.document.getElementById("library");check(lib,"No library in "+iw_libs[i]);registerLibrary(lib);}}
function setupFormsAccess(){if(cleanForms){return;}
allFields=new Hash;allForms=new Hash;var inputs=document.getElementsByTagName("input");for(var i=0;i<inputs.length;i++){setupFieldAccess(inputs[i]);}
var buttons=document.getElementsByTagName("button");for(var i=0;i<buttons.length;i++){setupFieldAccess(buttons[i]);}
var selects=document.getElementsByTagName("select");for(var i=0;i<selects.length;i++){setupFieldAccess(selects[i]);}
var areas=document.getElementsByTagName("textarea");for(var i=0;i<areas.length;i++){setupFieldAccess(areas[i]);}
cleanForms=true;}
function findForm(field){var form=field;while(isElement(form)&&form.tagName!="FORM"&&!form.getAttribute("submit")){form=form.parentNode;}
if(!form){log("No form: "+name);return false;}
return form;}
function setupFieldAccess(field){var name=field.name||field.id;if(!name)
return;form=findForm(field);var fmname=form.id;if(!fmname||fmname=="evform"||fmname=="iw_form")
return;allForms[fmname]=form;if(!allFields[fmname]){allFields[fmname]=new Array();}
var fields=allFields[fmname];if(!contains(fields,field)){fields.push(field);}}
var idPat="([a-zA-Z_][a-zA-Z_0-9]*)";var asgn2Pat=idPat+"=\\s*([a-zA-Z0-9_]*)";var fieldSetPat=idPat+"[.]"+idPat+"\\s*=\\s*(.*)";var idRe=new RegExp("^"+idPat+"$");var asgn2Re=new RegExp("^"+asgn2Pat+"$");var fieldSetRe=new RegExp("^"+fieldSetPat+"$");var actionMode=true;var actionInfo=iw_actionInfo;var infoNeeded;function doAction(name){try{var proc=findAction(name);check(proc,"No action: ",name);actionMode=true;interpretAction(proc);return true;}catch(ex){log("Sorry, "+ex);}}
function findAction(name){var finder=function(block){if(!block){return false;}
for(var defn=firstE(block);defn;defn=nextE(defn)){if(name==firstText(defn)){return defn;}}
return false;}
var body=null;var action=null;try{body=iw_updateFrame.document.body;}catch(ex){log("updateFrame? ",ex.message);}
try{action=finder(firstE(body));}catch(ex){log("updates? ",ex.message);}
return action||finder(element("iw_actions"));}
function interpretAction(action){interpret(nextE(first(action)));}
function interpret(elt){for(var item=firstE(elt);item;item=nextE(item)){if(item.tagName!="LI"){log("Need LI: "+item);continue;}
var word=firstText(item);check(word,"No action specified: ",item.innerHTML)
if(iw_debug_actions){if(actionMode){log("Action: "+word);}else{log("Analyze: "+word);}}
var m;if(m=word.match(idRe)){var html=firstE(item);if(html){if(actionMode){setContents(m[1],html.innerHTML);}}else{var proc=findAction(m[1]);check(proc,"No definition for: ",m[1]);interpretAction(proc);}}else if(m=word.match(/(.*)[?]$/)){var test=m[1];var form;var field;var value;var info;if(!test.match(idRe)){if(info=test.match(/^(.*?)[.](.*?)[.]valid$/i)){form=info[1];field=info[2];if(iw_devMode){value=fieldValue(findField(form,field));actionInfo[test]=value.match(/^[^#]*$/)?"yes":"no";}}else if(info=test.match(/^(.*?)[.](.*?)[.]required$/i)){form=info[1];field=info[2];test=form+"."+field+".valid";if(iw_devMode){value=fieldValue(findField(form,field));actionInfo[test]=value.match(/^[^#]+$/)?"yes":"no";}}else if(info=test.match(/^(.*?)[.](.*?)[.]valid[(](.*)[)]$/i)){form=info[1];field=info[2];expr=info[3];test=form+"."+field+".valid";if(iw_devMode){value=fieldValue(findField(form,field));actionInfo[test]=value.match(new RegExp(expr))?"yes":"no";}}else if(info=test.match(/^(.*?)[.]valid/i)){if(iw_devMode){form=info[1];value="yes";var expr=new RegExp("^"+form+"[.]");for(var k in actionInfo){if(k.match(expr)&&actionInfo[k]!="yes"){value="no";break;}}
actionInfo[test]=value;}}else{log("Bad syntax in conditional expression: ",word);}}
interpretChoiceList(test,firstE(item));}else if(!actionMode){continue;}else if(m=word.match(/^=> *(.*)/)){var query=encodeRequestData(iw_requestData);fetchUpdate(m[1],query);}else if(m=word.match(asgn2Re)){var varName=m[1];var setting=m[2];setMode(varName,setting);}else if(m=word.match(fieldSetRe)){check(document.mainForm,"Document has no main form");var formName=m[1];var fieldName=m[2];var setting=m[3];if(setting.match(/\[/)){setting=eval(setting);}
setFieldValue(formName,fieldName,setting);}else if(m=word.match(/^\{(([^\0])*)\}$/)){evContext.eval("(function(){"+m[1]+"})()");}else{check(false,"Unknown action: ",word);}}}
function interpretChoiceList(word,choices){check(choices.tagName=="UL","Invalid choices");var target=actionInfo[word];check(target||!actionMode,"No outcome for: ",word);if(target){for(var choice=firstE(choices);choice;choice=nextE(choice)){check(choice.tagName=="LI","Ill-formed choice for ",word);var key=firstText(choice);check(key,"Missing choice for ",word);if(target&&key==target){interpret(nextE(first(choice)));return;}}
log("No match for test ",word);}else{var options=infoNeeded[word]||new Array;for(var choice=firstE(choices);choice;choice=nextE(choice)){check(choice.tagName=="LI","Ill-formed choice for ",word);var key=firstText(choice);check(key,"Missing choice for ",word);if(!contains(options,key)){options.push(key);}}
if(options&&options.length>0){infoNeeded[word]=options;}}}
var span=document.createElement("span");var txnode=document.createTextNode("");span.appendChild(txnode);function htmlEncode(text){txnode.nodeValue=text;return span.innerHTML;}
function setStyle(target,style,value){var elt=element(target);elt.style[style]=value;if(saveStyles){var id=findID(elt);var state=styleState[id]=styleState[id]||new Hash;state[style]=value;}
return value;}
function effectiveStyle(target){var elt=element(target);if(window.getComputedStyle){return window.getComputedStyle(elt,null);}else{return elt.currentStyle;}}
function contents(id){return element(id).innerHTML;}
function setContents(target,html){var elt=element(target);check(elt,"No node found: ",target);var id=elt.id;if(html.nodeName){while(elt.firstChild){elt.removeChild(elt.firstChild);}
elt.appendChild(html);}else{check(html.match,"HTML? ",html);if(html.match(/^ *$/)&&(elt.tagName=="TD"||elt.tagName=="TH")){elt.innerHTML="<br>";}else{elt.innerHTML=html;}}
handleNewContent(elt);cleanForms=false;}
function handleNewContent(elt){expandAll(elt);setupModes(elt);}
function setText(target,text){setContents(target,document.createTextNode(text).nodeValue);}
function setDisplay(target,state){var actual=state=="off"||state==false?"none":state=="on"||state==true?"":state;setStyle(target,"display",actual);}
function getMode(aspect){var choices=simpleModes[aspect];if(choices){for(var k in choices){var style=effectiveStyle(choices[k]);if(style&&style.display!="none"){return k;}}
return void(0);}else{if(pageModes[aspect])return void(0);var elt=element(aspect);if(!elt)return void(0);return elt.style.display!="none";}}
function setMode(aspect,setting){if(typeof(aspect)=="function")
return;var options=pageModes[aspect];if(options){var bindings=options[setting];for(var k in options.defaults){if(!bindings[k]){setMode(k,options.defaults[k]);}}
for(var k in bindings){setMode(k,bindings[k]);}
return;}
var group=simpleModes[aspect];if(group){if(group instanceof Object){for(var k in group){if(setMode(group[k],k==setting?"on":"off")==false){delete group[k];}}
return;}
if(typeof(group.setMode)=="function"){group.setMode(setting);return;}
log("Unidentified simple mode: "+aspect);return;}
if(setting==true||setting==false||setting.match(/^(on|off|inline|block|table|inline-table)$/)||setting.match(/^(inline-block|list-item|none|run-in)$/)||setting.match(/^(table-(cell|row|column|caption))$/)||setting.match(/^(table-(row|column|header|footer)-group)$/)){e=document.getElementById(aspect);if(e){setDisplay(e,setting);return true;}else{return false;}}else{log("No primitive setting "+setting+" for "+aspect);return;}}
function getCurrentRequest(){return iw_toolState.currentRequest;}
function checkInterlock(){if(getCurrentRequest()){if(confirm("Previous server request incomplete,\nContinue?")){if(useXMLHttpRequest){xrequest.abort();}
if(getCurrentRequest()){if(window.iw_onDirtyUI){window.iw_onDirtyUI();}}}else{if(getCurrentRequest()&&confirm("Resynchronize page with server?\n(resets all forms)")){iw_toolState.currentRequest=null;location.reload(true);}
return false;}}
iw_toolState.currentRequest=null;return true;}
function submit(target,event){if(!event)
event=window.event;if(target){elt=element(target);}else{elt=event.target?event.target:event.srcElement;}
var form=findForm(elt);check(form,"No form for ",elt," (",elt.name||elt.id,")");if(!checkInterlock())
return false;if(event.type=="keypress"){var k=event.keyCode||event.which;if(k!=13)
return true;}
updateName=form.name||form.id;if(updateName){iw_requestData=getFormState(form,elt);iw_actionInfo=actionInfo=new Hash;doAction(updateName);}
return false;}
function requestUpdate(uri,elt,event){if(!checkInterlock())
return false;if(elt){elt=element(elt);var form=findForm(elt);check(form,"No form for ",elt," (",elt.name||elt.id,")");if(!event)
event=window.event;if(event.type=="keypress"){var k=event.keyCode||event.which;if(k!=13)
return true;}
iw_requestData=getFormState(form,elt);}else{iw_requestData=new Hash;}
fetchUpdate(uri,encodeRequestData(iw_requestData));return false;}
function fetchUpdate(uri,query){iw_toolState.currentRequest=uri;if(iw_demoDelay){window.defaultStatus="Loading "+uri+" ... ";setTimeout("iw__request1('"+uri+"', '"+query+"');",iw_demoDelay);}else{request1(uri,query);}
return false;}
function request1(uri,query){if(useXMLHttpRequest){requestXML(uri,query);}else{var q=query?"?"+query:"";var loc=iw_updateFrame.location;if(uri.match(/^\//)){loc.replace(uri+q);}else{var nloc=location.href.replace(/[^\/\\]*$/,uri);loc.replace(nloc+q);}
if(iw_demoDelay)
window.defaultStatus='';}}
var xrequest;function requestXML(url,data,method){xrequest=null;if(XMLHttpRequest){xrequest=new XMLHttpRequest();}else if(ActiveXObject){try{xrequest=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}
try{xrequest=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){}
try{xrequest=new ActiveXObject("Msxml2.XMLHTTP.4.0");}catch(e){}}
check(xrequest,"Can't create XMLHttpRequest");method=method||"get";xrequest.onreadystatechange=handleXResponse;xrequest.open(method,url,true);if(method=="post"){xrequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xrequest.send(data);}else{xrequest.send(null);}}
function handleXResponse(){if(xrequest.readyState==4){if(xrequest.status!=0&&xrequest.status!=200){log("Request status = "+xrequest.status);}
var doc=iw_updateFrame.document;doc.open();doc.write(xrequest.responseText);doc.close();}}
function getFormState(target,elt){var form=element(target);var state=new Hash;if(!form)
return state;setupFormsAccess();if(!form.id){log("Form without ID: "+form);}
var fields=allFields[form.id];for(var j=0;j<fields.length;j++){var input=fields[j];if(!input.name)
continue;if(input!=elt&&(input.type=="submit"||input.type=="button"||input.type=="image"))
continue;var v=fieldValue(input);if(v==null)
continue;var a=state[input.name];if(!a){a=new Array();state[input.name]=a;}
pushAll(a,v);check(a instanceof Array,"Form state not an array: form ",form.id," element ",input.name);}
return state;}
function encodeRequestData(state){var query="";for(var fname in state){var list=state[fname];for(var i=0;i<list.length;i++){var value=list[i];query+="&"+escape(fname)+"="+escape(value);}}
return query.slice(1);}
function parseQuery(query){var result=new Hash;if(!query)
return result;query=query.slice(1);var splits=query.split("&");var span=document.createElement("span");var tex=document.createTextNode("");span.appendChild(tex);for(var i=0;i<splits.length;i++){var item=splits[i];var matches=item.match(/^([^=]*)=(.*)$/);if(matches){var key=decodeURIComponent(matches[1]);var rawvalue=decodeURIComponent(matches[2]);tex.nodeValue=rawvalue;result["raw_"+key]=rawvalue;var encoded=span.innerHTML;result[key]=encoded==null?"":encoded;}}
return result;}
function fieldValue(elt){if(elt.type=='select-one'){if(elt.selectedIndex<0)
return null;var option=elt.options[elt.selectedIndex];return option.value;}else if(elt.type=='select-multiple'){var result=new Array;for(i=0;i<elt.options.length;i++){var opt=elt.options[i];if(opt.selected){result.push(opt.value);}}
return result;}else if(elt.type=="checkbox"||elt.type=="radio"){return elt.checked?elt.value:null;}else{return elt.value;}}
function setFieldValue(fname,iname,value){setupFormsAccess();var inputs=allFields[fname];check(inputs,"No form named ",fname);for(var i=0;i<inputs.length;i++){var input=inputs[i];if(input.name==iname){setElementValue(input,value);}}}
function setElementValue(elt,value){var a=(value instanceof Array)?value:[value];if(elt.type=='select-multiple'||elt.type=='select-one'){for(i=0;i<elt.options.length;i++){var opt=elt.options[i];opt.selected=contains(a,opt.value);}
return;}
if(elt.type=="checkbox"||elt.type=="radio"){elt.checked=contains(a,elt.value);return;}
check(a.length>0,"No value given for element ",elt);if(isKHTML&&elt.tagName=="TEXTAREA"){elt.value=a[0]
setText(elt,a[0]);}else{elt.value=a[0];}}
function node2Object(elt){if(!elt)
return null;var o=new Hash;for(var child=firstE(elt);child;child=nextE(child)){var key=firstText(child);if(!key)
continue;var vnode=firstE(child);if(vnode){var value=node2Data(vnode);o[key]=value;}else{var info=key.match
(isKHTML?/^\s*([\x00-\xff]*?)\s*=\s*([\x00-\xff]*?)\s*$/:/^\s*([\u0000-\uffff]*?)\s*=\s*([\u0000-\uffff]*?)\s*$/);if(!info){log("Bad format: "+knode.nodeValue);continue;}
o[info[1]]=info[2];}}
return o;}
function node2Array(elt){var a=new Array();a.toString=describeThis;for(var child=firstE(elt);child;child=nextE(child)){var dnode=first(child);if(dnode){a.push(node2Data(dnode));}}
return a;}
function node2Data(node){if(!isElement(node)){return trim(node.nodeValue);}else if(node.tagName=="OL"||node.className=="array"){return node2Array(node);}else{return node2Object(node);}}
function element(id){if(isElement(id)){return id;}else if(!id.match(/[_a-zA-Z][_a-zA-Z0-9]*/)){return window.eval(id);}else{var value=document.getElementById(id);if(value){return value;}else{return null;}}}
function findField(formName,name){setupFormsAccess();var list=allFields[formName];assert(list,"No form ",formName);for(var i=0;i<list.length;i++){var field=list[i];if(field.name==name)
return field;}
return null;}
function outerHTML(node){if(isText(node))
return node.nodeValue;var tag=node.tagName;var newtag=tag=="TD"?"TR":tag=="TR"?"TBODY":"DIV";var frag=document.createElement(newtag);frag.appendChild(node.parentNode?node.cloneNode(true):node);return frag.innerHTML;}
function setOuterHTML(target,html,defer){var elt=element(target);var p=elt.parentNode;var nu,old;if(false&&elt.outerHTML){var prev=elt.previousSibling;elt.outerHTML="<del>"+html+"</del>";var div=prev?prev.nextSibling:p.firstChild;old=div;}else{var div=document.createElement("div");div.innerHTML=html;old=elt;}
if(!defer){handleNewContent(div);}
old.innerHTML="";old.id=null;while(nu=div.firstChild){p.insertBefore(nu,old);}
p.removeChild(old);if(!isKHTML){p.normalize();}}
function registerLibrary(target){if(!target)
target="library";var elt=element(target);if(!elt)
return;check(elt.tagName=="UL","Library should be a UL");for(var li=firstE(elt);li;li=nextE(li)){var tx=firstText(li);var m=tx.match(/^(\w+)\s+(\w+)$/);check(m,"Bad library defn syntax: ",tx);var key=m[1];var name=m[2];switch(key){case"expand":iw_expanders[name]=new Expander(name,li);break;default:log("Unknown definition type: "+key);}}}
var iw_expanders=new Hash;function Expander(name,li){var self=this;var defaults;var dfn=firstE(li);this.name=name;function bindings(e){if(!defaults){var e2=nextE(dfn);self.defaults=defaults=e2?findBindings(e2):new Hash;}
return findBindings(e,defaults);}
function expansion(elt){var b=bindings(elt);normalizeBindings(b);var tpl=dfn.innerHTML;var newhtml=replaceAll
(tpl,/_([a-zA-Z_]\w*)_/,function(all,match){return b[match]||"";});return newhtml;}
this.dfn=dfn;this.defaults=defaults;this.expansion=expansion;this.toString=describeThis;}
function normalizeBindings(bindings){for(var k in bindings){var v=bindings[k];if(v instanceof Array){var b='';for(var i=0;i<v.length;i++){b+=v[i].innerHTML;}
bindings[k]=b;}else{bindings[k]=htmlEncode(v);}}}
function expandAll(ancestor){if(!ancestor)
ancestor=document.body;var i=0;var all=ancestor.getElementsByTagName("ins");while(i<all.length){var elt=all[i];var type=elt.className;if(type){check(iw_expanders[type],type," has no expander");if(iw_expanders[type]){setOuterHTML(elt,iw_expanders[type].expansion(elt),true);continue;}}
i++;}
spliceTables(ancestor);}
function spliceTables(node){var a=node.getElementsByTagName("table");var targets=[];for(var i=0;i<a.length;i++){var table=a[i];var level=table.getAttribute("level");if(!level)continue;level=level.toUpperCase();if(!contains(["TBODY","TR","TD"],level)){check(false,"Table level given as "+level);continue;}
var childList=level=="TBODY"?table.tBodies:level=="TR"?table.rows:table.rows[0].cells;for(var target=table.parentNode;!(target==node||target.tagName==level);target=target.parentNode){}
if(target.tagName==level){targets[targets.length]=target;while(childList.length>0){target.parentNode.appendChild(childList[0]);}}else{}}
for(var i=0;i<targets.length;i++){var e=targets[i];if(e.parentNode){e.parentNode.removeChild(e);}}}
function findBindings(elt,defaults){var a=elt.attributes;var result=new Hash;for(var child=firstE(elt);child;child=nextE(child)){var arg=child.getAttribute("iwName")||child.className;if(arg){value=result[arg]||new Array;value[value.length]=child;result[arg]=value;}}
if(defaults&&!result.body){result.body=[elt];}
if(defaults){for(var k in defaults){if(result[k])continue;var v=elt.getAttribute(k);result[k]=v?v:defaults[k];}}else{for(var i=0;i<a.length;i++){var attr=a.item(i);if(attr.specified){if(isIE){result[attr.nodeName]=attr.nodeValue;}else{result[attr.name]=attr.value;}}}}
return result;}
var idnum=1;function findID(elt){if(elt.id){return elt.id;}
var id="iw_"+idnum;idnum++;elt.id=id;return id;}
var ELEMENT_NODE=1;var TEXT_NODE=3;function isElement(node){return node&&node.nodeType==ELEMENT_NODE;}
function isText(node){return node&&node.nodeType==TEXT_NODE;}
function first(node){return isElement(node)&&realNode(node.firstChild);}
function realNode(node){for(;node;node=node.nextSibling){if((isText(node))){var text=node.nodeValue.match(/\S+/);if(text){return node;}}else if(isElement(node)){return node;}}
return null;}
function tagNode(node){for(;node;node=node.nextSibling){if(isElement(node)){return node;}}
return null;}
function firstE(node){return isElement(node)&&tagNode(node.firstChild);}
function nextE(node){return node.nodeType&&tagNode(node.nextSibling);}
function firstText(node){var t=first(node);return isText(t)?trim(t.nodeValue):"";}
function assert(test,message){if(test)
return;var m=message;for(var i=2;i<arguments.length;i++){m+=arguments[i];}
log("Assert failed: ",m);}
function check(test,message){if(test)
return;var m=message;for(var i=2;i<arguments.length;i++){m+=arguments[i];}
log("Check failed: ",m);}
function log(message){var m=message;for(var i=1;i<arguments.length;i++){m+=arguments[i];}
if(!miniEval("Log: "+m,"")){}}
function miniEval(_msg,_x){_x=_x||"";var _p="";while(_x=prompt(_msg+"\n"+_p,_x)){_start=new Date().getTime();try{var _v=eval(_x);var _type=typeof(_v);}catch(ex){_v=ex;_type='';}
var _end=new Date().getTime();_p=_type+' ('+(_end-_start)+'ms): '+_v;}}
function trim(text){return isKHTML?text.match(/^\s*([\x00-\xff]*?)\s*$/)[1]:text.match(/^\s*([\u0000-\uffff]*?)\s*$/)[1];}
function replaceAll(target,pattern,func){var result="";if(isKHTML){var flags="";if(pattern.ignoreCase)
flags+="i";if(pattern.multiline)
flags+="m";var html=target;var m;while(m=html.match(pattern)){var prefix=html.slice(0,m.index);result+=prefix+func.apply(undef,m);html=html.slice(m.index+m[0].length);}
result+=html;}else{var flags="g";if(pattern.ignoreCase)
flags+="i";if(pattern.multiline)
flags+="m";result=target.replace(new RegExp(pattern.source,flags),func);}
return result;}
var describeThis=Object.toString;function contains(array,value){for(var i=0;i<array.length;i++){if(array[i]==value)
return true;}
return false;}
function pushAll(array,values){if(values==null)
return array;if(values instanceof Array){for(var i=0;i<values.length;i++){array.push(values[i]);}}else{array.push(values);}}
function exportSyms(syms){for(var i=0;i<syms.length;i++){var sym=syms[i];try{var value=eval(sym);window["iw_"+sym]=eval(sym);}catch(ex){if(iw_debug){log("Can't export ",sym,": ",ex.message);}}}}
function exportAll(){exportSyms(["appSaves"]);exportSyms
(["contents","setContents","description","element","preserve","getAttr","setAttr","getStyle","setStyle","effectiveStyle","setHandler","outerHTML","setOuterHTML","innerText","setText","setMode","getMode"]);exportSyms
(["doAction","submit","requestUpdate","parseQuery","checkInterlock","getCurrentRequest"]);exportSyms
(["doUpdate","findAction","htmlEncode","node2Object","expandAll"]);exportSyms(["saveState","setup","supportHere","require","registerLibrary"]);exportSyms(["replaceAll","parseQuery"]);exportSyms(["log","check","assert"]);exportSyms
(["windowLeft","windowTop","windowWidth","windowHeight","clientLeft","clientTop","clientPos","covers"]);exportSyms(["startDrag","showMenu"]);window.IW_Hash=Hash;window.iw__request1=request1;}
var exported_syms=exportAll();var handlerNodes=new Object;function addEvent(node,evname,fn){var handler="on"+evname;var property=evname+"__handlers";if(node[handler]&&node[handler]!=callHandlers){node[property]=[fn];}
node[handler]=callHandlers;node[property]=node[property]||new Array;add(node[property],fn);var h=handlerNodes[evname]=handlerNodes[evname]||new Array;add(handlerNodes,evname);add(h,node);if(node!=window){addEvent(window,"unload",deRegister);}}
function add(a,x){for(var i=0;i<a.length;i++){if(a[i]==x)return;}
a[a.length]=x;}
function callHandlers(event){if(!event)
event=window.event;var a=this[event.type+"__handlers"];try{for(var i=0;i<a.length;i++){this.__handler=a[i];var v=this.__handler(event);}}finally{this.__handler=null;}}
function deRegister(){for(var evname in handlerNodes){var a=handlerNodes[evname];var property=evname+"__handlers";for(var i=0;i<a.length;i++){a[i][property]=null;}}}
var describeThis=Object.toString;var iw_demoDelay=200;function handleNewContent(elt){expandAll(elt);setupModes(elt);}
function setContents(target,html){var elt=element(target);check(elt,"No node found: ",target);var id=elt.id;if(html.nodeName){while(elt.firstChild){elt.removeChild(elt.firstChild);}
elt.appendChild(html);}else{check(html.match,"HTML? ",html);if(html.match(/^ *$/)&&(elt.tagName=="TD"||elt.tagName=="TH")){elt.innerHTML="<br>";}else{elt.innerHTML=html;}}
handleNewContent(elt);cleanForms=false;}
function proto_setup(){iw_updateFrame=useFrameSet?parent.iw_updateFrame:iw_frame;mainBody=element("iw_mainBody")||element("mainBody");docHead=document.getElementsByTagName("head")[0];iw_inputs=parseQuery(location.search);registerLibraries();registerLibrary();expandAll(document.body);defineModes();setupModes(document.body,true)
if(findAction("Init")){doAction("Init");}
doUpdate();iw_loaded=true;}
var proto_1=addEvent(window,"load",proto_setup);
