// JavaScript Document
/*
  LOADER
*/
var loaderWrapper = null;
function initLoader(){
	if(!loaderWrapper){
		loaderWrapper = document.createElement('div');
		loaderWrapper.className = 'loader';
		loaderWrapper.id = 'loader';
		loaderWrapper.innerHTML = '<h2><em>' + text.calculating + '</em></h2>';
		
		document.getElementsByTagName('body')[0].appendChild(loaderWrapper);
	}
	
	loaderWrapper.style.display = 'block';
	
	disableInputs();
}

function clearLoader(){
	if(HTTPRequest) return;

	loaderWrapper.style.display = 'none';
	
	enableInputs();
}
/*
  // LOADER
*/


/*
	HANDLE HTTP REQUEST
*/
var HTTPRequest;
function handleHTTPRequest(post, method){
	initLoader();
	handleInputChange();
	
	if(HTTPRequest) return;

	HTTPRequest = new XMLHttpRequest();

	if(!HTTPRequest) return;

	HTTPRequest.onreadystatechange = function(){
		
		if(HTTPRequest.readyState == 4){
			//if(HTTPRequest.status == 200){
				try{
					debug.contentWindow.document.write(HTTPRequest.responseText);
					debug.contentWindow.document.close();
				}catch(e){}
				
				try{
					eval(HTTPRequest.responseText);
				}catch(e){}
				
				HTTPRequest = null;
				
				if(method != 'updateStandardORing'){
					clearLoader();
				}else{
					loaderWrapper.style.display = 'none';
					enableInputs();
				}
		/*	}else{
				if(!errorFrame){
					errorFrame = document.createElement('iframe');
					document.getElementsByTagName('body')[0].appendChild(errorFrame);
					errorFrame.style.display = 'none';
				}
				
				errorFrame.src = 'controllers/errorHandler.cfc?method=handleError';

				alert('An error has occurred while calculating the results. Please check your provided values. The calculator will be reloaded.');
				
				if(window.location.href.indexOf('localhost') != -1){
					window.location = '/oringCalculator/';
				}else{
					window.location = '/';
				}
			}*/
		}
	}

	HTTPRequest.open('POST', 'controllers/calculator.cfc?method=' + method, true);
	HTTPRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	HTTPRequest.send(post);
}


function handleDesign(){
	var post = '';
	var sealingPrinciple = parseInt(activeDesign.sealingPrinciple.value);
	var design = parseInt(activeDesign.design.value);

	clearCalculator();
	
	post += 'sealingPrinciple=' + sealingPrinciple;
	post += '&design=' + design;
	
	handleHTTPRequest(post, 'reset');
}

