/********* Preload Image for Please Wait Screen ***********/
	image1 = new Image();
	image1.src = "images/loading.gif";
	image2 = new Image();
	image2.src = "images/waiting.gif";

/***************** xmlToArray Start *********************/
//Parameters: xmlString, root name to start parse
//Returns Array of XML Data
//Requires admin/js/xmlparse.js
function xmlToArray(xmlString, root)
{
	var thisXmlArray= new Array();
	var res=new Array();
	res=XMLParse.xml2ObjArray(xmlString, root);
	for(var i in res[0])
	{
		thisXmlArray[i]=res[0][i];
	}
	return thisXmlArray;
}
/***************** xmlToArray End *********************/

/***************** Toggle Checkboxes Start *********************/
//CheckUncheck all Checkboxes

function toggleCheckboxes(check)
{

	formObj = check.form;
	for (var i=0;i < formObj.length;i++) {
		fldObj = formObj.elements[i];
		if (fldObj.type == 'checkbox' && fldObj.className!='notoggle'  && !fldObj.disabled) {
			fldObj.checked = check.checked;
			checkboxUpdate(fldObj);
		}
	}
}
//CheckUncheck single checkbox
function toggleCheckbox(checkboxID)
{
	var fldObj=$(checkboxID);	
	if (fldObj.type == 'checkbox' && !fldObj.disabled) {
		fldObj.checked = !fldObj.checked;
		
		if(fldObj.checked)
		{
			var rowObj=fldObj.parentNode.parentNode;
			Element.extend(rowObj);		
			rowObj.className='rowSelected';
			
		}
		else
		{
			var rowObj=fldObj.parentNode.parentNode;
			Element.extend(rowObj);		
			rowObj.toggleClassName('rowSelected');
		}
	}
	

}
function checkboxUpdate(fldObj)
{
	if (fldObj.type == 'checkbox' && !fldObj.disabled) {
	
		if(fldObj.checked)
		{
			var rowObj=fldObj.parentNode.parentNode;
			Element.extend(rowObj);		
			rowObj.className='rowSelected';
			
		}
		else
		{
			var rowObj=fldObj.parentNode.parentNode;
			Element.extend(rowObj);		
			rowObj.toggleClassName('rowSelected');
			
		}
	}	
}

/***************** Toggle Checkboxes End *********************/


function addRowClassName(rowObj, addClassName)
{
	Element.extend(rowObj);
	if(!rowObj.hasClassName('rowSelected'))
	{
		if(!rowObj.hasClassName(addClassName))
			rowObj.className=addClassName;
	}
	
}
function removeRowClassName(rowObj, className)
{
	Element.extend(rowObj);
	if(!rowObj.hasClassName('rowSelected'))
	{
		if(rowObj.hasClassName(className))
			rowObj.removeClassName(className);
	}
	
}

/***************** Message Start *********************/
//Style: success, information, caution, error
//Headline: Bold text
//Text: body of message
//Display (optional): true or false (to display message or just set it)
//Scroll (optional): true to scroll window to message
//ScrollToid (optional): string of id to scroll to other then 'message'
function setMessage(style, headline, text, display, scroll, scrollToid)
{
	var message=$('message');
	style=style.toLowerCase();
	message.className='msg'+style;
	message.innerHTML='<h1>'+headline+'</h1><p>'+text+'</p>';
	$('message').className='msg'+style;
	if(display)	
		Element.show('message');
	if(scroll)
	{
		var s;
		if (document.documentElement && document.documentElement.scrollTop) {
			 s = document.documentElement.scrollTop;
		}else if (document.body) {
			s = document.body.scrollTop;
		}	

		if(s>$('message').cumulativeOffset()[1])
		{
			if(scrollToid&&scrollToid!=''&&$(scrollToid))
				$(scrollToid).scrollTo();
			else
				$('message').scrollTo();	
			
		}
	}
	return false;
}
function clearMessage()
{
	if($('message'))
		Element.hide('message');
	return false;
}
/***************** Message End *********************/


