var intAddnTextLimit	= 500;
var intSpecInstrLimit	= 500;



function BG_getElement( sElementName ) {
	if( document.all ) { return document.all[ sElementName ] }
	if( document.getElementById ){ return document.getElementById( sElementName ) }
	if( document.layers ) { return document.layers[ sElementName ] }
	return null;
}

function BG_toggleCategoryVis( intCategoryId, sPrefix ) {

	if( typeof sPrefix == "undefined" )
		sPrefix = "prodCat";
		
	var objEl = BG_getElement( sPrefix + intCategoryId + 'f' );
	var objColLinkEl = BG_getElement( sPrefix + intCategoryId + 'c' );
	var objExpLinkEl = BG_getElement( sPrefix + intCategoryId + 'e' );
	
	var bState = arrVisStates[ intCategoryId ];
	
	arrVisStates[ intCategoryId ] = !bState;
	
	objEl.style.display = ((bState)) ? "none" : "block";
	objColLinkEl.style.display = ((bState)) ? "none" : "block";
	objExpLinkEl.style.display = ((!bState)) ? "none" : "block";

}


function BG_validateCatalogueSelection( objForm, szProducts ) {

	var arrProducts = szProducts.split( "," );
	var intThisProduct = 0;
	var intEmptyFields = 0;
	
	var arrErrorMsgs = new Array();

	while (intThisProduct < arrProducts.length)
	 {
	 	thisQtyRaw = eval( 'objForm.intItem_' + arrProducts[intThisProduct] ).value;
	  	thisQty = Math.abs( parseInt( thisQtyRaw ));
		thisMax = parseInt(eval( 'objForm.intMax_' + arrProducts[intThisProduct] ).value);
	  
	  	// CHECK NUMBER IS A POSITIVE INTEGER
		if( !isNaN( thisQty ) ) {

			if( thisQtyRaw != thisQty ) {
				alert( 'Please enter only whole numbers greater than 0' );
				return false;
			}
		}
	  
		if ( isNaN( thisQty ) || thisQty == 0 ){
			intEmptyFields+=1;
		} else {
		
			if ( thisMax != 0 && thisQty > thisMax ){
				arrErrorMsgs[ arrErrorMsgs.length ] = arrProductNames[ parseInt(arrProducts[intThisProduct].split("_")[1]) ] + " (Max: " + thisMax + ")";
			  }
		 }
		intThisProduct+=1;
	 }
	 if ( intEmptyFields == intThisProduct ){
	 	alert( 'Please enter a quantity for one or more products.' );
		return false;
	 }
	 if( arrErrorMsgs.length > 0 ) {
		NB_formValidateErrorHandler( arrErrorMsgs, "You have requested quantities that exceed the maximum allowed for the following items:" );
		return false;
	} else {
		return true;
	}
}


function BG_addBookmark( sTitle, sUrl ) {
	if( document.all ) {
		window.external.AddFavorite( sUrl, sTitle );
	} else { 
		if( window.sidebar )
			window.sidebar.addPanel( sTitle, sUrl, "" );
	}
}


function checkKeycode( objEvent, objForm, intLimit ) {
	var intKeyCode;
	if (window.event) intKeyCode = window.event.keyCode;
	else if (objEvent) intKeyCode = objEvent.which;
	
	if( intKeyCode != 9 && intKeyCode != 0 && intKeyCode != 8 && intKeyCode != 8 )
		return objForm.value.length < intLimit;
	
	return true;
}


