/*
	Function: VIEWZI.util.d

		Helper function to get a div get element by id.

	Parameters:

		divLayer	 	- the name of the div you want to reference

	Returns:

		DomElement
*/

	VIEWZI.util.d = function(divLayer)
	{
		return document.getElementById(divLayer);
	};

/*
	Function: VIEWZI.util.getTimer

		Get the total milliseconds since API has loaded.

	Returns:

		Integer
*/

	VIEWZI.util.getTimer = function()
	{
		return new Date().getTime() - VIEWZI.start_time;
	};

/*
	Function: VIEWZI.util.parseHeight

		Get the height of a given element

	Parameters:

		divLayer	 	- the name of the div you want to reference

	Returns:

		Integer
*/

	VIEWZI.util.parseHeight = function(divLayer)
	{
		if(!VIEWZI.util.d(divLayer)){
			return 0;
		}
		return (YAHOO.util.Dom.getStyle(divLayer, 'display') !== "none") ? YAHOO.util.Dom.getRegion(divLayer).bottom-YAHOO.util.Dom.getRegion(divLayer).top : 0;
	};

/*
	Function: VIEWZI.util.parseWidth

		Get the width of a given element

	Parameters:

		divLayer	 	- the name of the div you want to reference

	Returns:

		Integer
*/

	VIEWZI.util.parseWidth = function(divLayer)
	{
		return (YAHOO.util.Dom.getStyle(divLayer, 'display') !== "none" && YAHOO.util.Dom.getStyle(divLayer, 'width') !== "auto") ? parseInt(YAHOO.util.Dom.getStyle(divLayer, 'width'), 10) : 0;
	};

/*
	Function: VIEWZI.util.loadScript

		Load a given script to execute in the interface.

	Parameters:

		src			- the source url you wish to execute
		callback	- the object to handle data response

	Returns:

		N/A
*/

	VIEWZI.util.loadScript = function(src)
	{
		var scriptElement = document.createElement('script');
		scriptElement.setAttribute('src', src );
		scriptElement.setAttribute('type', 'text/javascript');
		document.getElementsByTagName('head')[0].appendChild(scriptElement);
		return true;

		// var success = function(o)
		// {
		// 	eval(o.responseText);
		// };
		// 
		// var failure = function(o)
		// {
		// 	eval(o.responseText);
		// };
		// 
		// var callback = {
		// 	success: success,
		// 	failure: failure
		// };
		// 
		// YAHOO.util.Connect.asyncRequest('GET', src, callback);
	};

/*
	Function: VIEWZI.screenshot.parseHeight

		Get the height of a given element

	Parameters:

		divLayer	 	- the name of the div you want to reference

	Returns:

		Integer
*/

	VIEWZI.util.random = function()
	{
        return Math.floor( Math.random() * 1000000 );
	};

/*
	Function: VIEWZI.util.createParameter

		Helper function to create parameters for querystrings

	Parameters:

		parameter	- the name of the named pair
		value		- the value of the named pair

	Returns:

		String
*/

	VIEWZI.util.createParameter = function( parameter, value )
	{
	    if( value != null && value.length > 0 ) {
	        return "&" + parameter + "=" + encodeURIComponent(value);
	    } else {
	        return "";
	    }
	};

/*
	Function: VIEWZI.util.getSelectedValue

		Get the value of a given element

	Parameters:

		elementId	 	- the element you wish to retrieve value from

	Returns:

		String
*/

	VIEWZI.util.getSelectedValue = function( elementId )
	{
	    var selectBox = document.getElementById( elementId );

	    return selectBox != null ?
	        selectBox.options[ selectBox.selectedIndex ].value : "";
	};

/*
	Function: VIEWZI.util.toggleLayer

		toggle a layer on or off

	Parameters:

		whichLayer	 	- the element you wish to toggle the display of

	Returns:

		Integer
*/

	VIEWZI.util.toggleLayer = function (whichLayer)
	{
	  var elem, vis;
	  if( document.getElementById )
	    elem = document.getElementById( whichLayer );
	  else if( document.all )
	      elem = document.all[whichLayer];
	  else if( document.layers )
	    elem = document.layers[whichLayer];
	  vis = elem.style;
	  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
	    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
	  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
	};

