/***********************************/
/*  Common Javascript functions... */
/***********************************/

function MM_swapImgRestore()
{
	var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages()
{
	var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
		if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d)
{
	var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage()
{
	var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
	if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function getDate(withTime)
{
	if (navigator.userAgent.indexOf("Firefox") == -1)
	{
		myMonth = new Array();
		myMonth[0] = "January";
		myMonth[1] = "February";
		myMonth[2] = "March";
		myMonth[3] = "April";
		myMonth[4] = "May";
		myMonth[5] = "June";
		myMonth[6] = "July";
		myMonth[7] = "August";
		myMonth[8] = "September";
		myMonth[9] = "October";
		myMonth[10] = "November";
		myMonth[11] = "December";
		myDate = new Date();
		myYear = myDate.getYear();
		myHour = myDate.getHours();
		myMins = myDate.getMinutes();
		if (myYear < 2000)
		{
			myYear = 1900 + myYear;
		}
		document.write (myDate.getDate() + " " + myMonth[myDate.getMonth()] + " " + myYear);
		if (withTime == 1)
		{
			if (myMins <= 9)
			{
				myMins = "0" + myMins;
			}
			document.write (" " + myHour + ":" + myMins);
		}
	}
}

/**********************************/
/*  Special windows and popups... */
/**********************************/

//	openCompulsoryWindow fixes the user's focus in a popup window until it is actively closed
//	Calling JSP must include these elements:

//	<body onload="javascript:openCompulsoryWindow();">
//	<form name=aForm>
// 	<input type=hidden name=activeConfirmation value=0>
//	<input type=button value=Submit onclick="javascript:submitCompulsory(this.form);">

function openCompulsoryWindow()
{
	var xPos = (screen.width - 540) / 2;
	var yPos = (screen.height - 520) / 2;
	compulsoryWindow = window.open("", "compulsoryWindow","width=540,height=500,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars");
	if (window.focus) {compulsoryWindow.focus()}
}

function submitCompulsory(frm)
{
	if (frm.activeConfirmation.value == 0)
	{
		openCompulsoryWindow();
		if (window.focus) {compulsoryWindow.focus()}
	}
}

//	Popup compulsoryWindow must use this function to allow it to be dismissed
//	Called with the following:

//	<body onload="javascript:opener.document.forms[0].activeConfirmation.value=0;">
//	<input type=button value=Submit onclick="javascript:allowDismissal();">

//	function allowDismissal()
//	{
//		opener.document.forms[0].activeConfirmation.value = 1;
//		self.close();
//	}

// 	end compulsoryWindow stuff...


function showCurrentMenu(sessionID)
{
	var xPos = screen.width - 300;
	var yPos = (screen.height/2) - 300;
	var newWin = window.open("", "menuStructureWindow","width=250,height=600,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars");
	if(sessionID != '')
	{
		newWin.location = 'showCurrentMenu.do;jsessionid='+sessionID;
	}
	else
	{
		newWin.location = 'showCurrentMenu.do';
	}
	if (window.focus) {newWin.focus()}
}

function getServiceHref(form)
{
	var xPos = (screen.width/2) - 250;
	var yPos = (screen.height/2) - 100;
	var newWin = window.open("", "serviceHrefWindow","width=500,height=200,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars");
	form.target = 'serviceHrefWindow';
	form.submit();
	if (window.focus) {newWin.focus()}
}

//spp:E231:24/06/04: Selects all checkboxes. Created for Print Orders in Order Processing
function checkAll(field)
{
	var i;
	for (i=0;i<field.length;i++)
		field[i].checked=true;
}

//spp:E231:24/06/04: Deselects all checkboxes. Created for Print Orders in Order Processing
function uncheckAll(field)
{
	var i;
	for(i=0;i<field.length;i++)
		field[i].checked=false;
}

//spp:E231:14/06/04: New function
function displayJSPInPopup(form, supplierPrintingOrders)
{
	var xPos = 300;
	var yPos = 300;
//	var newWin = window.open("", "OrdersToPrint","width=640,height=600,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars");
	var newWin = window.open("", "OrdersToPrint","width=1,height=1,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars");
	newWin.document.writeln(supplierPrintingOrders);
	form.target = 'OrdersToPrint';
	form.submit();
	if (window.focus) {newWin.focus()}
}

function viewSupplierTerms(docID, sessionID)
{
	var xPos = 40;
	var yPos = 40;
	var scrWidth = 560;
	var scrHeight = screen.height - 260;
	var newWin = window.open("", "supplierTermsWindow","width="+scrWidth+",height="+scrHeight+",left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if(sessionID != '')
	{
		newWin.location = 'viewSupplierTerms.do;jsessionid='+sessionID+'?docID='+docID;
	}
	else
	{
		newWin.location='viewSupplierTerms.do?docID='+docID;
	}
	if (window.focus) {newWin.focus()}
}

function viewReport(url, sessionID)
{
	var xPos = 40;
	var yPos = 40;
	var scrWidth = 560;
	var scrHeight = screen.height - 260;
	var newWin = window.open("", "reportWindow","width="+scrWidth+",height="+scrHeight+",left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if(sessionID != '')
	{
		newWin.location = url+';jsessionid='+sessionID;
	}
	else
	{
		newWin.location=url;
	}
	if (window.focus) {newWin.focus()}
}

//	Palette of Web-safe colours, used in Layout Configuration

var newWindow;
var colorImage;
var hiddenField;
var timeoutID;

function showPalette(image, field)
{
	var xPos = screen.width - 600;
	var yPos = screen.height - 600;
	newWindow = window.open("colourPalette.do","colorPalette","width=360,height=180,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos);
	colorImage = image;
	hiddenField = field;
	timeoutID = setTimeout("setWindowObjects()",500);
	if (window.focus) {newWindow.focus()}
}

function setWindowObjects()
{
	if (newWindow && newWindow.hiddenField)
	{
		newWindow.image = colorImage;
		newWindow.hiddenField = hiddenField;
	}
	else
	{
		timeoutID = setTimeout("setWindowObjects()",500);
	}
}

function userConfirm(message)
{
	return confirm(message);
}

function openLinkedServiceWindow(url)
{
	var xPos = screen.width - 820;
	var yPos = (screen.height - 400)/2;
	var linkedServiceWindow = window.open(url,"linkedServiceWindow","toolbar,width=784,height=460,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {linkedServiceWindow.focus()}
}

function openDashboardWindow()
{
	var xPos = screen.width - 400;
	var yPos = (screen.height - 400)/2;
	var dashboardWindow = window.open("dashboard.do","dashboardWindow","width=300,height=300,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos);
	if (window.focus) {dashboardWindow.focus()}
}

function openShowProductImageWindow()
{
	var xPos = screen.width - 740;
	var yPos = (screen.height - 300)/2;
	var productWindow = window.open("#","productWindow","width=500,height=400,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {productWindow.focus()}
}

function openHelpWindow()
{
	var xPos = screen.width - 740;
	var yPos = (screen.height/2) - 300;
	var helpWindow = window.open("userManual.do?docID=18","helpWindow","width=660,height=440,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {helpWindow.focus()}
}

function openLoginHelpWindow()
{
	var xPos = screen.width - 740;
	var yPos = (screen.height/2) - 300;
	var helpWindow = window.open("userManual.do?docID=46","helpWindow","width=660,height=440,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {helpWindow.focus()}
}

function openPersonalCheckListSummaryWindow()
{
	var xPos = screen.width - 820;
	var yPos = (screen.height/2) - 300;
	var summaryWindow = window.open("personalCheckListSummary.do","summaryWindow","width=784,height=440,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {summaryWindow.focus()}
}
function openMainCheckListSummaryWindow()
{
	var xPos = screen.width - 820;
	var yPos = (screen.height/2) - 300;
	var summaryWindow = window.open("mainCheckListSummary.do","summaryWindow","width=784,height=440,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {summaryWindow.focus()}
}

function openTSLDocumentWindow(doURL)
{
	var xPos = (screen.width - 740)/2;
	var yPos = (screen.height - 320)/2;
	var TSLDocumentWindow = window.open(doURL,"TSLDocumentWindow","width=740,height=320,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {TSLDocumentWindow.focus()}
}

function openServiceContentWindow(url)
{
	var xPos = (screen.width - 680)/2;
	var yPos = (screen.height - 570)/2;
	var serviceContentWindow = window.open(url,"serviceContentWindow","width=650,height=550,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {serviceContentWindow.focus()}
}

function openChecklistLinkWindow(htmFile)
{
	var xPos = (screen.width - 640)/2;
	var yPos = (screen.height - 480)/2;
	var checklistLinkWindow = window.open(htmFile,"checklistLinkWindow","width=640,height=480,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {checklistLinkWindow.focus()}
}

function openPopupWindow(htmlURL)
{
	var xPos = screen.width - 500;
	var yPos = screen.height - 400;
	var popupWindow = window.open(htmlURL,"popupWindow","width=400,height=300,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars");
	if (window.focus) {popupWindow.focus()}
}

function openGeneralWindow(htmlURL)
{
	var xPos = 50;
	var yPos = 50;
	var generalWindow = window.open(htmlURL,"generalWindow","width=540,height=400,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	if (window.focus) {generalWindow.focus()}
}

var STATIC_DIR  = "/static/shows/";
var HEADER_URL  = "headerPrintFax.html";

function newFrameWindow(showID, formURL)
{
	var sFormURL = formURL;
	var xPos = screen.width - 820;
	var yPos = screen.height - 700;
	var output = "";
	var frameWindow = window.open("","frameWindow","width=784,height=560,left="+xPos+",top="+yPos+",screenX="+xPos+",screenY="+yPos+",scrollbars,resizable");
	
	output += "<HTML><HEAD><TITLE>Print and Fax Form</TITLE></HEAD>\n";
	output += "<FRAMESET ROWS='60,*' BORDER='0' FRAMEBORDER='NO' FRAMESPACING='0'>\n";
	output += "<FRAME SRC='" + STATIC_DIR + HEADER_URL + "' NAME='header' NORESIZE SCROLLING='NO' FRAMEBORDER='NO' MARGINWIDTH='0' MARGINHEIGHT='0'>\n";
	output += "<FRAME SRC='" + STATIC_DIR + formURL + "' NAME='main' SCROLLING='AUTO' FRAMEBORDER='NO' MARGINWIDTH='0' MARGINHEIGHT='0'>\n";
	output += "</FRAMESET>\n";
	
	output += "<NOFRAMES><BODY>\n";
	output += "<P>To view this page, you must use a browser that supports frames.</P>\n";
	output += "</BODY></NOFRAMES></HTML>\n";
	
	frameWindow.document.write(output);
	frameWindow.document.close();
	if (window.focus) {frameWindow.focus()}
}

/************************/
/*  Validation stuff... */
/************************/

function setDisplayName(fld)
{
	var sDisplayName = "";
	
	if ( asDisplayNames != null )
	{
		
		for ( var i = 0 ; i < asDisplayNames.length ; i += 2 )
		{
			if ( asDisplayNames[i] == fld.name )
			{
				sDisplayName = asDisplayNames[i + 1];
			} 
		}
		
	}	
	fld.displayname = sDisplayName;
}


function setCompulsory(fld)
{
	fld.compulsory = true;
}

function setNonCompulsory(fld)
{
	fld.compulsory = false;
}

function setInteger(fld,minValue)
{
	fld.integer = true;
	fld.minValue = minValue;
}

function setEmail(fld)
{
	fld.email = true;
}

function setTime(fld)
{
	fld.time = true;
}

function setNumeric(fld,minValue)
{
	fld.numeric = true;
	fld.minValue = minValue;
}

function setDate(fld)
{
	fld.date = true;
}

//SPP:S063:31/05/06
function setDateUSFormat(fld)
{
	fld.dateUSFormat = true;
}


function setDateFieldGroup(fldDay, fldMonth, fldYear)
{
	fldDay.day=true;
	fldDay.monthValue = fldMonth;
	fldDay.yearValue = fldYear;
	
	fldMonth.month=true;
	fldMonth.dayValue = fldDay;
	fldMonth.yearValue = fldYear;
	
	fldYear.year = true;
	fldYear.dayValue = fldDay;
	fldYear.monthValue = fldMonth;
}

function validate( frm ) {
	var numberOfElements = frm.length;
	var elements = frm.elements;

	//SPP:S067:18/07/06
	var vatNumber = "";
	var country = "";
	var checkVATNumberAlreadyCalled = false;
	var vatNumberElement = "";
	var countriesToCheckVATNumber;

	for( var i = 0; i < frm.length; i++ ) {
		//First check if field is compulsory
		if( elements[ i ].compulsory && elements[ i ].compulsory == true ) {
			//Check if its an integer, text, email, date or time
			if( elements[ i ].type == "text" || elements[ i ].type == "file" ) {
				if( isBlank( elements[ i ] ) )
				{
					alert( buildErrorMessage( compulsoryErrorMessage, elements[ i ].displayname, "!1" ) );
					elements[ i ].select();
					return false;
				}
			}
			
			//Check if its a compulsory text area
			if( elements[ i ].type == "textarea" )
			{
				if( isBlank( elements[ i ] ) )
				{
					alert( buildErrorMessage( compulsoryErrorMessage, elements[ i ].displayname, "!1" ) );
					elements[ i ].select();
					return false;
				}
			}

			//Check if its a compulsory password
			if( elements[ i ].type == "password" )
			{
				if( isBlank( elements[ i ] ) )
				{
					alert( buildErrorMessage( compulsoryErrorMessage, elements[ i ].displayname, "!1" ) );
					elements[ i ].select();
					return false;
				}
			}

			//Check if its a compulsory drop-down list
			if( elements[ i ].type == "select-one" )
			{
				var value = elements[ i ].options[ elements[ i ].selectedIndex ].value;

				if( ( value != "" ) && ( value != null ) )
				{
					if ( !isNaN( value ) )
					{
						//Is a number
						var iValue = parseInt( value, 10 );
						elements[ i ].options[ elements[ i ].selectedIndex ].value = iValue;
						if( ( iValue < 0 ) || ( isNaN( iValue ) ) )
						{
							elements[ i ].focus();
							alert( buildErrorMessage( compulsoryErrorMessage, elements[ i ].displayname, "!1" ) );
							return false;
						}
					}

				}
				else
				{
					elements[ i ].focus();
					alert( buildErrorMessage( compulsoryErrorMessage, elements[ i ].displayname, "!1" ) );
					return false;
				}
			}

			//Check if its a compulsory checkbox
			if( elements[ i ].type == "hidden" && frm.elements[ i + 1 ] && frm.elements[ i + 1 ].type == "checkbox" )
			{
				if( !frm.elements[ i + 1 ].checked )
				{
					frm.elements[ i + 1 ].focus();
					alert( buildErrorMessage( compulsoryErrorMessage, elements[ i ].displayname, "!1" ) );
					return false;
				}
			}

			//SPP:S127:25/06/07: Created for checkboxes in Bank Transfer and Cheque payments. When
			// Bank Transfer or Cheque payment checkbox is not ticked it would display a blank screen,
			// now it should display a popup asking the user to check the checkbox.
			if( elements[ i ].type == "checkbox" )
			{
				if( !frm.elements[ i ].checked )
				{
					frm.elements[ i ].focus();
					alert( buildErrorMessage( compulsoryErrorMessage, "\"" + elements[ i ].displayname + "\"", "!1" ) );
					return false;
				}
			}

			//Check if its a compulsory radio button group
			if( elements[ i ].type == "radio" )
			{
				radioName = elements[ i ].name;

				compulsory = false;
				selected = false;

				for( var j = 0; j < frm.length; j++ )
				{
					if( frm.elements[ j ].name == radioName )
					{
						if( frm.elements[ j ].compulsory ) {
							compulsory = true;
						}
						if( frm.elements[ j ].checked ) {
							selected = true;
						}
					}
				}

				if( compulsory == true && selected == false)
				{
					elements[ i ].focus();
					alert( buildErrorMessage( compulsoryErrorMessage, elements[ i ].displayname, "!1" ) );
					return false;
				}
			}
		}
		
		//Check integer fields are integers
		if( elements[ i ].value != "" && elements[ i ].integer )
		{
			var minSize = 0;
			if( elements[ i ].minSize != null )
			{
				minSize = parseInt( elements[ i ].minSize, 10 );
			}	
			
			if( !isIntegerValue( elements[ i ].value, minSize ) )
			{
				elements[ i ].select();
				errorMessage1 = buildErrorMessage( integerErrorMessage, elements[ i ].displayname, "!1" );
				errorMessage2 = buildErrorMessage( errorMessage1, minSize, "!2" );
				errorMessage3 = buildErrorMessage( errorMessage2, minSize+1, "!3" );
				alert( errorMessage3 );
				return false;
			}
		}
		
		//Check numeric fields are floats or int
		if( elements[ i ].value != "" && elements[ i ].numeric )
		{
			var minSize = 0;
			if(elements[ i ].minSize != null)
			{
				minSize = parseFloat( elements[ i ].minSize );
			}	
			
			if( !isFloatOrInt( elements[ i ], minSize ) )
			{
				elements[ i ].select();
				errorMessage1 = buildErrorMessage( numericErrorMessage, elements[ i ].displayname, "!1" );
				errorMessage2 = buildErrorMessage( errorMessage1, minSize, "!2" );
				errorMessage3 = buildErrorMessage( errorMessage2, minSize+1.1, "!3" );
				alert( errorMessage3 );
				return false;
			}
		}
		
		//Check email fields are likely email addresses
		if( elements[ i ].value != "" && elements[ i ].email )
		{
			if( !isLikelyEmail( elements[ i ] ) )
			{
				elements[ i ].select();
				alert( buildErrorMessage( emailErrorMessage, elements[ i ].displayname, "!1" ) );
				return false;
			}
		}
		
		//Check time fields are correct
		if( elements[ i ].value != "" && elements[ i ].time )
		{
			if( !isTime( elements[ i ] ) )
			{
				elements[ i ].select();
				alert( buildErrorMessage( timeErrorMessage, elements[ i ].displayname, "!1" ) );
				return false;
			}
		}
		
		//Check dates...
		
		if( elements[ i ].value != "" && elements[ i ].date )
		{
			if( !isDate( elements[ i ] ) )
			{
				elements[ i ].select();
				alert( buildErrorMessage( dateErrorMessage, elements[ i ].displayname, "!1" ) );
				return false;
			}
		}
		
		//SPP:S063:31/05/06
		if( elements[ i ].value != "" && elements[ i ].dateUSFormat )
		{
			if( !isDateUSFormat( elements[ i ] ) )
			{
				elements[ i ].select();
				alert( buildErrorMessage( dateUSFormatErrorMessage, elements[ i ].displayname, "!1" ) );
				return false;
			}
		}

		if( elements[ i ].day || elements[ i ].month || elements[ i ].year )
		{
			if( elements[ i ].day && elements[ i ].options[ elements[ i ].selectedIndex ].value != "" )
			{
				if( elements[ i ].monthValue.options[ elements[ i ].monthValue.selectedIndex ].value == "" )
				{
					elements[ i ].monthValue.focus();
					alert( wrongMonth );
					return false;
				}
				if( elements[ i ].yearValue.options[ elements[ i ].yearValue.selectedIndex ].value == "" )
				{
					elements[ i ].yearValue.focus();
					alert( wrongYear );
					return false;
				}
			}
			if( elements[ i ].month && elements[ i ].options[ elements[ i ].selectedIndex ].value != "" )
			{
				if( elements[ i ].dayValue.options[ elements[ i ].dayValue.selectedIndex ].value == "" )
				{
					elements[ i ].dayValue.focus();
					alert( wrongDay );
					return false;
				}
				if( elements[ i ].yearValue.options[ elements[ i ].yearValue.selectedIndex ].value == "" )
				{
					elements[ i ].yearValue.focus();
					alert( wrongYear );
					return false;
				}
			}
			if( elements[ i ].year && elements[ i ].options[ elements[ i ].selectedIndex ].value != "" )
			{
				if( elements[ i ].monthValue.options[ elements[ i ].monthValue.selectedIndex ].value == "" )
				{
					elements[ i ].monthValue.focus();
					alert( wrongMonth );
					return false;
				}
				if( elements[ i ].dayValue.options[ elements[ i ].dayValue.selectedIndex ].value == "" )
				{
					elements[ i ].dayValue.focus();
					alert( wrongDay );
					return false;
				}
			}
		}


		//SPP:S067:04/07/06:start
		// Get the VAT Number
		if (elements[ i ].name == "vatNumber")
		{
            //Update by Wei on 8/8/2008 begin #33
	        //vatNumber can not be got with document.getElementById("vatNumber") in forefox 3.0

            //vatNumber = trim(document.getElementById('vatNumber').value);
			//vatNumberElement = document.getElementById('vatNumber');
            vatNumber = trim(elements[ i ].value);
			vatNumberElement = elements[ i ];
            
            //Update by Wei end #33

        }

		// Get the Country Name
		if (elements[ i ].name == "country")
		{
            //Update by Wei on 8/8/2008 begin #33
	        //country can not be got with document.getElementById("country") in forefox 3.0

            //country = trim(document.getElementById('country').value);
            country = trim(elements[ i ].value);

            //Update by Wei end #33
        }

		// Get the list of countries for which VAT Number validation is to be applied.
		// This list comes from Table country.
		if (elements[ i ].name == "countriesToCheckVATNumber")
		{
            //Update by Wei on 8/8/2008 begin #33
	        //countriesToCheckVATNumber can not be got with document.getElementById("countriesToCheckVATNumber") in forefox 3.0

            //countriesToCheckVATNumber = trim(document.getElementById('countriesToCheckVATNumber').value);
            countriesToCheckVATNumber = trim(elements[ i ].value);

            //Update by Wei end #33
        }


		// If have the values we need and the VAT Number validation script hasn't already been called.
		if ( (vatNumber != null) && (vatNumber != "") && (country != null) && (country != "") && (checkVATNumberAlreadyCalled != true) )
		{
			if (checkVATNumber (vatNumber, country, countriesToCheckVATNumber) == false) 
			{
				vatNumberElement.focus();
				alert( wrongVATNumber );
				return false;
			}

			checkVATNumberAlreadyCalled = true;
		}
		//SPP:S067:04/07/06:end











	}
	return true;
}

function buildErrorMessage(msg,fldName,tag)
{
	errorMsg = msg.replace(tag,fldName);
	return errorMsg;
}

function isBlank(fld)
{
	return isBlankValue(fld.value);
}


function isBlankValue(sVal)
{
	for(var index =0; index < sVal.length; index++) 
	{
		var cCharTest = sVal.charAt(index);
		
		if ((cCharTest != ' ') && (cCharTest != '\n') && (cCharTest != '\t'))
		{
			return false;
		}
	}
	return true;
}

function isSelected(fld)
{
	var value = getSelectedValue(fld);
	return ((value != null) && (value != "") && (value >= 0)); 
}

function isChecked(fld)
{
	return fld.checked;
}


function getSelectedValue(fld)
{
	return fld.options[fld.selectedIndex].value;
}

function getSafeInteger(str)
{	
	while (str.length > 0  && str.charAt(0) == '0')
	{
		str = str.substr(1);
	}
	
	if (str.length == 0 )
	{
		return 0;		
	}
	else
	{
		return parseInt(str, 10);
	}
}

/*
function isIntegerValue(sVal, minVal)
{
	// If the field is a hidden value
	if(sVal == 'nil')
	{
		return true;
	}
	var bRet = false;
	
	if ( !isBlankValue(sVal) )
	{
		var iValue = parseInt(sVal, 10);
		
		if (!isNaN(iValue))
		{
			//ie iValue is a number
			
			if (!((iValue.toString().length) == (sVal.length)))
			{
				if ( iValue != 0 )
				{
					//Remove any leading zeros
					var i = 0;
					var iLength = sVal.length;
					
					while(sVal.charAt(i) == '0')
					{
						iLength--;	
						i++;
					}
				}
				
				if ((iValue.toString().length) == (iLength) || iValue == 0)
				{
					bRet = greaterThanMin(iValue, minVal);
				}
			}
			else
			{
				bRet = greaterThanMin(iValue, minVal);
			}
		}
	}
	else
	{
		bRet = true;
	}
	return bRet;
}
*/

/* Replaced by DH 20040910. Combats a bug which allowed 0.5 to be interpreted as an Integer, and 1.5 etc to be interpreted as a Float. */

function isIntegerValue(strValue,intMinimumValue){
	if(strValue=="nil")
		return true;
	var objIntegerPattern=/\D+/; /* Non-digits */
	if(objIntegerPattern.test(strValue))
		return false;
	var intValue=parseInt(strValue,10);
	if(!isNaN(intValue))
		return greaterThanMin(intValue,intMinimumValue);
	else
		return true;
}

function trim(inputString) 
{
	// Removes leading and trailing spaces from the passed string. Also removes
	// consecutive spaces and replaces it with one space. If something besides
	// a string is passed in (null, custom object, etc.) then return the input.
	if (typeof inputString != "string") 
	{ 
		return inputString; 
	}
	var retValue = inputString;
	var ch = retValue.substring(0, 1);
	while (ch == " ") 
	{ 
		// Check for spaces at the beginning of the string
		retValue = retValue.substring(1, retValue.length);
		ch = retValue.substring(0, 1);
	}
	
	ch = retValue.substring(retValue.length-1, retValue.length);
	while (ch == " ") 
	{ 
		// Check for spaces at the end of the string
		retValue = retValue.substring(0, retValue.length-1);
		ch = retValue.substring(retValue.length-1, retValue.length);
	}
	
	while (retValue.indexOf("  ") != -1) 
	{ 
		// Note that there are two spaces in the string - look for multiple spaces within the string
		retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings
	}
	
	return retValue; // Return the trimmed string back to the user
} 


//GM:SPP:S025:27/10/05: Firefox and Checkbox fix
function findElementIndex(x) {
    for (i = 0; i < document.forms[0].elements.length; i++) {
        if (document.forms[0].elements[i] == x) {
            return i;
            break;
        }
    }
}

/* GM:SPP:S025:27/10/05
function findElementIndex( argField ) {
	var form = argField.form;
	var elements = form.elements;
	var numberOfElements = form.elements.length;
	for( var i = 0; i < numberOfElements; i++ ) {
		var currentElement = elements[ i ];
		if( currentElement.sourceIndex != null ) {
			if( currentElement.sourceIndex == argField.sourceIndex ) {
				return i;
			}
		}
	}
	return -1;
}
*/

function setPreviousElementValue( argInt, argBoolean, argField ) {
	if( document.all ) {
		try {
			document.all[ ( argInt - 1 ) ].value = argBoolean;
		}
		catch( exception ) {
			return -1;
		}
	}
	else {
		var form = argField.form;
		var elements = form.elements;
		var numberOfElements = form.elements.length;
		for( var i = 0; i < numberOfElements; i++ ) {
			var currentElement = elements[ i ];
			if( currentElement.sourceIndex != null ) {
				if( currentElement.sourceIndex == argField.sourceIndex ) {
					var previousElement = elements[ ( i - 1 ) ];
					previousElement.value = argBoolean;
					return 1;
				}
			}
		}
	}
	return 0;
}

function isFloatOrInt(fld,minValue)
{
	// If the field is a hidden value
	if(fld.value == 'nil')
	{
		return true;
	}
	fld.value = trim(fld.value.replace(",","."));
	
	if ( !isBlank(fld) )
	{
		var regIntExp = new RegExp(/^\d{1,}$/);
		var regDotFloatExp = new RegExp(/^\d{1,}\.\d{1,}$/);
		
		if( regIntExp.test(fld.value) || regDotFloatExp.test(fld.value) )
		{
			if(parseFloat(fld.value) < parseFloat(minValue))
			{
				return false;
			}
			
			return true;
		}
	}
	else
	{
		return true;
	}	
	return false;
}

function isLikelyEmail(fld)
{
	// If the field is a hidden value
	if(fld.value == 'nil')
	{
		return true;
	}
	var regexpemail = /^[a-zA-Z0-9\-\.\_]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	var matt = /^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.int)|(\.mil)|(\.gov)|(\.org)|(\.aero)|(\.biz)|(\.info)|(\.mobi)|(\.coop)|(\.name)|(\.pro)|(\.travel)|(\.asia)|(\.cat)|(\..{2,2}))$/; //SPP:01/07/05:S020: Added .info. //SPP:S080: Added .mobi. //SPP:25/11/2008: Added more domain extension
	
	if( regexpemail.test(fld.value) == false ) return false;
	if( matt.test(fld.value) == false ) return false;
	
	return true;
}
 
function isDate(fld)
{
	// If the field is a hidden value
	if(fld.value == 'nil')
	{
		return true;
	}
	var bOK = false;
	var sNumbers = trim(fld.value);
	var aNumbers = sNumbers.split("/");
	if ( aNumbers.length == 3 )
	{
		if ( !isNaN(aNumbers[0]) && !isNaN(aNumbers[1]) && !isNaN(aNumbers[2]) )
		{
			if ( parseInt( aNumbers[2], 10 ) >= 1901 )
			{
				var day = parseInt( aNumbers[0], 10 );
				var month = parseInt( aNumbers[1], 10 );
		// GHM 070901 Removed arbitrary requirement for this year or higher and replaced with arbitrary fixed lower limit

				if(month == 02 && day > 0 && day < 30)
				{
					bOK = true;
				}
				else if( (month == 01 || month == 03 || month == 05 || month == 07 || month == 08 || month == 10 || month == 12) && day > 0 && day < 32 )
				{
					bOK = true;
				}
				else if( (month == 04 || month == 06 || month == 09 || month == 11) && day > 0 && day < 31 )
				{
					bOK = true;
				}
			}
		}
	}
	return bOK;
}


//SPP:S063:31/05/06
function isDateUSFormat(fld)
{
	// If the field is a hidden value
	if(fld.value == 'nil')
	{
		return true;
	}
	var bOK = false;
	var sNumbers = trim(fld.value);
	var aNumbers = sNumbers.split("/");
	if ( aNumbers.length == 3 )
	{
		if ( !isNaN(aNumbers[0]) && !isNaN(aNumbers[1]) && !isNaN(aNumbers[2]) )
		{
			if ( parseInt( aNumbers[2], 10 ) >= 1901 )
			{
				var day = parseInt( aNumbers[1], 10 ); //SPP:S063
				var month = parseInt( aNumbers[0], 10 ); //SPP:S063
		// GHM 070901 Removed arbitrary requirement for this year or higher and replaced with arbitrary fixed lower limit

				if(month == 02 && day > 0 && day < 30)
				{
					bOK = true;
				}
				else if( (month == 01 || month == 03 || month == 05 || month == 07 || month == 08 || month == 10 || month == 12) && day > 0 && day < 32 )
				{
					bOK = true;
				}
				else if( (month == 04 || month == 06 || month == 09 || month == 11) && day > 0 && day < 31 )
				{
					bOK = true;
				}
			}
		}
	}
	return bOK;
}

function isTime(fld)
{
	// If the field is a hidden value
	if(fld.value == 'nil')
	{
		return true;
	}
	var bOK = false;
	
	var aNumbers = fld.value.split(":");
	
	if ( aNumbers.length == 2 )
	{
		if ( !isNaN(aNumbers[0]) && !isNaN(aNumbers[1]) )
		{
			if ( parseInt( aNumbers[0], 10 ) < 25 && parseInt( aNumbers[1], 10 ) < 60 )
			{
				bOK = true;
			}
		}
	}
	return bOK;
}

/*
function greaterThanMin(myValue, minVal)
{
	var bRet = false;
	
	if (minVal == null)
	{
		bRet = true;
	}
	else
	{
		if (myValue >= minVal)
		{
			bRet = true;
		}
	}
	return bRet;
}
*/

/* Replaced by DH 20040910 */

function greaterThanMin(intValue,intMinimumValue){
	if(intMinimumValue==null)
		return true;
	else{
		if(intValue>=intMinimumValue)
			return true;
		else
			return false;
	}
}


function isTooLong(fld, maxLen)
{
	var bRet = false;
	var iLen = parseInt(maxLen, 10);
	
	if (fld.value.length > iLen)
	{
		bRet = true;
	}
	return bRet;
}


//spp:06/05/04: Validation of one or more emails entred in a textbox, with 
// each one seperated by a semicolon.
function validateEmails(frm)
{
	var finalFlag = true;
	var emails = frm.supplier_entered_emails.value;

	if ((trim(emails)).length < 5)
	{
		finalFlag = false;
	}

	var arrayOfEmails = emails.split(";");

	// Loop per email
	for(loop = 0; loop < arrayOfEmails.length; loop++)
	{
		if (!(isValidEmail(trim(arrayOfEmails[loop]))))
		{
			finalFlag = false;
		}
	}

	if (!finalFlag)
	{

		if((wrongFormatMultipleEmails == 'nil') || (wrongFormatMultipleEmails == '') || (wrongFormatMultipleEmails == 'null') || (wrongFormatMultipleEmails == null))
		{
			alert("Email(s) not entered correctly!");
		}
		else
		{
			alert(wrongFormatMultipleEmails);
		}
	}

	return finalFlag;
}

//spp: 06/05/04: Created to be used by function validateEmails. Function isLikelyEmail 
// was not appropritae as it took in a field name and not the actual value for it. 
// The below function takes in the actual value.
function isValidEmail(fld)
{
	if((fld == 'nil') || (fld == '') || (fld == 'null') || (fld == null))
	{
		return true;
	}

	var regexpemail = /^[a-zA-Z0-9\-\.\_]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$/;
	var matt = /^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.int)|(\.mil)|(\.gov)|(\.org)|(\.aero)|(\.biz)|(\.info)|(\.mobi)|(\.coop)|(\.name)|(\.pro)|(\.travel)|(\.asia)|(\.cat)|(\..{2,2}))$/; //SPP:01/07/05:S020: Added .info. //SPP:S080: Added .mobi. //SPP:25/11/2008: Added more domain extension
	
	if( regexpemail.test(fld) == false ) return false;
	if( matt.test(fld) == false ) return false;
	
	return true;
}



/* Added by DH 20041215. Allows elements to have a maxLength attribute set against them. */
function setMaxLength( strTagName, intMaxLength )

{
	try
	{
		var objElements = document.getElementsByTagName( strTagName );
		if( objElements != null )
		{
			    var intNumberOfElements = objElements.length;
			    for(var i = 0; i < intNumberOfElements; i++ )
			    {
					var objCurrentElement = objElements[ i ];
					if( objCurrentElement != null )
					{
						    objCurrentElement.maxLength = intMaxLength;
					}
			    }
			    return;
		}
	}
	catch( objException )
	{
	}
}
/* Added by DH 20041215. Allows elements to have a maxLength attribute set against them. */


/* Added by DH 20041221. Allows elements to have a maxWords attribute set against them. */
function setMaxWords( strTagName, intMaxWords )
{
	try
	{
		var objElements = document.getElementsByTagName( strTagName );
		if( objElements != null )
		{
			var intNumberOfElements = objElements.length;
			for( var i = 0; i < intNumberOfElements; i++ )
			{
				var objCurrentElement = objElements[ i ];
				if( objCurrentElement != null )
				{
					if (objCurrentElement.type) {
				      switch (objCurrentElement.type) {
				        case 'textarea':
				        	attachEvent("keypress",objCurrentElement,maxLength);
  							attachEvent("paste",objCurrentElement,maxLengthPaste);
				       }
				     }
					objCurrentElement.maxChars = intMaxWords;
				}
			}
			return;
		}
	}
	catch( objException )
	{
	}
}
/* Added by DH 20041221. Allows elements to have a maxWords attribute set against them. */

//Add by STC Wei on 2009-07-02  for Word limit code no longer working
//#BEGIN
function attachEvent(name,elementName,callBack) {
    var element = elementName;
    //if(typeof elementName == 'string')
      //element = document.getElementById(elementName);
    //}

    //my
    //var element = document.getElementById(elementName)

    if (element.addEventListener) {
      element.addEventListener(name, callBack,false);
    } else if (element.attachEvent) {
      element.attachEvent('on' + name, callBack);
    }
}

function maxLength()
 {

       var field=  event != null ? event.srcElement:e.target;
       if(field.maxChars  != null) {
         if(countWords(field.value) >= parseInt(field.maxChars)) {
           event.returnValue=false;
           alert("More than " +field.maxChars + " words");
           return false;
         }
       }
 }

 function maxLengthPaste()
 {
       event.returnValue=false;
       var field=  event != null ? event.srcElement:e.target;
       if(field.maxChars != null) {
         if((countWords(field.value) + countWords(window.clipboardData.getData("Text"))) > parseInt(field.maxChars)) {
           alert("More than " +field.maxChars + " words");
           return false;
         }
       }
       event.returnValue=true;
 }

function countWords(inputString) {
//    var y = w.value;
    var cnt = 0;
    var str = inputString.replace(/\s/g, ' ');
    str = str.split(' ');
    for (var i = 0; i < str.length; i++) {
        if (str[i].length > 0) 
            cnt++;
    }
    return cnt;
}
//#END



//*** End Common Javascript ***//




//SPP:S093:13/10/06:New method
function validateCCNumber(frm)
{
	cardNumber = trim(frm.cardNumber.value);

	var bReturnValue = true;
	var errorToReport = "The credit card is NOT VALID!";
	var bEsistingCreditCard = false;
	var elements = frm.elements;
	
	// If element existingCardID exist and is greater than 0 then an existing 
	// CC has been selected from the dropdown. In which case do not do any validation.
	for(var i = 0; i < frm.length; i++)
	{
		if ( (elements[i].name == "existingCardID") && (frm.existingCardID.value > 0) )
		{
			bEsistingCreditCard = true;
			break;
		}
	}

	if ( (!bEsistingCreditCard) && (!isNum(cardNumber)) )
	{
		bReturnValue = false;
		errorToReport = CreditCardIsNotNumeric;
	}
	else if ( (!bEsistingCreditCard) && (!validateCClength(cardNumber)) ) 
	{
		bReturnValue = false;
		errorToReport = CreditCardLengthInvalid;
	}
	else if ( (!bEsistingCreditCard) && (!luhnCheck(cardNumber)) )
	{
		bReturnValue = false;
		errorToReport = CreditCardIsNotMod10Valid;
	}

	if ( !bReturnValue )
	{
		alert(errorToReport);
		frm.cardNumber.select();
	}

	return bReturnValue;	
}

//SPP:S093:13/10/06:New method
function isNum(cardNumber) 
{
	var bReturnValue = true;
	cardNumber = cardNumber.toString();

	if (cardNumber.length == 0)
	{
		bReturnValue = false;
	}

	for (var n = 0; n < cardNumber.length; n++)
	{
		if ( (cardNumber.substring(n, n+1) < "0") || (cardNumber.substring(n, n+1) > "9") )
		{
			bReturnValue = false;
		}
	}
	return bReturnValue;
}

//SPP:S093:13/10/06:New method
function validateCClength(cardNumber)
{
	var bReturnValue = true;

	if ( (cardNumber.length < 13) || (cardNumber.length > 16) || (cardNumber.indexOf(' ') > -1) )
	{
		bReturnValue = false;
	}

	return	bReturnValue;
}

//SPP:S093:13/10/06:New method
function luhnCheck(cardNumber) 
{
	var bReturnValue = true;

	var no_digit = cardNumber.length;
	var oddoeven = no_digit & 1;
	var sum = 0;

	for (var count = 0; count < no_digit; count++) 
	{
		var digit = parseInt(cardNumber.charAt(count));
		if (!((count & 1) ^ oddoeven)) 
		{
			digit *= 2;
			if (digit > 9)
			digit -= 9;
		}
		sum += digit;
	}

	if ( !(sum % 10 == 0) )
	{
		bReturnValue = false;
	}

	return (bReturnValue);

}
