var dFacer = {photos:[],selectedOnly:false,host:"www.twiddla.com"};

dFacer.init = function(selectedOnly)
{
	var images = document.getElementsByTagName("IMG")
	for (var a=0; a<images.length; a++ )
	{
		var image = images[a];
		if (!selectedOnly || image.useMap == "dfacer")
		{
			dFacer.initImage(image)	;
		}
	}
	
	if(location.host.indexOf("twiddla") > -1)
	{
		dFacer.host = location.host;
	}
	
}

dFacer.initImage = function(image)
{
	var photo = new dFacer.Photo(image);
	if (photo && photo.ready)
	{
		dFacer.photos.push(photo);
		return true;
	}
	return false;
}

dFacer.hideAll = function()
{
	for (var a=0; a<dFacer.photos.length; a++ )
	{
		var photo = dFacer.photos[a];
		if (photo.frame)
		{
			photo.frame.style.display = "none";
			photo.close.style.display = "none";
		}
	}
}

//
// Static Helpers
//

// actually add an event listener, regardless of browser
dFacer.addListener = function(obj, eventType, listenerFunction)
{
	if (!obj)
	{
		alert("bad object for " + eventType + ", obj:" + obj + ", fn:" + listenerFunction + ", caller:" + addListener.caller);
		return;
	}
	if (obj.addEventListener)
	{
		obj.addEventListener(eventType, listenerFunction, true);
		
	}
	else if (obj.attachEvent)
	{
		var success = obj.attachEvent("on" + eventType, listenerFunction);
	}
}

// recursively find the X position of the specified element.	
dFacer.getLeft = function(obj)
{
	if (obj.offsetParent)
	{
		return obj.offsetLeft + dFacer.getLeft(obj.offsetParent);
	}
	else
	{
		return obj.offsetLeft;
	}
}

// recursively find the Y position of the specified element.	
dFacer.getTop = function(obj)
{
	if (obj.offsetParent)
	{
		var off = obj.offsetTop + dFacer.getTop(obj.offsetParent);
		return off;
	}
	else
	{
		return obj.offsetTop;
	}
}		


//
// Photo Class
//
dFacer.Photo = function(image)
{
	if (!image.src)
	{
		image = document.getElementById(image);
	}
	
	if (!image || !image.offsetWidth || !image.offsetHeight
		|| image.offsetWidth < 200
		|| image.offsetHeight < 200 )
	{
		// too small or bad reference.  
		this.ready = false;
		return;
	}
	this.image = image;
	this.link = document.createElement("A");
	this.link.href="javascript:void(null);";
	dFacer.addListener(this.link, "click", dFacer.Photo.prototype.onclick)
	this.link.style.position = "absolute";
	this.link.style.left = (dFacer.getLeft(image) + image.offsetWidth - 32) + "px";
	this.link.style.top = dFacer.getTop(image) + "px";
	this.link.style.zIndex = 1000;
	this.link.style.display = "none";
	
	var img = new Image();
	img.src = getProtocol() + "://img.twiddla.com/images/logo-corner-24.png";
	img.border = 0;
	this.link.appendChild(img);
	document.body.appendChild(this.link, this.image);
	
	var link = this.link;
	var timeout;
	dFacer.addListener(this.image, "mouseover", function(){clearTimeout(timeout);link.style.display="";});
	dFacer.addListener(this.image, "mouseout", function(){timeout = setTimeout(function(){link.style.display="none";},1000);});


	
	img.jref = this;
	this.link.jref = this;
	
	this.ready = true;
}

dFacer.Photo.prototype.onclick = function(e)
{
	var target = e.target ? e.currentTarget : e.srcElement;

	dFacer.hideAll();
	
	if (!target.jref.frame)
	{
		var frame = document.createElement("IFRAME");
		frame.allowTransparency = "true";
		frame.border = 0;
		frame.frameBorder = 0;
		frame.scrolling = "no";
		frame.style.position = "absolute";
		frame.style.border = "solid 1px #666";
		document.body.appendChild(frame);
		frame.src="http://" + dFacer.host + "/Widgets/dFacer.aspx?width=" + target.jref.image.offsetWidth + "&height=" + target.jref.image.offsetHeight + "&src=" + escape(target.jref.image.src)
		target.jref.frame = frame;

		var close = document.createElement("A");
		close.href="javascript:void(null);";
		dFacer.addListener(close, "click", dFacer.Photo.prototype.oncloseclick)
		close.style.position = "absolute";
		close.style.left = (dFacer.getLeft(target.jref.image) + target.jref.image.offsetWidth + 32) + "px";
		close.style.top = (dFacer.getTop(target.jref.image) + 4) + "px";
		close.style.zIndex = 1002;
		
		var img = new Image();
		img.src = getProtocol() + "://img.twiddla.com/images/toolbar/window-close.png";
		img.border = 0;
		close.appendChild(img);
		
		target.jref.close = close;
		document.body.appendChild(target.jref.close, target.jref.image);

	}
	
	var photo = target.jref.image;
	var frame = target.jref.frame;
	
	frame.style.left = dFacer.getLeft(photo) + "px";
	frame.style.top = dFacer.getTop(photo) + "px";
	frame.style.width = (photo.offsetWidth + 62) + "px";
	frame.style.height = (photo.offsetHeight -2) + "px";
	frame.style.display = "";
	frame.style.zIndex = 1001;
	
	target.jref.close.style.display = "";
	
	target.jref.link.blur();
	
}

dFacer.Photo.prototype.oncloseclick = function(e)
{
	dFacer.hideAll();
}


dFacer.addListener(window, "load", function(){dFacer.init(dFacer.selectedOnly)});

function getProtocol()
{
	return location.href.split(":")[0];
}
