/*
Welcome to the CHOT:
Chris Holland Outline Toolbox
This is a work in progress

For more info:
frenchy@gmail.com
http://chrisholland.blogspot.com/

Copyright Chris Holland 2004-2005
Some rights reserved under a Creative Commons License:
Share-alike, with Attribution, do whatever you want with it beyond that :)
http://www.creativecommons.org/

*/

/* start basic stuff */

function isWithinNode(e,i,c,t,obj) {
answer = false;
te = e;
while(te && !answer) {
	if	((te.id && (te.id == i)) || (te.className && (te.className == i+"Class"))
			|| (!t && c && te.className && (te.className == c))
			|| (!t && c && te.className && (te.className.indexOf(c) != -1))
			|| (t && te.tagName && (te.tagName.toLowerCase() == t))
			|| (obj && (te == obj))
		) {
		answer = te;
	} else {
		te = te.parentNode;
	}
}
return te;
}//isWithinNode

function getElementsByClassName(tagName, cName, refElement) {
	searchElement = refElement ? refElement : document;
	dels = searchElement.getElementsByTagName(tagName);
	els = new Array(); j = 0;
	for (t = 0; dels[t]; t++) {
		if (
				(c = dels[t].className)
					&&
					(
						(c == cName) || (c.indexOf(cName) != -1)
					)
			) {
			els[j] = dels[t];
			j++;
		}
	}
	if (els.length == 0) els = null;
	return els;
}//getElementsByClassName

function getEvent(event) {
return (event ? event : window.event);
}//getEvent()

function getEventElement(e) {
return (e.srcElement ? e.srcElement: (e.target ? e.target : e.currentTarget));
}//getEventElement()

function scape(s) {
return (window.encodeURIComponent?encodeURIComponent(s):escape(s));
}

/* end basic stuff */


function handleTelephoneHover(telEl) {
	if (!telEl.title) {
		telEl.title = "Call Me For a Good Time! :)";
	}
}//handleTelephoneHover

function handleAddressHover(adrEl) {
	if (!adrEl.title) {
		adrEl.title = "Write me please!";
	}
}//handleAddress

function getFieldValue(fname,vobj,attrName) {
	fStr = "n/a";
		fEl = getElementsByClassName("span",fname,vobj);
		if (!fEl) fEl = getElementsByClassName("div",fname,vobj);
		if (!fEl) fEl = getElementsByClassName("a",fname,vobj);
		if (fEl) {
			fEl = fEl[0];
			fStr = attrName ? fEl.getAttribute(attrName) : fEl.innerHTML
		}
	return fStr;
}//getFieldValue

function handleVcardHover(vcardEl) {
	if (!vcardEl.title) {
		vcardEl.title = "Add this Person to your Address Book!";
		
		anchor = document.createElement("a");
		
		org = getFieldValue("org",vcardEl);
		fn = getFieldValue("fn",vcardEl);
		fname = fn.split(" ")[0];
		lname = fn.split(" ")[1];
		url1 = getFieldValue("url",vcardEl,"href");
		adr_st = getFieldValue("street-address",vcardEl);
		adr_city = getFieldValue("locality",vcardEl);
		adr_state = getFieldValue("region",vcardEl);
		adr_zip = getFieldValue("postal-code",vcardEl);
		tel_work = getFieldValue("tel",vcardEl);
		email1 = getFieldValue("email",vcardEl);
		sip = getFieldValue("sip",vcardEl);
		
		anchorText = "Add " + fn + " to your Address Book";
		saveUrl = "http://searchutils.earthlink.net/sa/vCard?org="+scape(org)+"&lname="+scape(lname)+"&fname="+scape(fname)+"&fn="+scape(fn)+"&url1="+scape(url1)+"&adr_st="+scape(adr_st)+"&adr_city="+scape(adr_city)+"&adr_state="+scape(adr_state)+"&adr_zip="+scape(adr_zip)+"&tel_work="+scape(tel_work)+"&email1="+scape(email1)+"&sip="+scape(sip);

		anchor.setAttribute("href",saveUrl);
		anchor.setAttribute("target","get_" + fn);
		anchor.setAttribute("class","hcardSaveLink");
		anchor.innerHTML = anchorText;

		
		iframe = document.createElement("iframe");
		iframe.setAttribute("name","get_" + fn);
		iframe.setAttribute("class","hcardSave");
		iframe.setAttribute("width","1");
		iframe.setAttribute("height","1");
		iframe.setAttribute("src","about:blank");
		
		anchor = vcardEl.insertBefore(anchor,vcardEl.firstChild);
		iframe = vcardEl.insertBefore(iframe,anchor);
		iframe.className = "hcardSave";
		anchor.className = "hcardSaveLink";


/* desired payload:

BEGIN:VCARD
VERSION:3.0
ENCODING:UTF-8
PROFILE:VCARD
ORG:EarthLink
FN:Chris Holland
EMAIL;INTERNET:valmont@wildstar.net
URL:http://chrisholland.blogspot.com/
ADR:;;734 Bayview Dr.;Hermosa Beach;CA;90254;
TEL;type=WORK:626 345 2417
END:VCARD
*/
		
	}
}//handleVcardHover

function handleMouseOver(event) {
e = getEvent(event);
eL = getEventElement(e);

	if (tel = isWithinNode(eL,null,"tel")) {
		handleTelephoneHover(tel);		
	} else if (adr = isWithinNode(eL,null,"adr")) {
		handleAddressHover(adr);
	} else if (vcard = isWithinNode(eL,null,"vcard")) {
		handleVcardHover(vcard);
	}
	
}//handleClick

function registerEvent(o,es,funcPointer) {
	if (o.addEventListener) o.addEventListener(es,funcPointer,false);
	else if (o.attachEvent) o.attachEvent("on"+es,funcPointer);
	else o["on" + es] = funcPointer;
}//registerEvent

function registerHcard() {
	registerEvent(document.body, "mouseover", handleMouseOver);
}

function initHcard() {
}//initHcard


window.onload = registerHcard;
