var dummy="$Id: scone.js,v 1.2 2011-01-18 16:50:36 darmitag Exp $";var _scones={};var _scone_for={};var _scone_dummy_elem=null;var _scone_debug=false;function scone_create(a,d,b,f){if(_scones[a]!=undefined){throw ('Scone "'+a+'" already exists.')}var k=document.getElementById(a);if(!k){throw ('Element "'+a+'" not found.')}var j=k.nodeName.toLowerCase();if(j=="table"){throw ('Element "'+a+'" cannot be used since it is a '+j+"; use a tbody instead.")}while(k.lastChild){k.removeChild(k.lastChild)}var i={info:d,cmpFn:b,cmpMode:f,elemType:j,parentSconeItemId:null,items:[],itemIdHash:{},scone_elem:k};var e=k;var h=null;var g=null;while(e){if(e.id){if(_scone_for[e.id]!=undefined){h=_scone_for[e.id];g=e.id;break}}e=e.parentNode}if(g){i.parentSconeItemId=g;var c=_scones[h].itemIdHash[g];c.childSconeIdHash[a]=true}_scones[a]=i;return a}function scone_exists(a){return(_scones[a]!=undefined)}function scone_get_info(b){var a=_scones[b];if(a==undefined){return null}return a.info}function scone_add_item(g,c,k,x,b,d){var i=_scones[g];if(i==undefined){throw ('No such scone "'+g+'"')}var s=null;if(d){var s=i.scone_elem}if(!s){s=document.getElementById(g);if(!s){throw ('Element "'+g+'" not found.')}}if(_scone_debug){if(document.getElementById(c)){throw ('Item with id "'+c+'" already exists in the document.')}if(_scone_for[c]!=undefined){throw ('Item with id "'+c+'" already exists in "'+_scone_for[c]+'"')}}var n;if(b||i.cmpFn==null){n=i.items.length}else{n=_scone_find_ipos(i,x)}var p;if(n==i.items.length){p=null}else{p=_scone_first_item_elem(i.items[n])}if(!_scone_dummy_elem){_scone_dummy_elem=document.createElement("div")}var r=null;var w="unknown";var l=i.elemType;try{if(l=="div"){_scone_dummy_elem.innerHTML=k;r=_scone_dummy_elem}else{if(l=="tbody"){_scone_dummy_elem.innerHTML="<table><tbody>"+k+"</tbody></table>";r=_scone_dummy_elem.getElementsByTagName("tbody")[0]}else{if(l=="tr"){_scone_dummy_elem.innerHTML="<table><tbody><tr>"+k+"</tr></tbody></table>";r=_scone_dummy_elem.getElementsByTagName("tr")[0]}else{if(l=="thead"){_scone_dummy_elem.innerHTML="<table><thead>"+k+"</thead></table>";r=_scone_dummy_elem.getElementsByTagName("thead")[0]}else{_scone_dummy_elem.innerHTML=k;r=_scone_dummy_elem}}}}}catch(w){}if(!r){throw ('Failed to add "'+k+'" to "'+g+'" due to: '+w)}var u=0;var A=null;var a=r.firstChild;while(a){var h=a.nextSibling;r.removeChild(a);if(a.nodeType==1){s.insertBefore(a,p);u++;if(!A){A=a}}a=h}_scone_dummy_elem.innerHTML="";if(!d||u>1){var f=document.getElementById(c);if(!f){var q=0;if(p){while(p.previousSibling&&q<u){if(p.previousSibling.nodeType==1){q++}s.removeChild(p.previousSibling)}}else{while(s.lastChild&&q<u){if(s.lastChild.nodeType==1){q++}s.removeChild(s.lastChild)}}throw ('Element with id "'+c+'" not found in "'+k+'", or html is invalid.')}var v=f.parentNode;var o=f;var z=0;while(v&&v!=s){o=v;v=v.parentNode;z++}var v=A;var m=0;while(v&&v!=o){if(v.nodeType==1){m++}v=v.nextSibling}}else{var m=0;var z=0}var y={id:c,info:x,offsetLeft:m,offsetUp:z,numElems:u,childSconeIdHash:{}};i.items.splice(n,0,y);i.itemIdHash[c]=y;_scone_for[c]=g;return c}function scone_get_items(b){var a=_scones[b];if(a==undefined){throw ('No such scone "'+b+'"')}var d=new Array(a.items.length);for(var c=0;c<a.items.length;c++){d[c]=a.items[c].id}return d}function scone_item_exists(a){return _scone_for[a]!=undefined}function scone_get_item_info(c){var b=_scone_for[c];if(!b){return null}var a=_scones[b];if(a==undefined){return null}if(a.itemIdHash[c]==undefined){return null}return a.itemIdHash[c].info}function scone_get_item_owner(a){return _scone_for[a]?_scone_for[a]:null}function scone_get_item_children(e){var f=[];var b=_scone_for[e];if(!b){return f}var a=_scones[b];if(a==undefined){return f}var c=a.itemIdHash[e];if(c==undefined){return f}for(var d in c.childSconeIdHash){f.push(d)}return f}function scone_get_parent_item(b){var a=_scones[b];if(a==undefined){return null}return a.parentSconeItemId}function scone_remove_item(f){var a=_scone_for[f];if(!a){throw ('Item "'+f+'" has not been added to a scone.')}var h=_scones[a];if(!h){throw ("Internal error: scone in _scone_for but not in _scones.")}var m=document.getElementById(a);if(!m){throw ('Element "'+a+'" not found.')}var k=-1;for(var e=0;e<h.items.length;e++){if(h.items[e].id==f){k=e;break}}if(k<0){throw ("Internal error: item in _scone_for but not in scone items.")}var n=h.items[k];var l=n.numElems;var c=_scone_first_item_elem(n);var d=0;while(c&&d<l){var b=c.nextSibling;if(c.nodeType==1){d++}m.removeChild(c);c=b}h.items.splice(k,1);delete h.itemIdHash[f];delete _scone_for[f];for(var g in n.childSconeIdHash){_scone_delete(g,true,true)}return}function scone_replace_item(h,d,g,f){var a=scone_get_item_owner(h);var b=[];var e=[];if(f){b=scone_get_item_children(h);e=new Array(b.length);for(var c=0;c<b.length;c++){e[c]=scone_cut(b[c])}}scone_remove_item(h);scone_add_item(a,h,d,g,null,false);for(var c=0;c<b.length;c++){if(document.getElementById(b[c])){scone_paste(b[c],e[c])}}return}function scone_set_item_info(g,f,q){var a=scone_get_item_owner(g);var h=_scones[a];if(!h){throw ('Could not find scone for item "'+g+'"')}var r=h.itemIdHash[g];if(!r){throw ('Could not find item "'+g+'" in scone "'+a+'"')}if(h.cmpFn==null){r.info=f;return}var k;for(var e=0;e<h.items.length;e++){if(h.items[e].id==g){k=e;break}}var o=_scone_find_ipos(h,f);var l=(k<o)?o-1:o;r.info=f;if(k==l){return}var n;if(o==h.items.length){n=null}else{n=_scone_first_item_elem(h.items[o])}var p=document.getElementById(a);if(!p){throw ('Element "'+a+'" not found.')}if(q!=true){var m=r.numElems;var c=_scone_first_item_elem(r);var d=0;while(c&&d<m){var b=c.nextSibling;if(c.nodeType==1){d++}p.removeChild(c);p.insertBefore(c,n);c=b}}h.items.splice(k,1);h.items.splice(l,0,r);return}function scone_sort(a,h,e){var n=_scones[a];if(n==undefined){throw ('No such scone "'+a+'"')}var q=document.getElementById(a);if(!q){throw ('Element "'+a+'" not found.')}if(n.cmpFn==null){return}if(!e){if(h!=null){n.cmpMode=h}else{h=n.cmpMode}}var o={};for(var l=0;l<n.items.length;l++){var c=n.items[l].id;var g=_scone_first_item_elem(n.items[l]);var p=n.items[l].numElems;var b=new Array(p);var k=0;while(g&&k<p){if(g.nodeType==1){b[k++]=g}g=g.nextSibling}o[c]=b}var d=n.cmpFn;var m=function(i,f){return d(h,i.info,f.info)};n.items.sort(m);while(q.lastChild){q.removeChild(q.lastChild)}for(var l=0;l<n.items.length;l++){var c=n.items[l].id;var b=o[c];for(var k=0;k<b.length;k++){q.appendChild(b[k])}}return}function scone_cut(a){return _scone_cut(a,false,false)}function scone_paste(b,a){_scone_paste(b,a,false)}function scone_delete(a){_scone_delete(a,false,false);return}function _scone_delete(a,j,g){var h=_scones[a];if(h==undefined){throw ('No such scone "'+a+'"')}if(!j){var k=document.getElementById(a);if(k){while(k.lastChild){k.removeChild(k.lastChild)}}}if(!g&&h.parentSconeItemId){var d=_scone_for[h.parentSconeItemId];var f=_scones[d];var b=f.itemIdHash[h.parentSconeItemId];delete b.childSconeIdHash[a]}for(var e=0;e<h.items.length;e++){var l=h.items[e];delete _scone_for[l.id];for(var c in l.childSconeIdHash){_scone_delete(c,true,true)}}delete _scones[a];return}function _scone_cut(a,j,g){var h=_scones[a];h.scone_elem=null;if(h==undefined){throw ('No such scone "'+a+'"')}var k={scone:h,elems:[],childScones:[],childSconeIds:[]};if(!j){var l=document.getElementById(a);if(!l){throw ('Element "'+a+'" not found.')}while(l.lastChild){k.elems.splice(0,0,l.lastChild);l.removeChild(l.lastChild)}}if(!g&&h.parentSconeItemId){var c=_scone_for[h.parentSconeItemId];var e=_scones[c];var b=e.itemIdHash[h.parentSconeItemId];delete b.childSconeIdHash[a]}for(var d=0;d<h.items.length;d++){for(var f in h.items[d].childSconeIdHash){k.childSconeIds.push(f);k.childScones.push(_scone_cut(f,true,true))}delete _scone_for[h.items[d].id]}delete _scones[a];return k}function _scone_paste(a,k,j){if(_scones[a]!=undefined){throw ('Scone "'+a+'" already exists.')}if(!j){var l=document.getElementById(a);if(!l){throw ('Element "'+a+'" not found.')}while(l.lastChild){l.removeChild(l.lastChild)}for(var f=0;f<k.elems.length;f++){l.appendChild(k.elems[f])}var c=l;var e=null;var d=null;while(c){if(c.id){if(_scone_for[c.id]!=undefined){e=_scone_for[c.id];d=c.id;break}}c=c.parentNode}if(d){k.scone.parentSconeItemId=d;var b=_scones[e].itemIdHash[d];b.childSconeIdHash[a]=true}k.scone.scone_elem=l}_scones[a]=k.scone;for(var f=0;f<k.scone.items.length;f++){var m=k.scone.items[f];_scone_for[m.id]=a}for(var f=0;f<k.childScones.length;f++){var g=k.childScones[f];var h=k.childSconeIds[f];_scone_paste(h,g,true)}return}function _scone_first_item_elem(d){var a=document.getElementById(d.id);if(!a){throw ('Element "'+d.id+'" not found.')}var c=a;for(var b=0;b<d.offsetUp;b++){c=c.parentNode}for(var b=0;b<d.offsetLeft;b++){c=c.previousSibling}return c}function _scone_find_ipos(e,d){var b=e.items;var f=e.cmpFn;var g=e.cmpMode;var i=b.length,c=-1,a;while(i-c>1){if(f(g,b[a=i+c>>1].info,d)<0){c=a}else{i=a}}if(i<b.length&&f(g,b[i].info,d)==0){return i+1}else{return i}};
