/*
Saphire 1.0 
Copyright (c) 2008 Aaron Storck 
*/

//basic getElementByID alias
function $e(id)
{
	return document.getElementById(id);
}

//get flash element
function flashObj(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    }
    else {
        return document[movieName];
    }
}

function pageWidth() {return window.innerWidth != null? window.innerWidth : document.documentElement && document.documentElement.clientWidth ?       document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;} 
function pageHeight() {return  window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ?  document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;} 
function posLeft() {return typeof window.pageXOffset != 'undefined' ? window.pageXOffset :document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;} 
function posTop() {return typeof window.pageYOffset != 'undefined' ?  window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;} 
function posRight() {return posLeft()+pageWidth();} function posBottom() {return posTop()+pageHeight();}

function visibleArea()
{
	return {width: pageWidth(), height: pageHeight()};
}


//get all elements by className
function eByClass(oElm, strClassName, strTagName)
{
	if( strTagName == null ) strTagName = "*";
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}



//dom ready check
var onReadyExecuted = false; 
var ready = new Array();

function DOMIsReady()
{
	if( !onReadyExecuted )
	{
		onReadyExecuted = true;
		var func = null;
		for( var i = 0; i < ready.length; i++ )
		{
			func = ready[i];
			func();
		}
	}
}

if (document.addEventListener)
{
	document.addEventListener("DOMContentLoaded", DOMIsReady, false);
}
else if (document.all && !window.opera)
{
	document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');
	var contentloadtag = $e("contentloadtag");
	contentloadtag.onreadystatechange = function()
	{
    	if (this.readyState=="complete")
		{
			DOMIsReady();
		}
	}
}

window.onload=function()
{
  setTimeout(DOMIsReady, 0);
}

function bind(id,event,action)
{		
	if( typeof(id) == 'string' )
		var obj = $e(id);
	else
		var obj = id;
		
	if( obj.addEventListener )
	{
		obj.addEventListener(event, action, false);
	}
	else if( obj.attachEvent )
	{		
		obj.attachEvent('on'+event, function() { action.call(obj); });
	}
}

function bindList(id, binds)
{
	for( var i = 0; i < binds.length; i++ )
	{
		bind(id, binds[i].event, binds[i].action);
	} 
}

function fireEvent(id, event)
{
	if( document.createEvent )
	{
		var evObj = document.createEvent('MouseEvents');
		evObj.initEvent(event, true, false);
		$e(id).dispatchEvent(evObj);
	}
	else if( document.createEventObject )
	{
		$e(id).fireEvent('on'+event);
	}
}

function inject(id, params)
{
	var obj = $e(id);
	var template = decodeURI(obj.innerHTML);
	
	var pattern = /{(.*?)}/g;
	var result;
	var prevIndex = 0; 
	var len = 0;
	
	var instance = '';	
		
	while((result = pattern.exec(template)) != null )
	{		
		len = result.index - prevIndex;		
		
		instance += template.substr(prevIndex,len);
				
		prevIndex = pattern.lastIndex;
		
		if( params[result[1]] != null )
			instance += params[result[1]];
	}	
	
	len = template.length - prevIndex;
	instance += template.substr(prevIndex,len);
	
	return instance;		
} 
