// util.js


// <![CDATA[
var debugging = true;
if (typeof console == "undefined" || !debugging) 
		var console = { log: function() {} }; 

// Copied from prototype.js
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0, length = iterable.length; i < length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this, args = $A(arguments), object = args.shift();
  return function(event) {
    return __method.apply(object, [event || window.event].concat(args));
  }
}
// end prototype.js code

function getElementsByClassName(classname, node)  {    
	if(!node) 
		node = document.getElementsByTagName("body")[0];    
	var a = [];    
	var re = new RegExp('\\b' + classname + '\\b');    
	var els = node.getElementsByTagName("*");    
	for(var i=0,j=els.length; i<j; i++)        
		if(re.test(els[i].className))a.push(els[i]);    
	return a;
}

function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}

// Use This one
function getStyle1(el,styleProp)
{
	var x = document.getElementById(el);
	if (x.currentStyle)
		var y = x.currentStyle[styleProp];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
	return y;
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}


function getStyle(el, style) {
   if(!document.getElementById) return;
   
     var value = el.style[toCamelCase(style)];
   
    if(!value)
        if(document.defaultView)
            value = document.defaultView.
                 getComputedStyle(el, "").getPropertyValue(style);
       
        else if(el.currentStyle)
            value = el.currentStyle[toCamelCase(style)];
     
     return value;
}

/** toCamelCase(input)
 * Converts string input to a camel cased version of itself.
 * For example:
 * toCamelCase("z-index"); // returns zIndex
 * toCamelCase("border-bottom-style"); // returns borderBottomStyle.
 */
function toCamelCase(s) {
	for(var exp = toCamelCase.exp; 
		exp.test(s); s = s.replace(exp, RegExp.$1.toUpperCase()) );
	return s;
}
toCamelCase.exp = /-([a-z])/;

	function setVisible(obj, bool){

		// see if it's a document id, if it's not, then it must be an obj reference
		if(typeof obj == "string")
			obj = document.getElementById(obj);
	
		// if user chose false, then lets see if the obj needs to be hidden,
		//and if it does, then hide it.
		
		if(bool == false){
			if(obj.style.visibility != 'hidden');
				obj.style.visibility = 'hidden';
			}
	
		// the user chose true, or omitted the second parameter.
		//see if the object is visible. If it isn't, the show it.
	
		else { 
			if(obj.style.visibility != 'visible');
			obj.style.visibility = 'visible';
		}
		
	}
	

		// Get Coord given an event
		function getCoord(e) {
		  	var _x = 0;
		  	var _y = 0;
			if (!e) var e = window.event;
			if (e.pageX || e.pageY) 	{
				_x = e.pageX;
				_y = e.pageY;
			}
			else if (e.clientX || e.clientY) 	{
				_x = e.clientX + document.body.scrollLeft
						+ document.documentElement.scrollLeft;
				_y = e.clientY + document.body.scrollTop
						+ document.documentElement.scrollTop;
			}
			//return new Coord(_x,_y);
			return { x: _x, y: _y }; 
		}
		
		// Get target given an event
		function getTarget(e) {
			var targ;
			if (!e) var e = window.event;
			if (e.target) targ = e.target;
			else if (e.srcElement) targ = e.srcElement;
			if (targ.nodeType == 3) // defeat Safari bug
				targ = targ.parentNode;
			return targ;
		}
		
	
/*
 *
 *	jQuery Timer plugin v0.1
 *		Matt Schmidt [http://www.mattptr.net]
 *
 *	Licensed under the BSD License:
 *		http://mattptr.net/license/license.txt
 *
 */
 
 
/*
 * Turn an Array of key:value tuples into
 * a map (hashtable) object
 */
 function toProps(a) {
 	var _props = new Object();  // key value pairs - should use objects
	$.map(a, function(n,i) {
	    var t = new Array();
	    t = n.split(':');
	    console.log("prop: "+t[0]+" value: "+t[1]);
	    _props[t[0]]=t[1];
	});
	return _props;
 }
 
 /*
  * props overrides and/or extends given defaults  
  * props: is an object
  * defaults: "
  */
 function mergeWithDefaults(props,defaults) {
 	// Override defaults with props - return default as props
	$.each(props, function(i, n) {
		defaults[i]=n;
	});
	return defaults;
 }
	
	

	

// ]]>