/* SUGAR (should be in another lib) */
// node manip shortcuts
function getNodeData(tag) {
	//alert(tag+', '+arguments[1]);
	var mydoc = typeof arguments[1] == 'object'?arguments[1]:document;
	//alert('looking for '+tag);
	var tagresp = mydoc.getElementsByTagName(tag);
	if(tagresp[0] && tagresp[0].childNodes.length) {
		return tagresp[0].firstChild.data;
	} else {
		return null;
	}
}
function getNodeAttr(tag,attr) {
	var mydoc = typeof arguments[2] == 'object'?arguments[2]:document;
	var tagresp = mydoc.getElementsByTagName(tag);
	if(tagresp[0]) {
		return tagresp[0].getAttribute(attr);
	} else {
		return null;
	}
}
function getIDData(id) {
	var mydoc = typeof arguments[1] == 'object'?arguments[1]:document;
	var tagresp = deID(id,mydoc);
	if(tagresp && tagresp.childNodes) {
		return tagresp.firstChild.data;
	} else {
		return null;
	}
}
function setNodeData(tag,val) {
	var mydoc = arguments[2]||document;
	return mydoc.getElementsByTagName(tag)[0].firstChild.data = val;
}
function setNodeAttr(tag,attr,val) {
	var mydoc = arguments[2]||document;
	return mydoc.getElementsByTagName(tag)[0].setAttribute(attr,val);
}
function setIDData(id,val) {
	var mydoc = arguments[2]||document;
	return deID(id,mydoc).firstChild.data = val;
}

// dhtml swizziness
function clearEle(ele) {
	while(ele.childNodes.length) {
		ele.removeChild(ele.childNodes[0]);
	}
}

function makeEle(kind,opts) {
	var ele = null;
	if(kind == 'input' && opts['type'] == 'radio') {
		try { 
			ele = document.createElement('<input type="radio" name="'+opts['name']+'" id="'+opts['id']+'"'+(opts['checked']?' checked':'')+' />');
		} catch(e) {
			ele = document.createElement(kind);
		}
	} else if(kind == 'iframe') {
		try { 
			ele = document.createElement('<iframe name="'+opts['name']+'" id="'+opts['id']+'">');
		} catch(e) {
			ele = document.createElement(kind);
		}
	} else {
		ele = document.createElement(kind);
	}
	for(k in opts) {
	  switch(k) {
	    // html / css
	    case 'id': ele.id = opts['id']; break;
	    case 'className': ele.className = opts['className']; break;
	    case 'style': ele.setAttribute('style',opts['style']); break;
	    case 'attr': {
	    	for(var att in opts['attr']) {
	    		ele.setAttribute(att,opts['attr'][att]);
	    	}
	    }; break;
	    case 'cattr': {
	    	for(var att in opts['cattr']) {
	    		ele[att] = opts['cattr'][att];
	    	}
	    }; break;
	    case 'height': ele.style.height = opts['height']; break;
	    case 'width': ele.style.width = opts['width']; break;
	    case 'top': ele.style.top = opts['top']; break;
	    case 'bottom': ele.style.bottom = opts['bottom']; break;
	    case 'left': ele.style.left = opts['left']; break;
	    case 'right': ele.style.right = opts['right']; break;
	    case 'border': ele.style.border = opts['border']; break;
	    case 'borderLeft': ele.style.borderLeft = opts['borderLeft']; break;
	    case 'borderRight': ele.style.borderRight = opts['borderRight']; break;
	    case 'borderTop': ele.style.borderTop = opts['borderTop']; break;
	    case 'borderBottom': ele.style.borderBottom = opts['borderBottom']; break;
	    case 'borderLeftColor': ele.style.borderLeftColor = opts['borderLeftColor']; break;
	    case 'borderRightColor': ele.style.borderRightColor = opts['borderRightColor']; break;
	    case 'borderTopColor': ele.style.borderTopColor = opts['borderTopColor']; break;
	    case 'borderBottomColor': ele.style.borderBottomColor = opts['borderBottomColor']; break;
	    case 'borderRadius': ele.style.borderRadius = opts['borderRadius']; break;
	    case 'background': ele.style.background = opts['background']; break;
	    case 'padding': ele.style.padding = opts['padding']; break;
	    case 'margin': ele.style.margin = opts['margin']; break;
	    case 'color': ele.style.color = opts['color']; break;
	    case 'display': ele.style.display = opts['display']; break;
	    case 'float': ele.style.styleFloat = opts['float']; ele.style.cssFloat = opts['float']; break;
	    case 'clear': ele.style.clear = opts['clear']; break;
	    case 'fontSize': ele.style.fontSize = opts['fontSize']; break;
	    case 'fontWeight': ele.style.fontWeight = opts['fontWeight']; break;
	    case 'fontFamily': ele.style.fontFamily = opts['fontFamily']; break;
	    case 'textAlign': ele.style.textAlign = opts['textAlign']; break;
	    case 'position': ele.style.position = opts['position']; break;
	    case 'zIndex': ele.style.zIndex = opts['zIndex']; break;
	    case 'overflow': ele.style.overflow = opts['overflow']; break;
	    // content
	    case 'dom': {
	    	if(opts['dom']) {
			if(opts['dom'][0]) {
				for(var q=0;q<opts['dom'].length;q++) {
					try {
					ele.appendChild(opts['dom'][q]);
					} catch(e) {
						// do nothing.
					}
				}
			} else {
				// pre-build?
				ele.appendChild(opts['dom']);
			}
	    	}
	    }; break;
	    case 'text': ele.appendChild(document.createTextNode(opts['text'])); break;
	    case 'html': ele.innerHTML += opts['html']; break;
	    // links
	    case 'href': ele.href = opts['href']; break;
	    // forms / inputs
	    case 'type': try { ele.setAttribute('type',opts['type']); } catch(e) { ele.type = opts['type']; } break;
	    case 'name': ele.setAttribute('name',opts['name']); break;
	    case 'value': ele.setAttribute('value',opts['value']); break;
	    case 'opts': {
	    	for(var i=0;i<opts['opts'].length;i++) {
	    		if(!ele.options) ele.options.length = 0;
	    		ele.options[ele.options.length] = new Option(opts['opts'][i].text,opts['opts'][i].value);
			if(opts['opts'][i].selected) ele.options[ele.options.length-1].selected = true;
	    	}
	    }; break;
	    case 'method': ele.setAttribute('method',opts['method']); break;
	    case 'action': ele.setAttribute('action',opts['action']); break;
	    case 'onsubmit': ele.onsubmit = opts['onsubmit']; break;
	    case 'checked': ele.checked = opts['checked']; break;
	    case 'selected': ele.selected = opts['selected']; break;
	    case 'target': ele.setAttribute('target',opts['target']); break;
	    // img / script
	    case 'src': ele.setAttribute('src',opts['src']); break;
	    // label
	    case 'labelfor': ele.setAttribute('for',opts['labelfor']); break;
	    // filters / opacity
	    case 'borderRadius': ele.borderRadius = opts['borderRadius']; break;
	    case 'opacity': ele.style.opacity = opts['opacity']; ele.style.filter = 'filter:alpha(opacity='+(parseFloat(opts['opacity'])*100)+')'; break;
	    // table
	    case 'cellPadding': ele.cellPadding = opts['cellPadding']; break;
	    case 'cellSpacing': ele.cellPadding = opts['cellSpacing']; break;
	    case 'rowspan': ele.rowSpan = opts['rowspan']; break;
	    case 'colspan': ele.colSpan = opts['colspan']; break;
	    case 'align': ele.setAttribute('align',opts['colspan']); break;
	    case 'valign': ele.vAlign = opts['valign']; break;
	    // events
	    case 'onload': ele.onload = opts['onload']; break;
	    case 'onclick': ele.onclick = opts['onclick']; break;
	    case 'onchange': ele.onchange = opts['onchange']; break;
	    case 'onmousedown': ele.onmousedown = opts['onmousedown']; break;
	    case 'onmouseover': ele.onmouseover = opts['onmouseover']; break;
	    case 'onmouseout': ele.onmouseout = opts['onmouseout']; break;
	    case 'onmouseup': ele.onmouseup = opts['onmouseup']; break;
	    case 'onkeydown': ele.onkeydown = opts['onkeydown']; break;
	    case 'onkeyup': ele.onkeyup = opts['onkeyup']; break;
	    case 'onfocus': ele.onfocus = opts['onfocus']; break;
	    case 'onunfocus': ele.onunfocus = opts['onunfocus']; break;
	    case 'onblur': ele.onblur = opts['onblur']; break;
	    case 'onsubmit': ele.onsubmit = opts['onsubmit']; break;
	  }
	}
	return ele;
}
function makeDiv(opts) {
	return makeEle('div',opts);
}
function makeSpan(opts) {
	return makeEle('span',opts);
}
function makeLink(opts) {
	return makeEle('a',opts);
}
function makeForm(opts) {
	return makeEle('form',opts);
}
function makeInput(opts) {
	return makeEle('input',opts);
}
function makeText(txt) {
	return document.createTextNode(txt);
}