/*
	RESET CALCULATOR
*/
function resetCalculator(){
	var post = '';
	var sealingPrinciple = parseInt(activeDesign.sealingPrinciple.value);
	var design = parseInt(activeDesign.design.value);
	
	post += 'sealingPrinciple=' + sealingPrinciple;
	post += '&design=' + design;

	activeDesign.design.value = 1;
	
	clearCalculator();

	handleClearAttributes(activeDesign.oringCompound);
	
	// GROOVE
	activeDesign.coefficientInputContainer.style.display = 'none';
	
	if(design == 2 || design ==3){
		activeDesign.grooveIDTolUpper.style.backgroundColor = '#CCC';
		activeDesign.grooveIDTolLower.style.backgroundColor = '#CCC';
		activeDesign.grooveODTolUpper.style.backgroundColor = '#CCC';
		activeDesign.grooveODTolLower.style.backgroundColor = '#CCC';
		activeDesign.grooveDepthTolUpper.style.backgroundColor = '#CCC';
		activeDesign.grooveDepthTolLower.style.backgroundColor = '#CCC';
		activeDesign.grooveWidthTolUpper.style.backgroundColor = '#CCC';
		activeDesign.grooveWidthTolLower.style.backgroundColor = '#CCC';
		activeDesign.boreDiameterTolUpper.style.backgroundColor = '#CCC';
		activeDesign.boreDiameterTolLower.style.backgroundColor = '#CCC';
		activeDesign.grooveDiameterTolUpper.style.backgroundColor = '#CCC';
		activeDesign.grooveDiameterTolLower.style.backgroundColor = '#CCC';
		activeDesign.pistonDiameterTolUpper.style.backgroundColor = '#CCC';
		activeDesign.pistonDiameterTolLower.style.backgroundColor = '#CCC';
		activeDesign.rodDiameterTolUpper.style.backgroundColor = '#CCC';
		activeDesign.rodDiameterTolLower.style.backgroundColor = '#CCC';
	}else{
		activeDesign.grooveIDTolUpper.style.backgroundColor = '#FFF';
		activeDesign.grooveIDTolLower.style.backgroundColor = '#FFF';
		activeDesign.grooveODTolUpper.style.backgroundColor = '#FFF';
		activeDesign.grooveODTolLower.style.backgroundColor = '#FFF';
		activeDesign.grooveDepthTolUpper.style.backgroundColor = '#FFF';
		activeDesign.grooveDepthTolLower.style.backgroundColor = '#FFF';
		activeDesign.grooveWidthTolUpper.style.backgroundColor = '#FFF';
		activeDesign.grooveWidthTolLower.style.backgroundColor = '#FFF';
		activeDesign.boreDiameterTolUpper.style.backgroundColor = '#FFF';
		activeDesign.boreDiameterTolLower.style.backgroundColor = '#FFF';
		activeDesign.grooveDiameterTolUpper.style.backgroundColor = '#FFF';
		activeDesign.grooveDiameterTolLower.style.backgroundColor = '#FFF';
		activeDesign.pistonDiameterTolUpper.style.backgroundColor = '#FFF';
		activeDesign.pistonDiameterTolLower.style.backgroundColor = '#FFF';
		activeDesign.rodDiameterTolUpper.style.backgroundColor = '#FFF';
		activeDesign.rodDiameterTolLower.style.backgroundColor = '#FFF';
	}
	
	activeDesign.grooveIDTolUpper.disabled = true;
	activeDesign.grooveIDTolLower.disabled = true;
	activeDesign.grooveODTolUpper.disabled = true;
	activeDesign.grooveODTolLower.disabled = true;
	activeDesign.grooveDepthTolUpper.disabled = true;
	activeDesign.grooveDepthTolLower.disabled = true;
	activeDesign.grooveWidthTolUpper.diabled = true;
	activeDesign.grooveWidthTolLower.diabled = true;
	activeDesign.boreDiameterTolUpper.diabled = true;
	activeDesign.boreDiameterTolLower.diabled = true;
	activeDesign.grooveDiameterTolUpper.disabled = true;
	activeDesign.grooveDiameterTolLower.disabled = true;
	activeDesign.pistonDiameterTolUpper.disabled = true;
	activeDesign.pistonDiameterTolLower.disabled = true;
	activeDesign.rodDiameterTolUpper.disabled = true;
	activeDesign.rodDiameterTolLower.disabled = true;

	
	if(activeDesign.boreDiameterNomChkb.checked){
		activeDesign.boreDiameterNomChkb.checked = false;
		activeDesign.boreDiameterNom.className = false;
		activeDesign.boreDiameterNom.disabled = true;
	}
	
	if(activeDesign.pistonDiameterNomChkb.checked){
		activeDesign.pistonDiameterNomChkb.checked = false;
		activeDesign.pistonDiameterNom.className = false;
		activeDesign.pistonDiameterNom.disabled = true;
	}
	
	if(activeDesign.rodDiameterNomChkb.checked){
		activeDesign.rodDiameterNomChkb.checked = false;
		activeDesign.rodDiameterNom.className = false;
		activeDesign.rodDiameterNom.disabled = true;
	}
	
	// O-RING
	if(design == 1 || design == 3){
		activeDesign.oringIDTol.style.backgroundColor = '#CCC';
		activeDesign.oringCSDTol.style.backgroundColor = '#CCC';
	}else{
		activeDesign.oringIDTol.style.backgroundColor = '#EFEFEF';
		activeDesign.oringCSDTol.style.backgroundColor = '#EFEFEF';
	}
	
	activeDesign.oringIDTol.disabled = true;
	activeDesign.oringCSDTol.disabled = true;
		
	setTimeout("handleHTTPRequest('"+post+"', 'reset')", 1);
}
/*
	// RESET CALCULATOR
*/


