
// custom voids are preferred since they can be referenced, this can change to use prototypes "Prototype.emptyFunction" if preferred
var Void=function(){}; if( ! window.console ) { window.console = { log: function(str) {alert("console.log: " + str); } } };

// extending Element object with custom functions 
Element.addMethods({
	voidLink: function( ele ) {
		var linkEle = ele;

		if( linkEle.tagName.toLowerCase() != 'a' ) { 
			linkEle = ele.selectFirst('a');
		}
		if(! linkEle ) return;
		$(linkEle).writeAttribute('href', 'javascript:Void(0)');
	},
    getAncestor: function(element, s){
       	var ancestors = element.ancestors();
		var type = 'tagName';
		if( s.substring(0,1) == '.' ) {
			type = 'className';
			s = s.substring(1,s.length);
		} 
		var oRegExp = new RegExp('(\\b)' + s + '(\\b)');
		var result = false;
		find(result); 
		
		return result;
		
		function find(o) { 
			for (var i=0; i<ancestors.length; i++) { 
				if (oRegExp.test((type=='tagName')? ancestors[i].tagName : ancestors[i].className)) {  
					result = ancestors[i]; 
					break;
				}  
			}  
		}
    },
	// prototype doesn't have a built in function return the first element it encounters
	selectFirst: function( ele, selector){
		return ele.select(selector)[0];
	},
	findParent: function( ele, className ) {
		var rollbackEle = ele;
		while( rollbackEle != null && ! rollbackEle.hasClassName( className ) ) {
			rollbackEle = rollbackEle.up();
		}
		return rollbackEle;
	},
	showElement: function( ele ) {
		ele.removeClassName('hiddenContent');
	},
	hideElement: function( ele ) {
		ele.addClassName('hiddenContent');
	},
	getFirstAncestor: function(element, str){
		var strType = (/^\./.test(str)) ? 'class' : 'tag';
		str = str.replace(/^\./,'').toLowerCase();
		var output = false;
		$A(element.ancestors()).each(function(anc) {
			if (output != false) return;
			if ( ( strType == 'class' && $(anc).hasClassName(str) ) || ( strType == 'tag' && $(anc).tagName.toLowerCase() == str ) ) {
				output = $(anc);
			}
		});
		return output;
	},
	removeAllChildren: function(element) {
		while(element.childNodes.length>0) element.removeChild(element.childNodes[0]);
	}
});



Object.extend(String.prototype, {
	toInt: function(base) {
		return parseInt(this, base || 10);
	},
	toBool: function() {
		var val = String(this);
		return (val == 'false' || val == '0' || val == '-1') ? false : true;
	},
	isEmail: function() {
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		return (filter.test(String(this)));
	}
});



