/*********** UTILITIES ***********/ function detectBrowser() { trace('detectBrowser()'); if(!window.RegExp) return('Browser does not support regular express.'); var agent,pairs,indentifier,name,major,minor,tmp; agent = navigator.userAgent.toLowerCase(); if(agent.indexOf('msie')<0) { // look for the last instance of BrowserName/version (ie Netscape/7.2) pairs = agent.match(/\w+\/[v\d\.]+/g); if(!pairs) return('Unable to detect browser.'); // if the name is 'gecko', use the second to last instance. identifier = pairs.pop(); if(identifier.indexOf('gecko')>=0&&pairs.length>=1) identifier = pairs.pop(); // split the string and figure out the version tmp = identifier.split('/'); if(!tmp||tmp.length<2) return('Unable to detect browser (2).'); name = identifier.match(/^\w+/); minor = parseFloat(identifier.match(/[\d\.]+/)); // special case for mozilla browsers if(name=='mozilla'&&agent.indexOf('macintosh')>=0) minor = parseFloat(agent.match(/rv:([\d\.]+)/)[1]); major = parseInt(minor); } else { tmp = agent.match(/msie\s([\d\.]+)/); name = 'msie'; identifier = tmp[0]; minor = parseFloat(tmp[1]); major = parseInt(minor); } window.browser = {}; window.browser.agent = agent; window.browser.tag = identifier; window.browser.name = name; window.browser.major = major; window.browser.minor = minor; trace('browser agent is '+agent); trace('detected '+name+' (name), '+major+' (major), '+minor+' (minor)'); //alert(agent+"\n\n"+'detected '+name+' (name), '+major+' (major), '+minor+' (minor)'); return(false); } // Add an textarea with id="output" in order to follow the trace messages. // trace(str); function trace(s) { if(!document.getElementById) return('Unsupported DOM.'); var o=document.getElementById('output'); if(o) { /* var now = new Date(); var s = now.getHours()+':'+now.getMinutes()+':'+now.getSeconds()+'> "'+s+'"'+"\n"; */ o.value = s+"\n"+o.value; } return(0); } // dumpObject(obj); // will dump the contents of an object (non-recursive) function dumpObject(o) { trace('dumpObject('+o+');'); var str = ''; if(typeof(o)=='string') { str = o; } else if(typeof(o)=='object') { str = 'start object dump:'+"\n"; for (var p in o) { str += p + '=>' + o[p] + "<\n"; } } else { return('dumpObject. Unknown type ['+typeof(o)+']'); } trace(str); return(0); } function objP(o) { return(typeof(o)=='object'); } function strP(str) { return(typeof(str)=='string'); } function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } /************** DOM Shared **************/ function getByCSS(arr,parent) { trace('getByCSS('+arr+','+parent+');'); if(!objP(parent)) parent = document; if(typeof(arr)=="string") arr = arr.split(/\s{1,}/); if(arr.length==0) return('getByCSS - wrong input.'); var seg,tag,id,cla; var o; var objs=[],tmp=[]; var ii; seg = arr.shift(); if(seg[0]=='#') { // #id o = document.getElementById(seg.substring(1)); if(objP(o)) objs.push(o); } else if(seg[0]=='.') { // .class cla = seg.substring(1); for(ii in parent.childNodes) { o = parent.childNodes[ii]; if(checkClass(o,cla)) objs.push(o); } } else if(seg.indexOf('.')>0) { // tag.class tmp = seg.split('.'); tag = tmp[0]; cla = tmp[1]; tmp = parent.getElementsByTagName(tag); for(var ii=0; ii0) { // tag tmp = parent.getElementsByTagName(seg); for(var ii=0; ii=0) { existing.push(n); } } // append and remove columns as needed if(existing.length=cols && container.removeChild) { for(jj=cols;jj=0||agent.indexOf('safari')>=0) { n.style.height = px_per_column + 'px'; n.firstChild.style.marginTop = -px_per_column*jj + 'px'; } else { n.style.height = lines_per_column * em_factor + 'em'; n.firstChild.style.marginTop = -(lines_per_column * em_factor * jj) + 'em'; } if (n.className&&n.className.indexOf('cropped')==-1) n.className += ' cropped'; } } } } /********* AJAX *********/ function AJAXinit() { trace('Initializing AJAX.'); var o; if(window.ActiveXObject) { o = new ActiveXObject("Microsoft.XMLHTTP"); } else if(window.XMLHttpRequest) { o = new XMLHttpRequest(); } else { return(null); // 'Unable to initilaize AJAX.' } return o; } function AJAXrequest(uri,id) { trace('AJAX loading ['+uri+']'); if(window.AJAXobj==undefined) window.AJAXobj = AJAXinit(); if(window.AJAXobj==null) return('AJAXrequest(). Unable to initialize AJAX object.'); writeHTML(id,'

loading...

'); window.targetid = id; window.AJAXobj.open('get','ajax.php'+uri); window.AJAXobj.onreadystatechange = AJAXresponse; window.AJAXobj.send(null); return(false); } function AJAXresponse() { trace('AJAX response state ['+AJAXobj.readyState+']'); if(AJAXobj.readyState == 4 && window.targetid!=null){ var response = AJAXobj.responseText; writeHTML(window.targetid,response); if(/(columnize)/.test(response)) adjustWidth(true); if(/()/i.exec(response)[2]; if(command) eval(command); } } return(0); } function submitFormViaAJAX(form_obj,viewer_id) { trace('submitFormViaAJAX('+form_obj+','+viewer_id+')'); if(window.browser.name=='opera') return('Unsupported browser (opera).'); if(!document.getElementById) return('Unsuported DOM'); form_obj = getElById(form_obj); var request = '?'; // build the url string var inputs = form_obj.getElementsByTagName('input'); for(var i=0; i