/*
	CLEAR CALCULATOR
*/
function clearCalculator(){
	var inputs = document.getElementById('calculator').getElementsByTagName('input');
	
	// REMOVE CONTENT FROM ALL INPUTS
	for(var i = 0; i < inputs.length; i++){
		inputs[i].value = '';
		handleClearAttributes(inputs[i]);
	}
	
	
	/* SELECTS */
	/* all lists (selects) of the calculator */
	var selects = ['appPressureList','appMovementList','grooveIDSelectList','grooveODSelectList','grooveDepthSelectList','boreDiameterSelectList','grooveDiameterSelectList','grooveWidthSelectList','pistonDiameterSelectList','rodDiameterSelectList','oringIDSelectList','oringCSDSelectList','materialList','oringCompoundList'];

	for(var i=0; i<selects.length; i++){
		
		/* get the childnods of the list */
		var childNodes = document.getElementById(selects[i]).childNodes;
		
		for(var ii=0; ii<childNodes.length; ii++){
			childNodes[ii].className = '';
			
			switch(selects[i]){
				case 'boreDiameterSelectList': childNodes[1].className = 'selected'; break;
				case 'materialList': childNodes[28].className = 'selected'; break;
				case 'oringCompoundList': childNodes[9].className = 'selected'; break;
				default: if(ii == 0){ childNodes[ii].className = 'selected'; } break;
			}
		}
	}
	
	// BUTTONS
	activeDesign.printableDocumentButton.style.visibility = 'hidden';
}
/*
	// CLEAR CALCULATOR
*/


/*
	APPLICATION TOOLBAR
*/
function calculate(){
	handleHTTPRequest('', 'handleDimensions');
}

function saveDesign(){
	var post = '';
	
	post = 'designName='+activeDesign.designName.value;
	
	HTTPRequest = null;

	handleHTTPRequest(post, 'save');
}


function handlePDF(){
	var currentTime = new Date();

	var date = ("" + currentTime.getDate());
	var month = ("" + (currentTime.getMonth()+1));
	var year = ("" + currentTime.getFullYear());
	var hours = ("" + currentTime.getHours());
	var minutes = ("" + currentTime.getMinutes());
	var seconds = ("" + currentTime.getSeconds());
	
	if(date.length == 1) date = '0' + date;
	if(month.length == 1) month = '0' + month;
	if(hours.length == 1) hours = '0' + hours;
	if(minutes.length == 1) minutes = '0' + minutes;
	if(seconds.length == 1) seconds = '0' + seconds;
	
	uniqueInt = date+month+year+hours+minutes+seconds;
	
	// uniqueInt is used, because of a problem with caching in internet explorer
	//when inserting the uniqueInt in the url, the request will be unique
	//window.open('pdf/?'+ uniqueInt +'.pdf', '_blank');
	window.open('pdf/' + uniqueInt + '.pdf', '_blank');
}



function loadDesign(evt){
	var optionValue;
	var ie_var = "srcElement";
	var moz_var = "target";
	var prop_var = "optionValue";
	// "target" for Mozilla, Netscape, Firefox et al. ; "srcElement" for IE
	evt[moz_var] ? optionValue = evt[moz_var][prop_var] : optionValue = evt[ie_var][prop_var];
	
	var designGUID = optionValue;

	HTTPRequest = null;

	handleHTTPRequest('designGUID='+designGUID, 'load');
}

function loadStandardORing(ID, CSD){
	HTTPRequest = null;
	
	document.getElementsByTagName('body')[0].removeChild(document.getElementById('standardORing'));
	
	handleHTTPRequest('innerDiameter='+ID+'&crossSectionDiameter='+CSD, 'loadStandardORing');
}

function deleteDesign(){
	var designName = document.getElementById('designName');
	var post = '';
	
	if(designName.value == ''){
		return;
	}
	
	if(!confirm(text.deleteDesign1 + ' "' + designName.value + '" ' + text.deleteDesign2)){
		return;
	}
	
	post = 'designGUID='+designName.getAttribute('designGUID');
	
	HTTPRequest = null;
	
	handleHTTPRequest(post, 'delete');
}
/*
	// APPLICATION TOOLBAR
*/


