
// _____[ toolkit ]_____ \\

var zsrtk =
{
	embed_link: null,
	embed_container: null,
	embed_code: null,
	transcript_link: null,
	transcript_container: null,
	handle: null,
	
	assignElements: function()
	{
		zsrtk.embed_link = document.getElementById('embed-this');
		zsrtk.embed_container = document.getElementById('embed-container');
		zsrtk.embed_code = document.getElementById('embed');
		zsrtk.transcript_link = document.getElementById('see-transcript');
		zsrtk.transcript_container = document.getElementById('transcript');
		zsrtk.handle = document.getElementById('handle');
	},
	
	assignListeners: function()
	{
		if(zsrtk.embed_link && zsrtk.embed_container && zsrtk.embed_code)
		{
			zsrtk.embed_link.onclick = zsrtk.toggleEmbedCode;
		}
		if(zsrtk.transcript_link && zsrtk.transcript_container)
		{
			zsrtk.transcript_link.onclick = zsrtk.toggleTranscript;
		}
	},
	
	buildTranscriptAccessories: function()
	{
		var closer = document.getElementById('closer');
		if(!closer)
		{
			var c = document.createElement('div');
			c.setAttribute('id','closer');
			zsrtk.transcript_container.insertBefore(c,zsrtk.transcript_container.firstChild);
			c.onclick = zsrtk.toggleTranscript;
		}
	},
	
	toggleEmbedCode: function()
	{
		zsrtk.embed_container.className = (zsrtk.embed_container.className == 'hide') ? 'show' : 'hide';
		zsrtk.embed_code.select();
		return false;
	},
	
	toggleTranscript: function()
	{
		var h = getStyle(zsrtk.transcript_container.parentNode,'height');
		zsrtk.transcript_container.style.height = h;
		zsrtk.transcript_container.className = (zsrtk.transcript_container.className == 'hide') ? 'show' : 'hide';
		zsrtk.buildTranscriptAccessories();
		dragDrop.initElement(zsrtk.handle);
		return false;
	},
	
	init: function()
	{
		zsrtk.assignElements();
		zsrtk.assignListeners();
	}
}
addLoadEvent(zsrtk.init);

////////////////////////////////////////////////
// accessories
////////////////////////////////////////////////

//_____[ DRAG AND DROP ]_____\\

dragDrop = 
{
	initialMouseX: undefined,
	initialMouseY: undefined,
	startX: undefined,
	startY: undefined,
	draggedObject: undefined,

	initElement: function(element)
	{
		element.onmousedown = dragDrop.startDragMouse;
	},
	
	startDragMouse: function(e)
	{
		dragDrop.startDrag(this.parentNode);
		var evt = e || window.event;
		dragDrop.initialMouseX = evt.clientX;
		dragDrop.initialMouseY = evt.clientY;
		document.onmousemove = dragDrop.dragMouse;
		document.onmouseup = dragDrop.releaseElement;
		return false;
	},

	startDrag: function(obj)
	{
		if(dragDrop.draggedObject)
		{
			dragDrop.releaseElement();
		}
		dragDrop.startX = obj.offsetLeft;
		dragDrop.startY = obj.offsetTop;
		dragDrop.draggedObject = obj;
		obj.className += ' dragged';
	},
	
	dragMouse: function(e)
	{
		var evt = e || window.event;
		var dX = evt.clientX - dragDrop.initialMouseX;
		var dY = evt.clientY - dragDrop.initialMouseY;
		dragDrop.setPosition(dX,dY);
		return false;
	},

	setPosition: function(dx,dy)
	{
		dragDrop.draggedObject.style.left = dragDrop.startX + dx + 'px';
		dragDrop.draggedObject.style.top = dragDrop.startY + dy + 'px';
	},

	releaseElement: function()
	{
		document.onmousemove = null;
		document.onmouseup = null;
		dragDrop.draggedObject.className = dragDrop.draggedObject.className.replace(/dragged/,'');
		dragDrop.draggedObject = null;
	}
}

function getStyle(element,property)
{
    var value = '';
    if(document.defaultView && document.defaultView.getComputedStyle)
	{
        var css = document.defaultView.getComputedStyle(element,null);
        value = css ? css.getPropertyValue(property) : null;
    }
    else if(element.currentStyle)
	{
        property = property.replace(/\-(\w)/g,function(matches,p1){return p1.toUpperCase();});
        value = element.currentStyle[property];
    }
    return value;
}
