/*
these functions are taken from the library:
-----------------------------------------------------------------------
lib.js
by Caio Chassot (http://v2studio.com/k/code/)
parts by other authors, see commented version for details

version 0.5.75
File generated on Fri Sep 24 00:35:55 E. South America Standard Time 2004

for documentation, see commented version.
get commented version at http://v2studio.com/k/code/lib/lib_c.js

Use freely. Credit is appreciated but not required.
-----------------------------------------------------------------------
the modifications were necessary for htmlarea to work properly
*/

function getElementsByClass(className,tag,parentNode) {
	if (!parentNode) parentNode=document;
	if (!tag) tag='*';
	return filter(
		parentNode.getElementsByTagName(tag),
		function(e) { return hasClass(e,className) }
	);
}
function hasClass(element, className) {
    var classes = element.className.split(' ');
    for (t=0;t<classes.length;t++)
    	if (classes[t]==className)
    		return true;
	return false;
}
function map(list, fn) {
    var result = [];
    fn = fn || function(v) {return v};
    for (var i=0; i < list.length; i++) result[result.length]=fn(list[i], i, list);
    return result;
}
function filter(list, fn) {
    var result = [];
    fn = fn || function(v) {return v};
    map(list, function(item,idx,list) { if (fn(item,idx,list)) result[result.length]=item } );
    return result;
}

undef = isUndefined = function(v) { return typeof v == 'undefined' }

function IE_Event(currentTarget) {
    this.currentTarget   = currentTarget;
    this.preventDefault  = function() { window.event.returnValue  = false }
    this.stopPropagation = function() { window.event.cancelBubble = true }
    this.target  = window.event.srcElement;
    for (k in Array('altKey','ctrlKey','shiftKey','clientX','clientY'))
	 	this[k]=event[k];
    return this;
}

function Legacy_Event(currentTarget) {
    this.currentTarget   = currentTarget;
    return this;
}

function addEvent(els, ev, fn) {
    function DOM_addEvent   (el, ev, fn) { el.addEventListener(ev, fn, true) }
    function legacy_addEvent(el, ev, fn) {
        var evn = 'on'+ev;
        if (!el[evn] || undef(el[evn].handlers)) {
            el[evn] = function() {
                map(el[evn].handlers, function(h){  h( new (el.attachEvent?IE_Event:Legacy_Event)(el) ) });
            }
            el[evn].handlers = [];
        }
        el[evn].handlers[el[evn].handlers.length]=fn;
    }
    var addEventFn = document.addEventListener ? DOM_addEvent : legacy_addEvent;
    if (els.nodeType==1) els = [els];
    map(els, function(el) { addEventFn(el, ev, fn) });
}

function remEvent(els, ev, fn) {
    map(els, function(el) {
        if (document.addEventListener) el.removeEventListener(ev, fn, true);
        else el['on'+ev].handlers.remove(fn);
    });
}

function addLoadEvent(fn) {
    var w = (document.addEventListener && !window.addEventListener ? [document] : [window]);
    return addEvent(w, 'load', fn)
}


// end lib.js

// query string manipulation class
function searchArray(src) {
	if (!src) src=window.location.search;
	this.values=new Array();
	if (src && src.indexOf('?')==0) {
		src=src.substr(1);
		if (src.indexOf('&amp;')>=0)
			parts=src.split('&amp;');
		else if (src.indexOf('&')>=0)
			parts=src.split('&');
		else
			parts=new Array(src);
		var subparts;
		for (var t=0;t<parts.length;t++) {
			subparts=parts[t].split('=');
			this.values[subparts[0]]=subparts[1];
		}
	}
	this.get=function(key) {
		return this.values[key];
	}
	this.set=function(key,value) {
		this.values[key]=value;
	}
	this.toString=function() {
		var tmp='';
		for (k in this.values)
			if (typeof this.values[k] != 'function')
				tmp+=(k + '=' + this.values[k]+'&')

		return '?'+encodeURI(tmp);
	}
}


function reload(el,addObj) {
	var sa = new searchArray(location.search);
	if (addObj)
		for (var k in addObj)
			sa.set(k,addObj[k]);
	sa.set(el.name,el.value);
	location.replace(location.pathname+sa.toString());
}

function lc_openPopup(_href,target,w,h) {
  var features = "width="+w+",height="+h+",scrollbars=yes,status=yes,resizable=yes";
  var theWindow = window.open(_href,target,features);
  theWindow.focus();
  return theWindow;
}

function eventPopup(e) {
  var src = e.currentTarget;
  var target = src.getAttribute('target');
  var dim = target.substr(3).split('x');
  var _href = src.getAttribute('href');
/*
  var start = _href.indexOf('?');
  if (start!=-1) {
	search = new searchArray(_href.substr(start));
	search.set('value',document.getElementById(search.get('for')).value);
	_href = _href.substr(0,start)+search.toString();
  }
*/
  lc_openPopup(_href,target,dim[0],dim[1]);
  e.preventDefault();
  return false;
}

function walert()
{
	var args = new Array();
	for (var t=0;t<walert.arguments.length;t++)
		args[t]=walert.arguments[t];
	alert(args.join(' - '));
}

function dbg(obj)
{
	str=""+obj+"\n\n";
	cnt=0;
	for (var i in obj)
		if (!(i.substr(0,2)=="on" && obj[i]==null))
		{
			val=(""+obj[i]).substr(0,50);
			str+=(i+" => "+val+"\n");
			cnt++;
			if (cnt==15)
			{
				alert(str);
				str=""
				cnt=0;
			}
		}
	alert(str);
}

window.setInterval2 = function(theObject,theMethod,params,time) {
	return window.setInterval(
			function(){
   	     return theObject[theMethod](params);
    		},
    		time
		);
}


function callLater(theObject, theMethod, params){
   return (function(){
        return theObject[theMethod](params);
    });
}