/*
	HANDEL INPUTS
*/
	function disableInputs(){
		var inputs = document.getElementById('calculator').getElementsByTagName('input');
		
		// INPUTS READONLY
		for(var i = 0; i < inputs.length; i++){
			if(inputs[i].parentNode.id != '')
				inputs[i].readOnly = true;
		}
	}
	
	function enableInputs(){
		var inputs = document.getElementById('calculator').getElementsByTagName('input');
		
		// INPUTS REMOVE READONLY
		for(var i = 0; i < inputs.length; i++){
			if(inputs[i].parentNode.id != '')
				inputs[i].readOnly = false;
		}
	}
/*
	// HANDLE INPUTS
*/

function handleLogout(){
	window.location = 'controllers/sessionValidator.cfc?method=logout';
}


/*
	HTTP REQUEST
*/
if (!window.XMLHttpRequest) {
	window.XMLHttpRequest = function() {
		var types = [
			'Microsoft.XMLHTTP',
			'MSXML2.XMLHTTP.5.0',
			'MSXML2.XMLHTTP.4.0',
			'MSXML2.XMLHTTP.3.0',
			'MSXML2.XMLHTTP'
		];
		
		for (var i = 0; i < types.length; i++) {
			try{
				return new ActiveXObject(types[i]);
			} catch(e) {}
		}
	
		return false; // XMLHttpRequest not supported
	}
}	
/*
	// HTTP REQUEST
*/

var loginForm = null;
openLoginForm = function(){
	
	if(!loginForm){
		loginForm = document.createElement('div');
		var titleBar = document.createElement('div');
		var main = document.createElement('div');
		var a = document.createElement('a');

		loginForm.id = 'loginForm';
		
		titleBar.className = 'titleBar';
		main.className = 'main';
		
		a.innerHTML = 'X';
		main.innerHTML = '<iframe src="/controllers/sessionValidator.cfc?method=handleSession" frameborder="0" scrolling="yes">Your browser doesn\'t support iframes, please download a different browser...</iframe>';
		
		a.onclick = closeLoginForm;
		
		titleBar.appendChild( a );
		loginForm.appendChild( titleBar );
		loginForm.appendChild( main );
		
		document.getElementsByTagName('body')[0].appendChild(loginForm);
	}
	
	loginForm.style.display = 'block';
	positionLoginForm();
	disableInputs();
}


closeLoginForm = function(){
	if( loginForm ) loginForm.style.display = 'none';
	enableInputs();	
}

positionLoginForm = function(){
	var loginButton = document.getElementById('loginButton');
	var screenWidth = document.body.clientWidth;
	var loginWidth = loginForm.offsetWidth;
	
	loginForm.style.left = (screenWidth - loginWidth) / 2 + 'px';
	loginForm.style.top = 290 + 'px';
}

doLogin = function(){
	closeLoginForm();
	oRingCalculator.userIsLoggedIn = true;
	toggleButtons();
	handleHTTPRequest('', 'fillSavedDesignsSelectAfterLogin');

	updateSiteToolbar();

	if( oRingCalculator.userPreferredLanguage != oRingCalculator.preferredLanguage ){
		alert( text.preferredLanguageChanged );
	}
}

updateSiteToolbar = function(){
	var userDetails = document.getElementById('userDetails');
	var html = oRingCalculator.emailAddress + ' | ';
	
	html += '<button type="button" onclick="handleLogout();"><em>logout</em></button>';
	userDetails.innerHTML = html;
}

automaticLoginDetection = function(){
	var body = document.getElementsByTagName('body')[0];
	var automaticDetectionLogin = document.createElement('div');
	automaticDetectionLogin.style.display = 'none';
	automaticDetectionLogin.innerHTML = '<iframe src="/controllers/sessionValidator.cfc?method=handleSession" frameborder="0" scrolling="yes">Your browser doesn\'t support iframes, please download a different browser...</iframe>';
	
	setTimeout( function(){
		body.appendChild( automaticDetectionLogin );
		setTimeout( function(){ automaticDetectionLogin.parentNode.removeChild( automaticDetectionLogin );}, 5000);
	}, 100);
}

