/* MarkTree JavaScript code * * Distributed under the terms of the MIT License. * See "LICENCE.MIT" or http://www.opensource.org/licenses/mit-license.php for details. * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * Miika Nurminen, 12.7.2004. */ /* cross-browser (tested with ie5, mozilla 1 and opera 5) keypress detection */ function get_keycode(evt) { // IE code = document.layers ? evt.which : document.all ? event.keyCode // event.keyCode!=evt.keyCode! : evt.keyCode; if (code==0) code=evt.which; // for NS return code; } var lastnode=null; var listnodes = null; var list_index=1; var lastnodetype=''; // determines if node is a link, input or text; // up, left, down, right, keypress codes //ijkl //var keys = new Array(105,106,107,108); //num arrows //var keys = new Array(56,52,50,54); //wasd // var press2 = new Array(119,97,115,100); var press = new Array(47,45,42,43); // keydown codes // var keys2=new Array(87,65,83,68); var keys= new Array(38,37,40,39); // keyset 1 = keydown, otherwise press function checkup(keyset,n) { if (keyset==1) return (n==keys[0]); return ((n==press[0]) /*|| (n==press2[0])*/) } function checkdn(keyset,n) { if (keyset==1) return (n==keys[2]); return ((n==press[2]) /*|| (n==press2[2])*/) } function checkl(keyset,n) { if (keyset==1) return (n==keys[1]); return ((n==press[1]) /*|| (n==press2[1])*/) } function checkr(keyset,n) { if (keyset==1) return (n==keys[3]); return ((n==press[3]) /*|| (n==press2[3])*/) } function is_exp(n) { if (n==null) return false; return ((n.className=='exp') || (n.className=='exp_active')); } function is_col(n) { if (n==null) return false; return ((n.className=='col') || (n.className=='col_active')); } function is_basic(n) { if (n==null) return false; return ((n.className=='basic') || (n.className=='basic_active')); } /* returns i>=0 if true */ function is_active(node) { if (node.className==null) return false return node.className.indexOf('_active'); } function toggle_class(node) { if ((node==null) || (node.className==null)) return; str=node.className; result=""; i = str.indexOf('_active'); if (i>0) result= str.substr(0,i); else result= str+"_active"; node.className=result; return node; } function activate(node) { node.style.backgroundColor='#eeeeff'; } function deactivate(node) { node.style.backgroundColor='#ffffff'; } function is_list_node(n) { if (n==null) return false; if (n.className==null) return false; if ( (is_exp(n)) || (is_col(n)) || (is_basic(n)) ) return true; else return false; } function get_href(n) { alist=n.attributes; if (alist!=null) { hr = alist.getNamedItem('href'); if (hr!=null) return hr.nodeValue; } if (n.childNodes.length==0) return ''; for (var i=0; i=0) toggle_class(lastnode); lastnode=n; if (!(is_active(lastnode)>=0)) toggle_class(lastnode); /*var d2 = new Date(); var t_mil2 = d2.getMilliseconds(); window.alert(t_mil2-t_mil);*/ } function next_list_node() { tempIndex = list_index; while (tempIndex0) { tempIndex--; var x = listnodes[tempIndex]; if (is_list_node(x)) { list_index=tempIndex; return; } } } function getsub (li) { if (li.childNodes.length==0) return null; for (var c = 0; c < li.childNodes.length; c++) if ( (li.childNodes[c].className == 'sub') || (li.childNodes[c].className == 'subexp') ) return li.childNodes[c]; } function find_listnode_recursive (li) { if (is_list_node(li)) return li; if (li.childNodes.length==0) return null; result=null; for (var c = 0; c < li.childNodes.length; c++) { result=find_listnode_recursive(li.childNodes[c]); if (result!=null) return result; } return null; } function next_child_listnode(li) { var result=null; for (var i=0; i