/***************** Buttons Start *********************/
function goLite(thisBtn)
{
	thisBtn.className="buttonHover";
}
function goDim(thisBtn)
{
	thisBtn.className="button";
}
function goLite2nd(thisBtn)
{
	thisBtn.className="buttonSecondaryHover";
}
function goDim2nd(thisBtn)
{
	thisBtn.className="buttonSecondary";
}

function goLite2(thisBtn)
{
	thisBtn.addClassName('btn2Hover')
}
function goDim2(thisBtn)
{
	thisBtn.removeClassName('btn2Hover')
}
/***************** Buttons End *********************/


/***************** Error Popups Start *********************/
function errorDialog(errorText, id, pos,width) {
	YAHOO.namespace("container");
	if(errorText=='')
	{
		if($('errorPopUp'))
			YAHOO.container.errorPopUp.hide();
		return false;
	}	
	// Initialize the temporary Panel to display while waiting for external content to load
	if(width&&width!='')
		YAHOO.container.errorPopUp = new YAHOO.widget.Panel("errorPopUp",  {  context:[id,"t"+pos,"b"+pos], width:width+'px', visible:false, draggable:false, close:false, zIndex:10 } );
	else
		YAHOO.container.errorPopUp = new YAHOO.widget.Panel("errorPopUp",  {  context:[id,"t"+pos,"b"+pos],  visible:false, draggable:false, close:false, zIndex:10 } );		
	//YAHOO.container.errorPopUp.setHeader('Error');
	YAHOO.container.errorPopUp.setBody(errorText);
	YAHOO.container.errorPopUp.render(document.body);
	// Show the Panel
	YAHOO.container.errorPopUp.show();
	return false;
}
/***************** Error Popups End *********************/

/***************** Redirect Start *********************/
function redirect(link, sMsg)
{
	loading(true);
	window.location=link;
}
/***************** Redirect End *********************/

/***************** isNumeric Start *********************/
function isNumeric(sText)
{
   if(isNaN(sText))
	return false;
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
   if(typeof sText == 'undefined')
   	return false;

   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
}
/***************** isNumeric Start *********************/

/***************** addCommas Start *********************/
function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}
/***************** addCommas Start *********************/

/***************** Loading Message Start *********************/
//Requires YUI containerYUI.php file included
function loading(vis, msg) {

	var msg = (msg == null) ? "Loading, please wait..." : msg;
	YAHOO.namespace("container");
	if(vis)
	{
		// Initialize the temporary Panel to display while waiting for external content to load
		YAHOO.container.wait = 
		new YAHOO.widget.Panel("wait",  
				{ width:"230px", 
				  fixedcenter:true, 
				  close:true, 
				  draggable:false, 
				  modal:true,
				  zIndex: 50,
				  visible:false 
				} 
			);
		YAHOO.container.wait.setHeader(msg);
		YAHOO.container.wait.setBody("<img src=\"images/loading.gif\"/>");
		YAHOO.container.wait.render(document.body);
		// Show the Panel
		YAHOO.container.wait.show();
	}
	else
	{
		YAHOO.container.wait.hide();
	}
}
/***************** Loading Message End *********************/

/***************** Loading NEW Message Start *********************/
var Loading = new function() { 

	 this.show = function(text) {
	 	if(text=='')
	 	{	
	 		//hide loader
	 		if($('loading-status'))
		 		$('loading-status').fade({ duration: 1.0});
	 	}
	 	else if($('loading-status'))
	 	{
	 		$$('#loading-status span')[0].innerHTML=text;
	 		$('loading-status').appear({ duration: 0});
	 	}
	 	else
	 	{
	 		Element.insert($('footer'), {after: '<div id="loading-status" class="loading-status"><span>'+text+'</span> <img src="http://img1.mannamanager.com/images/loader_yellowbg.gif"  height="16px" width="16px" align="top"></div>'});
	 	}
	 	return true;
	 }

}
/***************** Loading NEW Message End *********************/


/***************** Find Users Start *********************/
function user_find() {
	locwind='searchusers.php';
	LeftPosition=(screen.width)?(screen.width-400)/2:100;
	TopPosition=(screen.height)?(screen.height-400)/2:100;
	mywindow=open(locwind,'name','top='+TopPosition+',left='+LeftPosition+',scrollbars=yes, width=500,height=400');
	mywindow.location.href = locwind;
	if (mywindow.opener == null) mywindow.opener = self;
}
/***************** Find Users End *********************/

