/*
    garrattfuncs.js

    common and useful functions
*/

function opacity(id, opacStart, opacEnd, millisec) 
{
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacStart > opacEnd) 
	{
		for(i = opacStart; i >= opacEnd; i--) 
		{
			setTimeout("changeOpac(" + i + ",'" + id + "',0)",(timer * speed));
			timer++;
		}
	} 
	else if(opacStart < opacEnd) 
	{
		for(i = opacStart; i <= opacEnd; i++)
		{
			setTimeout("changeOpac(" + i + ",'" + id + "',1)",(timer * speed));
			timer++;
		}
	}
}

//change the opacity for different browsers
function changeOpac(opacity, id, dir) 
{
	var object = document.getElementById(id).style; 
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
	
	if( (dir == 1) && (opacity==100) )
    {
        imageFaded();
    }
    else if( (dir == 0) && (opacity==0) )
    {
        imageFaded();
    }
}

function shiftOpacity(id, millisec) 
{
	//if an element is invisible, make it visible, else make it ivisible
	if(document.getElementById(id).style.opacity == 100) 
	{
		opacity(id, 100, 0, millisec);
	} 
	else 
	{
		opacity(id, 0, 100, millisec);
	}
}

function getWindowHeight() 
{
    var windowHeight = 0;
    if (typeof(window.innerHeight) == 'number') 
    {
    	windowHeight = window.innerHeight;
    }
    else 
    {
    	if (document.documentElement && document.documentElement.clientHeight) 
        {
    		windowHeight = document.documentElement.clientHeight;
    	}
    	else 
        {
    		if (document.body && document.body.clientHeight) 
            {
    			windowHeight = document.body.clientHeight;
    		}
    	}
    }
    
    return windowHeight;
}
		
function centerDiv( thediv ) 
{
	if (document.getElementById) 
    {
		var windowHeight = getWindowHeight();
		if (windowHeight > 0) 
        {
			var contentElement = document.getElementById( thediv );
			var contentHeight = contentElement.offsetHeight;
			if (windowHeight - contentHeight > 0) 
            {
				contentElement.style.position = 'relative';
				contentElement.style.top = ((windowHeight / 2) - (contentHeight / 2)) + 'px';
			}
			else 
            {
				contentElement.style.position = 'static';
			}
		}
	}
}

function trim( str )
{
    var trimmed = str.replace(/^\s+|\s+$/g, '');
    
    return trimmed;
}

function isnumber( str )
{
    return str.match(/^\d+$/);
}

