/*
 * Delivery Agent - main.js
 *
 * This file contains the main js functions used by DA templates.
 */

// $( elementID ) - Recursive getElement function
function $() {
	var elements = [];
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string'){
			element = document.getElementById(element);
		}
		if (arguments.length == 1){
			return element;
		}
		elements.push(element);
	}
	return elements;
}

// toggle( parentElementToToggle1, [parentElementToToggle2...] ) - Visibility toggler
function toggle() {
	for ( var i=0; i < arguments.length; i++ ) {
		$(arguments[i]).style.display = ($(arguments[i]).style.display != 'none' ? 'none' : '' );
	}
}

// itoggle( elementID, imageBefore, imageAfter ) - Image toggler
function itoggle() {
	$(arguments[0]).src = ($(arguments[0]).src != arguments[1] ? arguments[1] : arguments[2]);
}

// preloadImages( imgArray ) - Preloads rollover images
function preloadImages() {
	var preloadedImages = [];
	for (var i=0; i < arguments[0].length; i++ ) {
		preloadedImages[i] = new Image();
		preloadedImages[i].src = arguments[0][i];
	}
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}


// hbxStrip
function _hbxStrip( a ) {
	a = a.split("|").join("");
	a = a.split("&").join("");
	a = a.split("'").join("");
	a = a.split("#").join("");
	a = a.split("$").join("");
	a = a.split("%").join("");
	a = a.split("^").join("");
	a = a.split("*").join("");
	a = a.split(":").join("");
	a = a.split("!").join("");
	a = a.split("<").join("");
	a = a.split(">").join("");
	a = a.split("~").join("");
	a = a.split(";").join("");
	a = a.split(" ").join("+");
	a = a.split("%u2019").join("");
	a = a.split("%u201C").join("");
	a = a.split("%u201D").join("");
	a = a.split("%u2122").join("");
	return a;
}

// addEvent and removeEvent, designed by Aaron Moore
function addEvent(element, listener, handler){
	//if the system is not set up, set it up, and
	// store any outside script's event registration in the first handler slot
	if(typeof element[listener] != 'function' || typeof element[listener + '_num'] == 'undefined'){
		element[listener + '_num'] = 0;
		if(typeof element[listener] == 'function'){
			element[listener + 0] = element[listener];
			element[listener + '_num']++;
		}
		element[listener] = function(e){
			var r = true;
			e = (e) ? e : window.event;
			for(var i = 0; i < element[listener + '_num']; i++){
				if(element[listener + i](e) === false){ r = false;}
			}
			return r;
		};
	}
	//if handler is not already stored, assign it
	for(var i = 0; i < element[listener + '_num']; i++){
		if(element[listener + i] == handler){ return; }
	}
	element[listener + element[listener + '_num']] = handler;
	element[listener + '_num']++;
}

function removeEvent(element, listener, handler){
	//if the system is not set up, or there are no handlers to remove, exit
	if(	typeof element[listener] != 'function' || 
		typeof element[listener + '_num'] == 'undefined' || 
		element[listener + '_num'] === 0){
		return;
	}
	//loop through handlers,
	//  if target handler is reached, begin overwriting each  handler with the handler in front of it until one before the last
	var found = false;
	for(var i = 0; i < element[listener + '_num']; i++){
		if(!found){
			found = element[listener + i] == handler;
		}
		if(found && (i+1) < element[listener + '_num']){
			element[listener + i] = element[listener + (i+1)];
		}
	}
	//if handler was found, decrement the handler count
	if(found){
		element[listener + '_num']--;
	}
}

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
}
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};

function visibilityByTagName(tag, action) {
	e = document.getElementsByTagName(tag);
	len = e.length;
	for (var n = 0; n < len; n++) {
		e[n].style.visibility = action;
	}
}

function popup( url ) {
  window.open(url, 'anew', config='toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no,height=500,width=750');
  return false;
}

function popup2( url ) {
  window.open(url, 'anew', config='toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no,height=500,width=750');
  return false;
}