/*
	Function: VIEWZI.util.breakUrl

		Break a given url on length for screen display

	Parameters:

		tText	 	- the text or url you wish to break upon
		tLen		- length (in characters) you wish to break the url on

	Returns:

		String
*/

	VIEWZI.util.breakUrl = function(tText, tLen)
	{
		var oText = tText;
		if(tText.length > tLen) {
			for(var x=tLen; x>0; x--) {
				if (tText.substr(x,1)=="/" || tText.substr(x,1)=="&") {
					var oText	= tText.substr(0,x+1)+"<wbr/>";
					oText		+= tText.substr(x+1);
					break;
				}
			}
		} else {
			var oText = tText;
		}
		return oText;
	};

/*
	Function: VIEWZI.util.uaStats

		Get the user agent stats of the given user

	Returns:

		Object
*/

	VIEWZI.util.uaStats = function()
	{
		var OSName		= "Unknown OS";
		if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
		if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
		if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
		if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";

		var ua			= YAHOO.env.ua;
		ua.useragent	= navigator.userAgent;
		ua.viewport		= YAHOO.util.Dom.getViewportWidth()+","+YAHOO.util.Dom.getViewportHeight();
		ua.docsize		= YAHOO.util.Dom.getDocumentWidth()+","+YAHOO.util.Dom.getDocumentHeight();
		ua.screensize	= screen.width+","+screen.height;
		ua.os			= OSName;

		return ua;
	};

/*
	Function: VIEWZI.util.openFeedback

		Open the feedback UI window within the shell.

	Returns:

		null
*/

	VIEWZI.util.openFeedback = function()
	{
		window.open(VIEWZI.baseurl+'/feedback.php', 'viewzifeedback','toolbar=0,width=475,height=375');
	};

/*
	Function: VIEWZI.util.addToBrowser

		Add Viewzi to your browsers search bar.

	Returns:

		null
*/

	VIEWZI.util.addToBrowser = function()
	{
		if (window.external && 'AddSearchProvider' in window.external)
		{
			window.external.AddSearchProvider(VIEWZI.baseurl + '/opensearch_desc.xml');
			VIEWZI.shell.createCookie('HasViewziSearchProvider',true,60);
			var animrate				= 1.5;
			var animease				= YAHOO.util.Easing.easeOutStrong;
			addViewziAnim	= new YAHOO.util.Anim('make-viewzi-yours', {"opacity": {to: "0"}}, animrate, animease);
			addViewziAnim.animate();
			
		}
		else
		{
			if (YAHOO.env.ua.webkit && navigator.appVersion.indexOf('Mac') !== -1)
			{
				window.location = VIEWZI.baseurl + '/add_safari.php';
			}
			else if (YAHOO.env.ua.opera)
			{
				window.location = VIEWZI.baseurl + '/add_opera.php';
			}
			else
			{
				alert('Your browser does not support OpenSearch.');
				VIEWZI.shell.createCookie('SearchProviderUnsuporrted',true,90);
			}
		}
	};

/*
	Function: VIEWZI.util.formatDate
		
		Formats a date in viewzi standard date format
		
	Returns:
		string
*/
	VIEWZI.util.formatDate = function(d){
		if(typeof d == 'string'){
			d = new Date(Date.parse(d));
		}
		var mon = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
		var ampm = 'am';
		var date = d.getDate();
		var year = d.getFullYear();
		if(date == 1 || date == 21 || date == 31){
			date = date + 'st';
		} else if(date == 2 || date == 22){
			date = date + 'nd';
		} else if(date == 3 || date == 23){
			date = date + 'rd';
		} else {
			date = date + 'th';
		}
		
		var h = d.getHours();
		var m = d.getMinutes();
		if(m < 10){
			m = '0' + m;
		}
		if(h > 11){
			ampm = 'pm';
			if(h > 12){
				h = h - 12;
			}
		}
		
		if(h == 0){
			h = 12;
		}
		
		// November 12th, 2008 at 9:37 pm
		return mon + ' ' + date + ', ' + year + (d.getHours() > 0 && d.getMinutes() > 0 ? ' at ' + h + ':' + m + ' ' + ampm : '');
		
	}