function isCurrency(f)
{
	var nNum = 0;			// Total numbers for currency value.
	var nDollarSign = 0;	// Total times a dollar sign occurs.
	var nDecimal = 0;		// Total times a decimal point occurs.
	var nCommas = 0;		// Total times a comma occurs.
	var txtLen;				// Length of string passed.
	var xTxt;				// Assigned object passed.
	var sDollarVal;			// Assigned dollar amount with or without commas.
	var bComma;				
	var decPos;				// Assigned value of numbers or positions after decimal point.
	var nNumCount = 0;		// Total number between commas.
	var i;					// For forloop indexing.
	var x;					// Assigned each indivual character in string.

    // Set the xTxt variable to the object passed to this function.
	// Assign the length of the string to txtLen.

	xTxt = f;
	
	txtLen = xTxt.value.length

	for(i = 0; i < txtLen; i++)
	{
		// Assign charater in substring to x.
		x = xTxt.value.substr(i, 1);

		if(x == "£")
			nDollarSign = nDollarSign + 1; // Sum total times dollar sign occurs.
		else if(x == ".")
			nDecimal = nDecimal + 1; // Sum total times decimal point occurs.
		else if(x == ",")
			nCommas = nCommas + 1; // Sum total times comma occurs.
		else if(parseInt(x) >= 0 || parseInt(x) <= 9)
			nNum = nNum + 1; // If the character is a number sum total times a number occurs.
		else
		{
			// Error occurs if any other character value is in the string
			// othere then the valid characters.
			alert("ERROR! \n\nYou have entered an illegal value!\nPlease enter only: Pound" +
				  " Signs, Commas, Decimal Points, and numbers between 0...9!");
			return false;
		} // end else

	} // end for

	if(nDollarSign > 1)
	{
		alert("ERROR! \n\nYou have entered more then one pound sign!\nPlease only enter one!");
		return false;
	} // end if

	if(nDecimal > 1)
	{
		alert("ERROR! \n\nYou have entered more then one decimal point!\nPlease only enter one!");
		return false;
	} // end if

	if(nDollarSign == 1)
	{
		// Make sure dollar sign in the first character in string
		// if there is a dollar sign present.
		if(xTxt.value.indexOf("$") != 0)
		{
			alert("ERROR!  \n\nThe dollar sign you entered is not in the correct position!");
			return false;
		} // end if

	}// end if

	if(nDecimal == 1)
	{
		// Get the number of numbers after the decimal point in
		// the string if there is a decimal point present
		decPos = (txtLen - 1) - xTxt.value.indexOf(".");
		
		// Floating point cannot be more then two.
		// Valid format after decimal point.

		/**********************************/

		/*   $#.##, $#.#, $.#, $#., $.##  */

		/**********************************/

		if(decPos > 2)
		{
			alert("ERROR! \n\nThe decimal point you entered is not in the correct position!");
			return false;
		} // end if

	} // end if

	if(nCommas == 0)
	{
		// If no commas are present value is a valid US
		// currency.
		return true;
	}
	else
	{
		// Get total number of dollar number(s), removing
		// floating point numbers or cents.
		nNum = nNum - decPos;

		// Determine if dollar sign is in string so to be 
		// removed.

		// After determining dollar sign, assign sDollarVal
		// numbers and comma(s)

		if(xTxt.value.indexOf("$", 0) == 0)
			sDollarVal = xTxt.value.substr(1, (nNum + nCommas));
		else
			sDollarVal = xTxt.value.substr(0, (nNum + nCommas));
		
		// Determine if a zero is the first number or if a
		// comma is the first or last character in the string.

		if(sDollarVal.lastIndexOf("0", 0) == 0 )
		{
			alert("ERROR! \n\nYou cannot start the dollar amount out with a zero!");
			return false;
		}
		else if(sDollarVal.lastIndexOf(",", 0) == 0)
		{
			alert("ERROR! \n\nYou cannot start the dollar amount out with a comma!");
			return false;
		}
		else if(sDollarVal.indexOf(",", (sDollarVal.length - 1)) == (sDollarVal.length - 1))
		{
			alert("ERROR! \n\nYou cannot end the dollar amount with a comma!");
			return false;
		}
		else
		{
			// Initialize bComma indicating a comma has not been
			// occured yet.

			bComma = false;

			for(i = 0; i < sDollarVal.length; i++)
			{
				// Assign charater in substring to x.
				x = sDollarVal.substr(i, 1);
				
				if(parseInt(x) >= 0 || parseInt(x) <= 9)
				{
					// If x is a number add one to the number counter.
					nNumCount = nNumCount + 1;
					
					// Sense comma(s) are present number counter cannot
					// be more then three before the first or next comma.

					if(nNumCount > 3)
					{
						alert("ERROR! \n\nYou have a mis-placed comma!");
						return false;
					} // end if

				}
				else
				{
					// If the number counter is less then three and
					// the comma indicator is true the comma is either
					// mis-placed or there are not enough values.

					if(nNumCount != 3 && bComma)
					{
						alert("ERROR! \n\nYou have a mis-placed comma!");
						return false;
					} // end if
					
					// Reset the number counter back to zero.
					nNumCount = 0;

					
					// Set the comma indicator to true indicating
					// that the first comma has been found and that
					// there now MUST be three numbers after each
					// comma until the loop hits the end.
					bComma = true;

				} // end if

			} // end for
			
			// Determine if after the loop ended that there
			// was a total of three final numbers after the
			// last comma.

			if(nNumCount != 3 && bComma)
			{
				alert("ERROR! \n\nYou have a mis-placed comma!");
				return false;

			} // end if

		} // end if

	} // end if

	// Return true indicating that the value is a valid
	// currency.
	return true;
}
