/***************************************************************
*  Copyright notice
*
*  (c) 2008 Matthias Karr <mk@x11media.com>
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/ 
/**
 * Javascript errormessage library for html forms .
 *
 * @author			Matthias Karr <http://www.x11media.com>
 * filename:		liberrors.js
 * create at:		25.07.2008
 * last update:	18.12.2008
 * version: 		0.91
*/
	// allgemeine Fehlermeldungen	
	var errorDigitsMsg = 'Ung&uuml;ltige Eingabe !';

	// Fehlermeldungen für Metergewichtsrechner: 	
	var alloyErrMsg 			= '- Bitte w&auml;hlen Sie eine Legierung.';
	var profilErrMsg			= '- Bitte w&auml;hlen Sie ein Profil aus.';
	var outerProfilErrMsg	= '- Bitte w&auml;hlen Sie ein Au&szlig;enprofil aus.';
	var innerProfilErrMsg	= '- Bitte w&auml;hlen Sie ein Innenprofil aus.';
	var inputAllErrMsg		= '- Bitte f&uuml;llen Sie <b>alle</b> Eingabefelder mit den entsprechenden Werten aus.';
	 
	var inputAErrMsg			= '- Bitte f&uuml;llen Sie das Eingabefeld <b>A</b> mit den entsprechenden Wert aus.';
	var inputBErrMsg			= '- Bitte f&uuml;llen Sie das Eingabefeld <b>B</b> mit den entsprechenden Wert aus.';
	var inputCErrMsg			= '- Bitte f&uuml;llen Sie das Eingabefeld <b>C</b> mit den entsprechenden Wert aus.';
	var inputDErrMsg			= '- Bitte f&uuml;llen Sie das Eingabefeld <b>D</b> mit den entsprechenden Wert aus.';
	var inputLngErrMsg		= '- Bitte geben Sie eine <b>L&auml;nge</b> an.';

	// costcompare calcutlator errors 
	var inputOutDErrMsg		= '- Bitte f&uuml;llen Sie das Eingabefeld <b>Au&szlig;endurchmesser</b> mit den entsprechenden Wert aus.';
	var inputPrFErrMsg		= '- Bitte f&uuml;llen Sie das Eingabefeld <b>Preis Vollstange</b> mit den entsprechenden Wert aus.';
	var inputPrHErrMsg		= '- Bitte f&uuml;llen Sie das Eingabefeld <b>Preis Hohlstange</b> mit den entsprechenden Wert aus.';
	var inputMaDErrMsg		= '- Bitte f&uuml;llen Sie das Eingabefeld <b>Zerspanter Innendurchmesser</b> mit den entsprechenden Wert aus.';
	var inputSrePErrMsg		= '- Bitte f&uuml;llen Sie das Eingabefeld <b>Spanr&uuml;ckkaufpreis</b> mit den entsprechenden Wert aus.';
	
	// dimension calcutlator errors	
	var inputInnDErrMsg		= '- Bitte f&uuml;llen Sie das Eingabefeld <b>Innendurchmesser</b> mit den entsprechenden Wert aus.';
	var outerLtinnerMsg2	= '- Innendurchmesser muss mindestens 4 mm <b>kleiner</b> sein als der Au&szlig;endurchmesser.';
	
	var offouterTolPreMsg	= '- Der <b>Au&szlig;endurchmesser</b> muss zwischen ';			 		
	var offinnerTolPreMsg	= '- Der <b>Innendurchmesser</b> muss zwischen ';
	
	// Fehlermeldungen für Kostenvergleicher Voll / Hohlstange:
	var outerLtinnerMsg = '- Innendurchmesser muss mindestens 4 mm <b>kleiner</b> sein als der Au&szlig;endurchmesser.';
	var pricefullLTsliversrepurchaseMsg = '- Spanr&uuml;ckkaufpreis mu&szlig; <b>geringer</b> als der Einkaufspreis sein.';	




	function hidePreloader(){
		document.getElementById('containerCalculator-preloader').style.display ='none';
		document.getElementById('next-button-1').style.visibility ='show';
	}
	function showPreloader(){
		document.getElementById('containerCalculator-preloader').style.display ='block';
		document.getElementById('next-button-1').style.visibility ='hidden';
	}
	window.onbeforeunload = function (){
		showPreloader();
	};
 

	function checkRequired( chObj , id ){

		// alert('chObj: '+ chObj.name + "\nid"+ id );
		var show = false; 
		var msg  = false;
		var errorSelector = document.getElementById('tx-mkmetergwcalc-pi1-err'+id );
	
		switch ( id ){
// first step: test if any alloy type is selected		
			case '1':
				show = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[alloyId]"].value;
				show = show == 'empty' || show == '' ? true : false ;
				msg = alloyErrMsg;
			break;

// second step: test if any profil checked	
			case '2':
				var baseErr 	= true;
				var outerErr 	= true;
				var innerErr 	= true;				
				for (var n=0; n < 3; n++){
					var radio = eval('document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[formtype' + n + ']"]');
					for (var i=0; i < radio.length; i++){
						if ( radio[i].checked == true && n == 0 ) {
								baseErr 	= false;
								outerErr 	= false;
								innerErr 	= false;
							  n=3;									
								break;
						}
						if ( radio[i].checked == true && n == 1 ) {
								baseErr 	= false;
								outerErr 	= false;
								break;
						}
						if ( radio[i].checked == true && n == 2 ) {
								baseErr 	= false;
								innerErr 	= false;
								break;
						}
					}
				}
				if ( baseErr ){
					msg	= profilErrMsg;
					show = true;
				}
				else if ( outerErr || innerErr ){
					outerErr	= ( outerErr )	? outerProfilErrMsg : '';
					innerErr	= ( innerErr )	? innerProfilErrMsg : '';
					msg	=	outerErr + innerErr;
					show = true;					
				}
			break;

// third step: test given values should not empty and filled with only with digits 	
			case '3':
					var inputA 	 = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[parameterA]"];
					var inputB	 = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[parameterB]"];
					var inputC	 = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[parameterC]"];
					var inputD 	 = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[parameterD]"];
					var inputLng = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[parameter-lenght]"];
					
				var inputs = new Object();
				if ( inputA )  { inputs['A']  = ( inputA.value ) ?	evalDigits(inputA.value)  : false; }
				if ( inputB )  { inputs['B']  = ( inputB.value ) ? evalDigits(inputB.value)   : false; }
				if ( inputC )  { inputs['C']  = ( inputC.value ) ? evalDigits(inputC.value)	  : false; }
				if ( inputD )  { inputs['D']  = ( inputD.value ) ? evalDigits(inputD.value)	  : false; }
				if ( inputLng ){ inputs['Lng']= ( inputLng.value )? evalDigits(inputLng.value): false; }
				
				if (! ( inputs['A'] || inputs['B'] || inputs['C'] || inputs['D'] || inputs['Lng']) ){
				 var inpMsg = new Array();   
				 inpMsg.push( inputAllErrMsg );

				}else{
					var inpMsg = new Array();
					for (var inp in inputs ){
						if (inputs[inp] == false){
							inpMsg.push( eval('input'+ inp+ 'ErrMsg') +'<br/>\n' );
						}
					}
				}
				msg 	=  inpMsg.join(" ");
				show = msg  ? true : false;
			break;
		
			// Tests für Kostenvergleicher Voll / Hohlstange:	
			case '4':
				msg = '';			
				var inputs = new Object();
				var inputOutD = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[outerdiameterfull]"];
				var inputPrF	= document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[price100kgfull]"];
				var inputPrH	= document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[price100kghollow]"];
				var inputMaD  = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[machiningdiameter]"];
				var inputSreP	= document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[sliversrepurchase]"];
																					
				if ( inputOutD ){ inputs['OutD'] = ( inputOutD.value ) ? evalDigits(inputOutD.value)	: false; }
				if ( inputPrF ) {	inputs['PrF']  = ( inputPrF.value )	 ? evalDigits(inputPrF.value) 	: false; }
				if ( inputPrH ) {	inputs['PrH']  = ( inputPrH.value )	 ? evalDigits(inputPrH.value)	  : false; }
				if ( inputMaD ) { inputs['MaD']  = ( inputMaD.value )	 ? evalDigits(inputMaD.value)	  : false; }
				if ( inputSreP ){	inputs['SreP'] = ( inputSreP.value ) ? evalDigits(inputSreP.value)	: false; }
				
				if (! ( inputs['OutD'] || inputs['PrF'] || inputs['PrH'] || inputs['MaD'] || inputs['SreP']) ){
				 inpMsg = new Array();
				 inpMsg.push( inputAllErrMsg );
				}else{
					inpMsg = new Array();
					for (var inp in inputs ){
						if (inputs[inp] == false){
							inpMsg.push( eval('input'+ inp+ 'ErrMsg') +'<br/>\n' );
						}
					}
					var outD = formatDigit(evalDigits(inputOutD.value),1);
					var InnD = formatDigit(evalDigits(inputMaD.value),1);
			 		// if ( ( InnD >0  && outD >0 ) && InnD >= outD ) {
			 		if ( (InnD > 0  && outD > 0 ) && InnD > (outD - 4)) {			 		
			 			inpMsg.push( outerLtinnerMsg +'<br/>\n' );
			 		}
			 		
			 		if ( ( formatDigit(document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[sliversrepurchase]"].value,1) 
			 				>= formatDigit(document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[price100kgfull]"].value,1) ) 
			 				&& formatDigit(document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[sliversrepurchase]"].value) != 0) {
			 			inpMsg.push( pricefullLTsliversrepurchaseMsg  +'<br/>\n' );
			 		}
				}
				msg 	= inpMsg.join(" ");
				show  = msg	? true : false;
			break;
	
	// Tests für Abmessungsrechner 	
			case '5':
				msg = '';
				var inputs = new Object();
				var inputOutD = document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[outerval]"];
				var inputInnD	= document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[innerval]"];
				
				if ( inputOutD ){ inputs['OutD'] = ( inputOutD.value ) ? evalDigits(inputOutD.value)	: false; }
				if ( inputInnD ){	inputs['InnD'] = ( inputInnD.value ) ? evalDigits(inputInnD.value) 	: false; }
				
				
				if (! ( inputs['OutD'] || inputs['InnD'] ) ) {
				 inpMsg = new Array();
				 inpMsg.push( inputAllErrMsg );				
				}
				else {
					inpMsg = new Array();
					for (var inp in inputs ){
						if (inputs[inp] == false){
							inpMsg.push( eval('input'+ inp+ 'ErrMsg') +'<br/>\n' );
						}
					}

				  var outD = formatDigit(evalDigits(inputOutD.value),1);
					var InnD = formatDigit(evalDigits(inputInnD.value),1)

					outerM = (document["tx_mkmetergwcalc_pi1"]["tx_mkmetergwcalc_pi1[materialtype]"].value==2 ) ? outerMinPres : outerMin;
			 		if ( (outD < outerM || outD > outerMax ) && (! outD == 0)  ) {
			 			outErr = offouterTolPreMsg + '<b>' + outerM + '</b>' + middleMessage + '<b>' + outerMax + '</b>' + postMessage+ '.';
			 			inpMsg.push( outErr +'<br/>\n' );
			 		}

		 			if ( (InnD < innerMin || InnD > innerMax ) && (! InnD == 0)  ) {
		 				inErr = offinnerTolPreMsg + '<b>' + innerMin + '</b>'+  middleMessage + '<b>' +  innerMax + '</b>' + postMessage + '.';
			 			inpMsg.push( inErr +'<br/>\n' );
			 		}			 					 		
					// if ( (InnD > 0  && outD > 0 ) && InnD >= outD || InnD > (outD - 4)) {
			 		if ( (InnD > 0  && outD > 0 ) && InnD > (outD - 4)) {
			 			inpMsg.push( outerLtinnerMsg2 +'<br/>\n' );
			 		}
				}
				// alert(inpMsg); 
				msg 	= inpMsg.join(" ");
			  show  = msg	? true : false;
			break;			
		}
		
	  if (! show ) { return true; }
		errorSelector.style.display =  show  ? 'block' : 'none';
		errorSelector.innerHTML			=  show  ?  msg : '';
	return false;
	}


/* check value contains only digits and/or Commas, 
 	* and replace digit values with comma to digits with dot
	* javascript needs dots as dezimal separator
	*/

	function evalDigits( value ) {
		// if (! value ) {	return 0 ;	} 
		var digitRegex = /^\d*,?\d*$/; 	// check if only digits or digits and comma
		if ( digitRegex.test( value ) ){
			value = value.replace(/(\,)/g,'.'); // replace comma with dot
			return value;
		}
	return false; // if no digit
	}

