/**
 * Global functions
*/
Debug=new Object();
Debug.writeConsole=function(message,type){
	var err=new Error();
	err.type=(type==undefined)?'Debug message ':type;
	err.message=message;
	throw(err);
}

function $O(element,hideError){
	/*if(document.getElementById(element)==null&&hideError!=true){
		Debug.writeConsole('Object not found: '+element);
	}*/
	return document.getElementById(element);
}

function $Ov(element){
	var Object=null;
	if(typeof element=='string'){
		Object=$O(element);
	}
	else{
		Object=element;
	}
	switch(Object.tagName){
		case 'TEXTAREA':
		case 'INPUT':
			return Object.value;
			break;
		case 'SELECT':
			return Object.options[Object.selectedIndex].value;
			break;
		default:
			return null;
			break;
	}
}

Function.prototype.bind=function(){
	var __method = this,args=$A(arguments),object=args.shift();
	return function(){
		return __method.apply(object, args.concat($A(arguments)));
	}
}

function $Ce(TagName,Attributes){
	var tag=document.createElement(TagName);
	if (Attributes instanceof Object){
		for (i in Attributes){
			tag.setAttribute(i, Attributes[i]);
		}
	}
	return tag;
}

var Class={
	create:function(){
		return function(){
			this.initialize.apply(this,arguments);
		}
	}
}

String.prototype.wordWrap=function(WordCnt,Break,Cut){
	var i,j,s,r=this.split("\n");
	if(WordCnt>0) for(i in r){
		for(s=r[i],r[i]=""; s.length>WordCnt;
			j = Cut ? WordCnt : (j = s.substr(0, WordCnt).match(/\S*$/)).input.length - j[0].length || WordCnt,
            r[i] += s.substr(0, j) + ((s = s.substr(j)).length ? Break : "")
		);
		r[i] += s;
	}
	return r.join("\n");
};


/* Array functions */
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;
	}
}

Array.prototype.implode=function(Glue){
	return this.join(Glue);
}

Array.prototype.contains=function(value){
	for(var i=0;i<this.length;i++){
		if(this[i]==value){
			return true;
		}
	}
	return false;
}
Array.prototype.getContent=function(){
	var _ret=new Array();
	for(i in this){
		if(typeof this[i]=='string'){
			_ret.push(this[i]);
		}
	}
	return _ret;
}

getElementsByClassName=function(param){
	var retnode=new Array();
	var regular_expression=new RegExp('\\b'+param+'\\b');
	var elements=document.getElementsByTagName('*');
	for (i=0;i<elements.length;i++){
		var classes=elements[i].className;
		if (regular_expression.test(classes)) retnode.push(elements[i]);
	}
	return retnode;
}

/**
 * VateraEvent object
*/
VateraEvent={
	attachedEvents:{1:[],2:[],3:[],4:[],5:[],6:[],7:[],8:[],9:[],10:[]},
	add:function(Object,EventType,FunctionObj,Params,Priority){
		if(Object==undefined || Object==null){
			Object=window;
		}
		if(typeof Object=='string'){
			Object=$O(Object);
		}

		if(Priority==undefined){
			this.attachedEvents[5].push(new VateraEventRecord(Object,EventType,FunctionObj,Params));
		}
		else if(!isNaN(Priority)&&Priority>=1&&Priority<=10){
			this.attachedEvents[Priority].push(new VateraEventRecord(Object,EventType,FunctionObj,Params));
		}
		else{
			return false;
		}
		return true;
	},
	attachEvent:function(EventRecord){
		if(EventRecord._object.addEventListener){
			EventRecord._object.addEventListener(EventRecord._eventType,function(Event){EventRecord._function(EventRecord._object,Event,EventRecord._params);},false);
		}
		else if(EventRecord._object.attachEvent)
			EventRecord._object.attachEvent('on'+EventRecord._eventType,function(Event){EventRecord._function(EventRecord._object,Event,EventRecord._params);});
		else{
			EventRecord._eventType='on'+EventRecord._eventType;
			EventRecord._object[EventRecord._eventType]=function(Event){EventRecord._function(EventRecord._object,Event,EventRecord._params);};
		}
	},
	stop:function(Event){
		if(Event.preventDefault){
			Event.preventDefault();
			Event.stopPropagation();
		}
		else{
			Event.cancelBubble=true;
			Event.returnValue=false;
		}
		return false;
	},
	loadEvents:function(Event){
		if (!Event){
			if (window.event){
				Event=window.event;
			}
			else if (window.Event){
				Event=window.Event;
			}
		}
		for(PriorityLevel in VateraEvent.attachedEvents){
			for(var i=0;i<VateraEvent.attachedEvents[PriorityLevel].length;i++){
				EventRecord=VateraEvent.attachedEvents[PriorityLevel][i];
				if(EventRecord._object==window&&EventRecord._eventType=='load'){
					EventRecord._function(EventRecord._object,Event,EventRecord._params);
				}
				else{
					VateraEvent.attachEvent(EventRecord);
				}
			}
		}
	}
}
VateraEventRecord=Class.create();
VateraEventRecord.prototype={
	_object:null,
	_eventType:null,
	_function:null,
	_params:null,
	initialize:function(_object,_eventType,_function,_params){
		this._object=_object;
		this._eventType=_eventType;
		this._function=_function;
		this._params=_params;
	}
}
VateraEvent.attachEvent(new VateraEventRecord(window,'load',VateraEvent.loadEvents));


/* Utils */
//Utils=Class.create();
Utils=new Object();
Utils.getElementsByTagAndClassName=function(TagName, ClassName){
	var retnode=new Array();
	var regular_expression=new RegExp('\\b'+ClassName+'\\b');
	var elements=document.getElementsByTagName(TagName);
	for (i=0;i<elements.length;i++){
		var classes=elements[i].className;
		if (regular_expression.test(classes)) retnode.push(elements[i]);
	}
	return retnode;
};

Utils.getElementsByClassName=function(ClassName){
	return Utils.getElementsByTagAndClassName('*', ClassName);
};

// globals
same=''; // median

VateraJSCollectionIncluded=false;
function initVateraJSCollection(ImageUrl){
	document.write('<div id="VateraJSCollectionContainer">');
	document.write('<script src="'+ImageUrl+'js/prototype/prototype.js" type="text/javascript"></sc'+'ript>');
	document.write('<script src="'+ImageUrl+'js/scriptaculous/scriptaculous.js?load=effects,controls" type="text/javascript"></sc'+'ript>');
	document.write('<script src="'+ImageUrl+'js/vatera_js.js" type="text/javascript"></sc'+'ript>');
	document.write('</'+'div>');
	VateraJSCollectionIncluded=true;
}