function BG_validateOrderDetails( objForm ) {
	
	if (!blnRequiresValidation){
		return true;
	}
	
	var arrErrorMsgs = new Array();
	
	if( !NB_formFieldIsNotEmpty( objForm.szNameGiven ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Your First Name"; }
	if( !NB_formFieldIsNotEmpty( objForm.szNameFamily ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Your Last Name"; }	
	if( !NB_formFieldIsNotEmpty( objForm.szCompany ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Your Company Name"; }	
	if( !NB_formFieldIsNotEmpty( objForm.szAddress1 ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Your Address"; }	
	if( !NB_formFieldIsNotEmpty( objForm.szPostcode ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Your Postcode"; }	
	if( !NB_formFieldIsNotEmpty( objForm.szTown ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Your Town"; }	

	if( !NB_formFieldIsNotEmpty( objForm.szEmail ) || !isEmail( objForm.szEmail ) ) {
			arrErrorMsgs[ arrErrorMsgs.length ] = "Your email address (in correct form).";
	}

	if( !NB_formFieldIsNotEmpty( objForm.szTelephone ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Your Telephone"; }	
	
	if( objForm.szAdditionalText.value.length >= intAddnTextLimit ) {
		var intDiff = objForm.szAdditionalText.value.length - intAddnTextLimit;
		arrErrorMsgs[ arrErrorMsgs.length ] = "You may only enter up to " + intAddnTextLimit + " characters\nin the additional text box. Please remove\n" + intDiff + " characters"; 
	}
	
	if( objForm.szSpecialInstructions.value.length >= intSpecInstrLimit ) {
		var intDiff = objForm.szSpecialInstructions.value.length - intSpecInstrLimit;
		arrErrorMsgs[ arrErrorMsgs.length ] = "You may only enter up to " + intSpecInstrLimit + " characters\nin the special instructions box. Please\nremove " + intDiff + " characters"; 
	}

	if( arrErrorMsgs.length > 0 ) {
		NB_formValidateErrorHandler( arrErrorMsgs, "The following details are still required:" );
		return false;
	} else {
		return true;
	}

	return true;
}

/* Javascript email validation
	from http://www.macromedia.com/devnet/server_archive/articles/form_validation_techniques.html
	cc@cc.cc
	Does email have a minimum of 8.
	Does it have a @ symbol
	Does it have a .
	Are there at least two characters between the @ and the .
	At least two before the @
	At least two after the last . */
function isEmail(element){

	var inputStr = element.value;
	
	//is the email at least 8 characters long.
	if(inputStr.length < 8){
		return false;
	}
	
	//Check for the existance of the @ symbol
	charA = inputStr.indexOf("@")
	
	if( charA == -1 ){
		return false;
	}
	
	//Check that the @ symbol is at least two characters from the start of the string
	if( charA < 2 ){
		return false;
	}
	
	//Check for the existance of the . symbol
	charB = inputStr.lastIndexOf(".")
	if( charB == -1 ){
		return false;
	}
	
	//Check that the . symbol is at least two from the end
	//alert(inputStr.length);
	if(charB > (inputStr.length - 3)){
		return false;
	}
	
	//Check that there is at least two symbols between @ and .
	if( charB - charA < 2 ){
		return false;
	}
	
	return true;

}

function BG_validateOrderForm ( objForm, szProducts ){

	var arrProducts = szProducts.split(",");
	var intThisProduct = 0;

	while (intThisProduct < arrProducts.length)
	 {
	  alert(col_array[part_num]);
	  intThisProduct+=1;
	 }


}

function BG_validateReportForm( objForm ){

	var arrErrorMsgs = new Array();
	
	// CHECK TO SEE IF ORDER SUMMARY/FIXED PERIOD/ANYTIME COMBINATION SELECTED
	if( objForm.sReportType_Order_Summary.checked == true && objForm.sReportWhen_Fixed.checked == true && ( objForm.selPeriod.options[objForm.selPeriod.selectedIndex].text == 'Anytime' || objForm.selPeriod.options[objForm.selPeriod.selectedIndex].text == 'Last Year' || objForm.selPeriod.options[objForm.selPeriod.selectedIndex].text == 'This Year') ){
		
		alert( 'The fixed period options \'Anytime\', \'Last Year\' and \'This Year\' are not available for Order Summary reports.\n\nPlease select another fixed period option before running your report.'  );
		
		return false;
		
	}
	
	if( objForm.sReportWhen_Custom.checked == true ){
		
		if( !NB_isDate( objForm.dtFrom ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Invalid 'date from' in date range"; }
		if( !NB_isDate( objForm.dtTo ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "Invalid 'date to' in date range"; }
		
		//DATES MUST BE GREATER THAN 1900
		if( NB_isDate(  objForm.dtFrom ) && NB_isDate( objForm.dtTo ) )  {
		
			// IF ORDER SUMMARY IS SELECTED PERFORM DATE CHECK TO ENFORCE 6 MONTH LIMIT
			if( objForm.sReportType_Order_Summary.checked == true ){
				
				var dtStart = new Date(NB_parseDate( objForm.dtFrom.value ));
				var	dtEnd = new Date(NB_parseDate( objForm.dtTo.value ));
				
				var intYears  = dtEnd.getUTCFullYear() - dtStart.getUTCFullYear();
				var intMonths = ( dtEnd.getMonth() ) + 1 - ( dtStart.getMonth() + 1 ) + (intYears!=0 ? intYears*12 : 0 );
				
				if( intMonths > 5 ){
					
					arrErrorMsgs[ arrErrorMsgs.length ] = "Invalid date range (please select a date range of less than 6 months when using the \'Order Summary\' report)";	
					
				}

			}
			
			if( NB_parseDate( objForm.dtFrom.value ) < NB_parseDate( '01/01/1900' ) ){ arrErrorMsgs[ arrErrorMsgs.length ] = "Invalid 'date from' in date range"; }
			if( NB_parseDate( objForm.dtTo.value ) < NB_parseDate( '01/01/1900' ) ){ arrErrorMsgs[ arrErrorMsgs.length ] = "Invalid 'date from' in date range"; }
		
		}
		
		// START DATE MUST BE EARLIER THAN END DATE
		if( NB_isDate(  objForm.dtFrom ) && NB_isDate( objForm.dtTo ) )  {
			var dtFrom = NB_parseDate( objForm.dtFrom.value );
			var dtTo = NB_parseDate( objForm.dtTo.value );
			if( Date.parse( dtTo ) < Date.parse( dtFrom ) ) { arrErrorMsgs[ arrErrorMsgs.length ] = "'date from' must be earlier than 'date to' in date range"; }
		}
	
	}

	 if( arrErrorMsgs.length > 0 ) {
		NB_formValidateErrorHandler( arrErrorMsgs, "The following problems were found in your report criteria" );
		return false;
	} else {
		return true;
	}

}


function BG_confirmLogout( ) {
	return confirm( 'Are you sure you want to logout?' );
}

function BG_requiresValidation( blnRV ) {
	blnRequiresValidation = blnRV;
}

function BG_setPublicCatalogue( objForm ) {
	if ( confirm( 'Are you sure you want to change the public catalogue?' ) ) {
		objForm.submit();
	} else {
		objForm.reset();
	};
}

function BG_openWindow( sUrl, intWidth, intHeight, sName ) {

	if( typeof intWidth == "undefined" )
		intWidth = 650;

	if( typeof intHeight == "undefined" )
		intHeight = 450;
		
	if( typeof sName == "undefined" )
		sName = "winPopup";

	winPopup = window.open( sUrl, sName, 'status=0,resizable=1,width=' + intWidth + ',height=' + intHeight + ',scrollbars=1,menubar=0,toolbar=0' );
	winPopup.opener.name = "opener";
	winPopup.focus();
}

function BG_prodImg( intProductId ) {
	BG_openWindow( 'image.cfm?intProductId=' + intProductId, 540, 605 );
}

function NB_isDate( objField ){
/*
	var dateArray = objField.value.split('/');
	if (dateArray.length!=3) {
		return false;
	} else {
		var dayValue = dateArray[0];
		var monthValue = dateArray[1];
		var yearValue = dateArray[2];
		var parsedValue = monthValue + '/' + dayValue + '/' + yearValue;
		var thisDate = new Date(parsedValue);
		if (thisDate == "NaN"){
			return false;
		}
			return true;
		}
*/

	var dateArray = objField.value.split('/');
	if (dateArray.length!=3) {
		return false;
	} else {

		var dayValue = dateArray[0];
		var monthValue = dateArray[1];
		var yearValue = dateArray[2];
		var arrMonth = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
		var dtDate = dayValue + ' ' + arrMonth[monthValue-1] + ' ' + yearValue;
		
		/* Using form values, create a new date object
		using the setFullYear function */
		var myDate = new Date();
		myDate.setFullYear( yearValue, monthValue-1, dayValue );
		
		if ( myDate.getMonth() != parseInt( monthValue - 1 ) ) {
		  return false;
		} else {
		  return true;
		}

	}

}

function NB_parseDate( dtValue ){

	var dateArray = dtValue.split('/');

	if (dateArray.length!=3)
		return null;
		
	var dayValue = dateArray[0];
	var monthValue = dateArray[1];
	var yearValue = dateArray[2];

	var parsedValue = monthValue + '/' + dayValue + '/' + yearValue;
	var thisDate = new Date(parsedValue);

	return thisDate;
}