/***************** Form Error Checking Start *********************/
function form_submit(FRM) {
	//loading(true);
	// checks to see if errors... if yes disable submit -- change to error message popup
	var areErrors=false;
	var inp=document.getElementsByTagName('input');
	for(var i=0;i<inp.length;i++){
	
		if($(inp[i]).hasClassName('requiredText')||$(inp[i]).hasClassName('requiredNumber')||$(inp[i]).className.indexOf('requiredLength')>=0)
			form_verify(inp[i].name);
		if(!areErrors&&$('errorID'+inp[i].name))
			areErrors=true;
	}
	var inp=document.getElementsByTagName('textarea');
	for(var i=0;i<inp.length;i++){
	
		if($(inp[i]).hasClassName('requiredText')||$(inp[i]).hasClassName('requiredNumber')||$(inp[i]).className.indexOf('requiredLength')>=0)
			form_verify(inp[i].name);
		if(!areErrors&&$('errorID'+inp[i].name))
			areErrors=true;
	}
	var inp=document.getElementsByTagName('select');
	for(var i=0;i<inp.length;i++){
	
		if($(inp[i]).hasClassName('requiredText')||$(inp[i]).hasClassName('requiredNumber')||$(inp[i]).hasClassName('optionalNumber')||$(inp[i]).className.indexOf('requiredLength')>=0||$(inp[i]).className.indexOf('optionalLength')>=0)
			form_verify(inp[i].name);
		if(!areErrors&&$('errorID'+inp[i].name))
			areErrors=true;
	}		
	if(areErrors&&confirm("There are errors on the page. Are you sure you want to submit this information?"))
	{
		window.document.forms[FRM].submit();
		return false;
	}
	else if(areErrors)
		return false;
		
	return true;
}

//requiredText, requiredNumber, requiredLength|##||
function form_verify(FLD) {

	if($(FLD).hasClassName('requiredText')&&$(FLD).value=="")
		addError($(FLD).name,'Required field');
	else if($(FLD).hasClassName('requiredNumber')&&($(FLD).value==""||!isNumeric($(FLD).value)))
		addError($(FLD).name,'Required field. Must be a number.');
	else if($(FLD).hasClassName('optionalNumber')&&($(FLD).value!=""&&!isNumeric($(FLD).value)))
		addError($(FLD).name,'Must be a number.');		
	else if($(FLD).className.indexOf('requiredLength')>=0&&($(FLD).value==""||$(FLD).value.length>$(FLD).className.substring($(FLD).className.indexOf('|')+1,$(FLD).className.indexOf('||'))))
		addError($(FLD).name,'Required field. Must be less then '+$(FLD).className.substring($(FLD).className.indexOf('|')+1,$(FLD).className.indexOf('||'))+' characters.');	
	else if($(FLD).className.indexOf('optionalLength')>=0&&($(FLD).value!=""&&$(FLD).value.length>$(FLD).className.substring($(FLD).className.indexOf('|')+1,$(FLD).className.indexOf('||'))))
		addError($(FLD).name,'Must be less then '+$(FLD).className.substring($(FLD).className.indexOf('|')+1,$(FLD).className.indexOf('||'))+' characters.');
	else
		removeError($(FLD).name);
}
function addError(FLD, text)
{
	removeError(FLD);
	var theNewParagraph = document.createElement('span');
	theNewParagraph.id="errorID"+FLD;
	theNewParagraph.className="displayError";
	var theTextOfTheParagraph = document.createTextNode(text);
	theNewParagraph.appendChild(theTextOfTheParagraph);
	document.getElementById(FLD).parentNode.appendChild(theNewParagraph);
}
function removeError(FLD)
{
	if($("errorID"+FLD))
		$(FLD).parentNode.removeChild($('errorID'+FLD));
}

/***************** Form Error Checking End *********************/