// non-'$' elementById shortcuts
function eID(id) {
	return document.getElementById(id);
}
function deID(id,doc) {
	return doc.getElementById(id);
}


// for dhtml swizzies

function findMouseX(e) {
	var posx = 0;
	if (!e) var e = window.event;
	if (e.pageX) {
		posx = e.pageX;
	} else if (e.clientX) {
		posx = e.clientX + document.body.scrollLeft;
	}
	return posx;
}

function findMouseY(e) {
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageY) {
		posy = e.pageY;
	} else if (e.clientY) {
		posy = e.clientY + document.body.scrollTop;
	}
	return posy;
}


function findPosX(obj) {
	var curleft = 0;
	if(obj.offsetParent) {
		while(obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if(obj.x) {
		curleft += obj.x;
	}
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if(obj.offsetParent) {
		while(obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if(obj.y) {
		curtop += obj.y;
	}
	return curtop;
}

function getBoxSize(tbox) {
	var offset = arguments[1]?arguments[1]:0;
	var oldPos = tbox.style.position;
	tbox.style.position = 'relative';
	var sizer = tbox.appendChild(document.createElement('div'));
	sizer.style.position = 'absolute';
	sizer.style.margin = '0px';
	sizer.style.padding = '0px';
	sizer.style.width = '0px';
	sizer.style.height = '0px';
	sizer.style.right = '0px';
	sizer.style.bottom = '0px';
	sizer.style.display='block';
	var hwidth = ((findPosX(sizer)+offset) - findPosX(tbox));
	var hheight = ((findPosY(sizer)+offset) - findPosY(tbox));
	tbox.removeChild(sizer);
	tbox.style.position = oldPos;
	return new Array(hwidth,hheight);
}

// and for the onloadies
function addToOnload(func) {
  var oldonload = window.onload;
  if (typeof oldonload != 'function') {
	window.onload = func;
  } else {
	window.onload = function() {
	  oldonload();
	  func();
	}
  }
}

