function addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}

function setFooter() {
	var category = document.getElementById('category');
	var catHeader = document.getElementById('catHeader');
	var listings = document.getElementById('category-page-listings') || document.getElementById('category-listing3') || document.getElementById('localEventListing');
	if (category && catHeader && listings) {
		var newHeight = catHeader.clientHeight + listings.clientHeight + 10;;
		if (newHeight < 550) newHeight = 550;
		category.style.height = newHeight+"px";
	}
}

// http://snipplr.com/view/1696/get-elements-by-class-name/
function getElementsByClassName(classname, node) {
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}

function generateMaplinks () {
	var elm = document.getElementById('category-page-listings');
	// console.log("elm is %o",elm);
	if (elm) {
		var vcards = getElementsByClassName("vcard", elm);
		if (!vcards) return;
		// console.log(vcards);
		for(var i=0,j=vcards.length; i<j; i++) {
			var aVcard = vcards[i];
			// console.log("aVcard %o", aVcard);

			var companyNameElm = getElementsByClassName("mapcompanyname", aVcard);
			if (!companyNameElm[0]) continue;
			var companyName = companyNameElm[0].innerHTML;
			if (companyName) {
				companyName=companyName.replace(/,/g,""); // remove commas
				companyName = companyName + " near";
			}
			// console.log("companyName %o", companyName);

			var streetElm = getElementsByClassName("street-address", aVcard);
			if (!streetElm[0]) continue;
			var street = streetElm[0].innerHTML;
			if (street.indexOf("PO Box") > -1) {
				// can't map a PO Box, remove the link	
				continue;
			}
			// console.log("street %o", street);
			
			var localityElm = getElementsByClassName("locality", aVcard);
			if (!localityElm[0]) continue;
			var locality = localityElm[0].innerHTML;
			// console.log("locality %o", locality);

			var regionElm = getElementsByClassName("region", aVcard);
			if (!regionElm[0]) continue;
			var region = regionElm[0].innerHTML;
			// console.log("region %o", region);
			
			var zipElm = getElementsByClassName("postal-code", aVcard);
			if (!zipElm[0]) continue;
			var zip = zipElm[0].innerHTML;
			// console.log("zip %o", zip);

			var link = "http://maps.google.com/maps?q="+companyName+" "+street+", "+locality+", "+region+" "+zip+"&t=h&z=17";
			link=link.replace(/ /g,"+"); // replace spaces with plus sign
			link=link.replace(/&amp;/g,"and"); // remove ampersands
			link=link.replace(/#/g,""); // remove number signs
			// console.log(link);

			streetElm[0].href = link;
			streetElm[0].setAttribute('href', link); 

		}
	}
}

// console.log ("about to setFooter");
addEvent(window, 'load', setFooter);

// console.log ("about to generatemaplinks");
addEvent(window, 'load', generateMaplinks);