/***************** Confirmation Start *********************/
//Also in /js/functions.js
function confirmDisplay(str, okFunction, badFunction, title, iconDisplay) {
	YAHOO.namespace("widget");

	if(str==null)
		str='Do you want to continue?';
	if(title==null)
		title='Confirm';
	switch(iconDisplay)
	{
		case "warn":
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_WARN;
			break 
		case 'help':
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_HELP;
			break 
		case 'tip':
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_TIP;
			break 
		case 'info':
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_INFO;
			break 
		default:
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_HELP;
	}
	// Define various event handlers for Dialog
	var handleYes = function() {
		this.hide();
		eval(okFunction);
		return false;
	};
	var handleNo = function() {
		this.hide();
		eval(badFunction);		
		return false;
	};
	YAHOO.namespace("container");
	// Instantiate the Dialog
	YAHOO.container.simpledialog1 = new YAHOO.widget.SimpleDialog("simpledialog1", { width: "300px", fixedcenter: true, modal:true, zIndex : 1000, visible: false, draggable: false, close: true, text: str, icon: iconDisplay, constraintoviewport: true, zIndex: 30000 , buttons: [ { text:"Yes", handler:handleYes, isDefault:true },{ text:"No",  handler:handleNo } ] } );
	YAHOO.container.simpledialog1.setHeader(title);
	// Render the Dialog
	YAHOO.container.simpledialog1.render(document.body);
	YAHOO.container.simpledialog1.show();

	YAHOO.util.Event.addListener("show", "click", YAHOO.container.simpledialog1.show, YAHOO.container.simpledialog1, true);
	YAHOO.util.Event.addListener("hide", "click", YAHOO.container.simpledialog1.hide, YAHOO.container.simpledialog1, true);

}
/***************** Confirmation End *********************/

/***************** Alert Start *********************/
function alertDisplay(str, title, iconDisplay, returnFunction) {
	
	if(str==null)
		str='Unknown error. Please contact support.';
	if(title==null)
		title='Alert';
		
	switch(iconDisplay)
	{
		case "warn":
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_WARN;
			break 
		case 'help':
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_HELP;
			break 
		case 'tip':
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_TIP;
			break 
		case 'info':
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_INFO;
			break 
		default:
			iconDisplay=YAHOO.widget.SimpleDialog.ICON_WARN;
	}

	// Define various event handlers for Dialog
	var handleOK = function() {
		this.hide();
		if(returnFunction!=null)
			eval(returnFunction);
	};

	YAHOO.namespace("container");
		
	// Instantiate the Dialog
	YAHOO.container.simpledialog1 = new YAHOO.widget.SimpleDialog("simpledialog1", { width: "300px", fixedcenter: true, visible: false, draggable: false, close: true, text: str, icon: iconDisplay, constraintoviewport: true, zIndex: 30000 ,buttons: [ { text:"OK", handler:handleOK, isDefault:true }] } );
	YAHOO.container.simpledialog1.setHeader(title);
	// Render the Dialog
	YAHOO.container.simpledialog1.render(document.body);
	YAHOO.container.simpledialog1.show();
	
}
/***************** Alert End *********************/

/***************** Scroll To Start *********************/
function windowScrollTo(ypos, offset) {
	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	if(myHeight-ypos<140) {
		window.scrollTo(0,ypos-(myHeight-offset));
	}
}
/***************** Scroll To End *********************/

/***************** Enter Submit Start *********************/

function enterSubmit(e, functionName){
	var key=e.keyCode || e.which;
	if (key==13){
		eval(functionName);
	}
}
/***************** Enter Submit End *********************/

/***************** Add to Order History Start *********************/
function orderHistory(date, time, str, isComment, name) {
	if($('orderHistory'))
	{
		//add to orders log
		var orderHistory = $('orderHistory');
		if($('historyEmpty'))
		{
			$('historyEmpty').parentNode.removeChild($('historyEmpty'));
		}
		var tr = orderHistory.insertRow(0);
		var td = tr.insertCell(-1);
		td.vAlign = 'top';
		td.width = '15px';
		td.style.textAlign = 'left';
		if(isComment)
			td.innerHTML = '<img border="0" style="margin:0;" width="16px" height="16px" align="absmiddle" alt="" src="../images/icons/note.png">';
		else
			td.innerHTML = '<img border="0" style="margin:0;" width="14px" height="14px" align="absmiddle" alt="" src="../images/icons/page_white.png">';
		
		var td = tr.insertCell(-1);
		td.style.textAlign = 'left';
		if(isComment)
			td.innerHTML = '<b>'+date+'</b> '+time+' | <i>'+name+'</i><br>'+str;
		else
			td.innerHTML = '<b>'+date+'</b> '+time+'<br>'+str;
	}
}
/***************** Add to Order History End *********************/

