/* Strictly illegal reserved word - but temp soln for IE */
var undefined; // for IE5.0x
if (typeof Array.prototype.push === String(undefined)) {
  Array.prototype.push = function(elem) {
    this[this.length] = elem;
  };
}

Object.extend = function(dest, src) {
	for (prop in src){dest[prop]=src[prop];}
	return dest;
}

function $() {
	var elements = [],elem;
	for (var i=0; i<arguments.length;i++) {
		elem = arguments[i];
		if (typeof elem=='string'){elem=document.getElementById(elem);		}
		if (arguments.length==1){return elem;}
		elements.push(elem);
	}
	return elements;
}

var $break = new Object();
var $continue = new Object();

var Enumerable = {
	each:function(iterator) {
		var index=0;
		try {
			this._each(function(value) {
				try{iterator(value, index++);}
				catch(e){if(e!=$continue)throw e;}
			});
		}
		catch(e){if(e!=$break)throw e;}
	},
	
	inject:function(memo, iterator) {
		this.each(function(value, index){memo=iterator(memo,value,index);});
		return memo;
	}		
}

var $A = Array.from = function(iterable) {
	if (!iterable) return [];
	if (iterable.toArray) {return iterable.toArray();	}
	else {
		var results = [];
		for (var i=0;i<iterable.length;i++) {results.push(iterable[i]);}
		return results;
	}
}
Object.extend(Array.prototype, Enumerable);

Object.extend(Array.prototype, {
	_each:function(iterator) {
		for (var i=0;i<this.length;i++) {
			iterator(this[i]);
		}
	}
});

document.getElementsByClassName = function(className, parentElement) {
	var children = ($(parentElement) || document.body).getElementsByTagName('*');
	return $A(children).inject([], function(elements, child) {
		if (child.className.match(new RegExp("(^|\\s)"+className+"(\\s|$)"))){
			elements.push(child);
		}
		return elements;
	});
}

if(!window.Event){var Event=new Object();}
Object.extend(Event,{
	KEY_RETURN:13,
	
	element:function(event){return event.target||event.srcElement;},
	
	stop:function(event){if(event.preventDefault){event.preventDefault();event.stopPropagation();}else{event.returnValue=false;event.canelBubble=true;}},
	
	findElement:function(event,tagName){
		var element=Event.element(event);
		while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase()))){element = element.parentNode;}
		return element;
	},
	
	observers:false,
	
	_observeAndCache:function(element,name,observer,useCapture){
		if(!this.observers)this.observers=[];
		if(element.addEventListener){
			this.observers.push([element,name,observer,useCapture]);
			element.addEventListener(name,observer,useCapture);
		}
		else if(element.attachEvent){
			this.observers.push([element,name,observer,useCapture]);
			element.attachEvent('on'+name,observer);
		}
	},
	
	unloadCache:function(){
		if(!Event.observers)return;
		for(var i=0;i<Event.observers.length;i++){
			if(Event.stopObserving.apply){Event.stopObserving.apply(this,Event.observers[i]);}
      else { /* ie 5.0x fix */        
        Event.stopObserving(Event.observers[i][0],Event.observers[i][1],Event.observers[i][2],Event.observers[i][3]);
      }
			Event.observers[i][0]=null;
		}
		Event.observers=false;
	},
	
	observe:function(element,name,observer,useCapture){
		var element=$(element);
		useCapture=useCapture||false;
		if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent)){name='keydown';}		
		this._observeAndCache(element,name,observer,useCapture);
	},
	
	stopObserving:function(element,name,observer,useCapture){
		var element=$(element);
		useCapture=useCapture||false;		
		if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent)){name = 'keydown';}		
		if(element.removeEventListener){element.removeEventListener(name, observe, useCapture);}
		else if(element.detachEvent){element.detachEvent('on'+name,observer);}
	}
	
});

/* stop the memory leakage */
Event.observe(window, 'unload', Event.unloadCache, false);

function __initNewWindowAnchors() {
	var anchors = $A(document.getElementsByTagName('A'));
	anchors.each(function(elem) {
		if (/^(new|thumb)/.test(elem.className)) {
			elem.target = "blank";
			if (elem.title.length == 0) {
				elem.title = "Open page in a new window";
			}
			else {
				elem.title += " - New Window";
			}
		}		
	});

}

function __initMenuBehaviours() {
  // this is to add menu behaviours for windows IE browsers  
}

Event.observe(window, 'load', __initNewWindowAnchors);

if (navigator.appName.indexOf('Internet Explorer') != -1) {
  Event.observe(window, 'load', __initMenuBehaviours);  
}


