/// ////////////////////////////////////////////////////////////////
/// ////////////////////////////////////////////////////////////////
/// ////////////////////////////////////////////////////////////////
///
/// File:        jsCommon.js
/// Authors:     Matthew Gaubatz
/// Created:     Thu, Sep 27, 2007
///
/// Version:     0.1
///
/// This file contains basic JavaScript routines and constants used 
/// by all of the pages in this site.  These routines include
/// shortcuts for dynamic HTML tag formation, DOM access, and image
/// re-sizing calculations.
///
/// (c) Copyright 2007, Hewlett-Packard Company, all rights reserved. 
///
/// /////////////////////////////////////////////////////////////////
/// /////////////////////////////////////////////////////////////////
/// /////////////////////////////////////////////////////////////////

//
// constants
//
var IMAGE_STATE_DRAGGED = -1;
var IMAGE_STATE_LOADED = 0;
var IMAGE_STATE_UPLOADING = 1;
var IMAGE_STATE_PROCESSING = 2;
var IMAGE_STATE_FEEDBACK = 3;
var IMAGE_STATE_THANK = 4;

var GREY_COLOR = '#e7e7e7';
var WHITE_COLOR = '#ffffff';

//
// broswer identification
//
var BROWSER_STATE_IE = -1;
var BROWSER_STATE_FIREFOX = 0;
var BROWSER_STATE_SAFARI = 1;
var BROWSER_STATE_OPERA = 2;
var BROWSER_STATE_MOZILLA = 3;

var BROWSER_STATE = BROWSER_STATE_IE;

var ua = navigator.userAgent.toLowerCase();
if ( ua.indexOf( "opera" ) != -1 ) 
{
	BROWSER_STATE = BROWSER_STATE_OPERA;
} 
else if ( ua.indexOf( "msie" ) != -1 ) 
{
	BROWSER_STATE = BROWSER_STATE_IE;
} 
else if ( ua.indexOf( "safari" ) != -1 ) 
{
	BROWSER_STATE = BROWSER_STATE_SAFARI;
} 
else if ( ua.indexOf( "mozilla" ) != -1 ) 
{
	if ( ua.indexOf( "firefox" ) != -1 ) {
		BROWSER_STATE = BROWSER_STATE_FIREFOX;
	} else {
		BROWSER_STATE = BROWSER_STATE_MOZILLA;
	}
}

//
// generic shortcut
//
function DOM(tag)
{
	return document.getElementById(tag);
}

//
// tag manipulation routines
//
function jsTagStart(name)
{
	str = '<' + name;
	return str;
}
function jsTagEnd()
{
	return '>';
}
function jsTagOption(name,value)
{
	str = ' ' + name + '=\"' + value + '\"';
	return str;
}
function jsTag(name)
{
	str = jsTagStart(name);
	str += jsTagEnd();
	return str;
}
function jsSlashTag(name)
{
	str = jsTag('/'+name);
	return str;
}


//
// tag DOM routines
//
function jsSetTagContent(tag,str)
{
	DOM(tag).innerHTML = str;
}
function jsSetTagBackgroundColor(tag,str)
{
	DOM(tag).style.backgroundColor = str;
}

function jsHideTag(tag)
{
	DOM(tag).style.visibility = 'hidden';
}
function jsShowTag(tag)
{
	DOM(tag).style.visibility = 'visible';
}


//
// control cursor behavior
//
function jsSetCursor(str)
{
	document.body.style.cursor = str;
}

//
// convert the name of a selected image file, given in 'str', to a web-adressable
// URI that can be loaded into an <img> tag; used to display the image selected
// by the user on the page
//
function jsCreateFileURI(str)
{	
	k = 0;
	N = str.length;
	newstr = "file:///";				
	while ( k < N )
	{
		c = str.charAt(k);					
		if ( str.charAt(k) == "\\" )
		{
			newstr += "/";
		}
		else
		{
			newstr += c;
		}			
		k = k + 1;
	}
	return newstr;
}

//
// re-sized image dimension calculations
//
function jsGetResizedImageWidth(defaultWidth,defaultHeight,limitWidth)
{
	if ( defaultWidth > defaultHeight )
	{
		return limitWidth;
	}
	else
	{
		return 	Math.round( limitWidth*defaultWidth/defaultHeight );
	}
}
function jsGetResizedImageHeight(defaultWidth,defaultHeight,limitHeight)
{
	return jsGetResizedImageWidth(defaultHeight,defaultWidth,limitHeight);
}

//
// debugging tools
//
var LOGGING_OFF = 0;
var LOGGING_DEBUG = 1;
var nLoggingState = LOGGING_OFF;
function jsLog(str)
{
	if ( nLoggingState == LOGGING_DEBUG ) 
	{
		if ( self )
		{
			if ( self.status )
			{
				self.status = str;
			}
		}	
	}
}