/***************** Clear Order History Start *********************/
function orderHistoryClear() {
	if($('orderHistory'))
	{
		var tableRows = $('orderHistory').getElementsByTagName("tr");
		
		for (var i=tableRows.length-1; i >= 1; i--)  
			tableRows[i].parentNode.removeChild(tableRows[i]);
		
		var tr = $('orderHistory').insertRow(1);
		tr.id='historyEmpty';
		var td = tr.insertCell(-1);
		td.style.textAlign = 'left';
		td.colspan='2';
		td.innerHTML = 'No history for this order.';		
	}
	
}

/***************** Clear Order History End *********************/

/***************** Toggle Filter Start *********************/
var toggleComplete=true;
function toggleFilter()
{
	if(!toggleComplete)
		return false;
	toggleComplete=false;
	if($('filterOptions').style.display=='none')
	{

		$('filterImage').title='Click to hide filter options';
		$('filterImage').src='images/minus.gif';
		Effect.Grow($('filterOptions'), { duration: 0.6,direction:'top-left' });
		setTimeout('toggleComplete=true;',600);
	}
	else
	{
		$('filterImage').title='Click to show filter options';
		$('filterImage').src='images/plus.gif';
		Effect.Shrink($('filterOptions'), { duration: 0.4,direction:'top-left'});
		setTimeout('toggleComplete=true;',400);
	}
	return false;

}
/***************** Toggle Filter End *********************/

/***************** Start Trim *********************/
String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}
/***************** End Trim *********************/

/***************** Start *********************/


// decimal_arithmetic.js

String.prototype.digitsAfterDecimal = function()

{  var parts = this.split(".", 2);  // FIXME: Not international!

   if( ! parts[1] )
   {  parts[1] = "";  }

   return parts[1].length;
};
 
Number.prototype.biggerScalar = function(n)
{  return n.scale() > this.scale() ? n.scale() : this.scale();  };
 
Number.prototype.digitsAfterDecimal = function()
{  return this.toString().digitsAfterDecimal();  };
 
Number.prototype.divided = function(n)
{  return this.dividedBy(n);  };
 
Number.prototype.dividedBy = function(n)
{  return this.multiply( n.reciprocal() );  };
 
Number.prototype.minus = function(n)
{  return this.plus( n.negative() );  };
 
Number.prototype.multiply = function(n)
{  var s = this.biggerScalar(n);
   return (Math.round(s*this,0) * Math.round(s*n,0)) / (s*s);
};
 
Number.prototype.negative = function()
{  return -1 * this;  };

Number.prototype.plus = function(n)
{  var s = this.biggerScalar(n);
   return (Math.round(s*this,0) + Math.round(s*n,0)) / s;
};
 
Number.prototype.reciprocal = function()
{  return 1 / this;  };
 
Number.prototype.scale = function()
{  return Math.pow(10, this.digitsAfterDecimal() );  };

Number.prototype.mod = function(n){
   var s = this.biggerScalar(n);
   return (Math.round(s*this,0) % Math.round(s*n,0)) / s;

};
/***************** End *********************/

/***************** Start Prototype Add on In Array *********************/
// Returns true if the passed value is found in the
// array. Returns false if it is not.
Array.prototype.inArray = function (value,caseSensitive)
{
	var i;
	for (i=0; i < this.length; i++) 
	{
		// use === to check for Matches. ie., identical (===),
		if(caseSensitive)
		{
			//performs match even the string is case sensitive
			if (this[i].toLowerCase() == value.toLowerCase()) {
			return true;
			}
		}else{
			if (this[i] == value) {
			return true;
			}
		}
	}
	return false;
};


function number_format( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://crestidg.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)    
    // *     example 1: number_format(1234.5678, 2, '.', '');
    // *     returns 1: 1234.57     
 
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "," : dec_point;
    var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}
