/**
* @constructor
*
**/
BMICalculator = function() {

	var isInitialized;
	var imperialMetricooFlag;

	var peso ;
	var pies;
	var pulgadas;
	var metros;
	var error;
	var resultados;
	var bmiVariable;
	var targetDivId;
	var importJsStr;
	

	//setters
	this.importJsStr='';
	
	this.isInitialized = true;
	this.imperialMetricooFlag = "imperial";
	this.bmiVariable = 703;
	this.targetDivId = '';	

	}


	BMICalculator.prototype={

		/**
		* Initializer
		*
		**/
		initializeBMICalculator:function() {

			if (!(this.isInitialized)){ this.initializeBMICalculator(); }

			this.isInitialized = false;
			this.peso = document.getElementById("bmiCurrentpeso");
			this.pies = document.getElementById("bmipies");
			this.pulgadas = document.getElementById("bmipulgadas");
			this.error = document.getElementById("calcErrorBox");
			this.metros = document.getElementById("bmimetros");
			this.resultados = document.getElementById("bmiResult");
			//this.appendScripts();
		} //end initializeBMICalculator
		,
		/**
		* Code for BMI Calculator
		*
		**/
		buildCalculator:function() {
			

			var htmlChunk = '<div class="bmiHolder"><div class="bmiCalculatorBox"><div class="doubleLine"></div>';
				htmlChunk += '<div class="bmiCalculatorBoxLeft">';
				htmlChunk += '<div class="titleHolder">';
				htmlChunk += '<div class="calculatorTitle">BMI</div>';
				htmlChunk += '</div>';
				htmlChunk += '<div id="calcErrorBox" class="bmiErrorBox errorText ">';
				htmlChunk += '</div>';
				htmlChunk += '<div class="calculatorInputRow">';
				htmlChunk += '<div class="calculatorInputSection">';
				htmlChunk += '<div class="calculatorHeading">Altura</div>';
				htmlChunk += '<div class="calculatorSubHeading  calculatorSubHeadingMargin">Sistema</div>';
				htmlChunk += '<select id="Altura" class="calculatorSubHeading" onchange="bmi.setimperialMetricooFlag(this.value);" style="width:100px;" size="1">';
				htmlChunk += '<option value="imperial">imperial</option>';
				htmlChunk += '<option value="Metrico">Metrico</option>';
				htmlChunk += '</select>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="calculatorInputSection bmiMarginLg">';
				htmlChunk += '<div class="calculatorHeading">peso</div>';
				htmlChunk += '<div class="calculatorSubHeading  calculatorSubHeadingMargin">Peso actual</div>';
				htmlChunk += '<input type="input" id="bmiCurrentpeso" class="calculatorSubHeading" style="width:87px;_margin-left:-13px;" value="" /> ';
				htmlChunk += '</div>';
				htmlChunk += '<div class="calculatorInputSection bmiMarginSm">';
				htmlChunk += '<div class="calculatorHeading">Altura</div>';
				htmlChunk += '<div id="bmipiesRow" class="calculatorInputSectionInner">';
				htmlChunk += '<div class="calculatorSubHeading  calculatorSubHeadingMargin">pies</div>';
				htmlChunk += '<input type="input" id="bmipies" class="calculatorSubHeading" style="width:40px;" value="" />';
				htmlChunk += '</div>';
				htmlChunk += '<div  id="bmiAlturaRow" class="calculatorInputSectionInner">';
				htmlChunk += '<div class="calculatorSubHeading  calculatorSubHeadingMargin">pulgadas</div>';
				htmlChunk += '<input type="input" id="bmipulgadas" class="calculatorSubHeading" style="width:40px;" value=""	/>';
				htmlChunk += '</div>';
				htmlChunk += '<div id="bmiMeterRow" class="calculatorInputSectionInner dNone">';
				htmlChunk += '<div class="calculatorSubHeading  calculatorSubHeadingMargin">CM</div>';
				htmlChunk += '<input type="input" id="bmimetros" class="calculatorSubHeading" style="width:40px;" value="" />';
				htmlChunk += '</div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="calculatorInputSectionButton">';
				htmlChunk += '<div class="calculateButton" onclick="return bmi.calculateBMIFormula()"></div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="line"></div>';
				htmlChunk += '<div class="bmiKeyBox">';
				htmlChunk += '<div class="bmiKeyBoxTitleRow">BMI </div>';
				htmlChunk += '<div class="bmiKeyBoxDataRow bmiKeyBoxDataRowBB">';
				htmlChunk += '<div>Menos de 18.5</div>';
				htmlChunk += '<div>Delgado</div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="bmiKeyBoxDataRow bmiKeyBoxDataRowBB">';
				htmlChunk += '<div>18.5 - 24.9</div>';
				htmlChunk += '<div>Normal</div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="bmiKeyBoxDataRow bmiKeyBoxDataRowBB">';
				htmlChunk += '<div>25.0 - 29.9</div>';
				htmlChunk += '<div>Gordo</div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="bmiKeyBoxDataRow">';
				htmlChunk += '<div>Más de 30.0</div>';
				htmlChunk += '<div>Obeso</div>';
				htmlChunk += '</div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="bmiResultBox">';
				htmlChunk += '<div class="bmiKeyBoxTitleRow">BMI Result</div>';
				htmlChunk += '<div id="bmiResult" class="bmiResultText">0.0</div>';
				htmlChunk += '</div>';
				htmlChunk += '</div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="bmiCalculatorBoxRight"></div>';
				htmlChunk += '</div>';
				htmlChunk += '<div class="doubleLine"></div>';
				htmlChunk += '</div>';


			if (document.getElementById(this.targetDivId))	{

				document.getElementById(this.targetDivId).innerHTML=htmlChunk;				
			}
			else {

				var obj = document.createElement("DIV");
				obj.innerHTML = htmlChunk;

				document.body.appendChild(obj);


			}

		}
		,
		/**
		*
		*
		**/
		calculateBMIFormula:function() {

			var bmi;

			
			//Perform Validations
			var inputValidationSuccess = this.validateInputs();
			if (inputValidationSuccess) return false;
			
			
			bmi = this.calculateBMI();
						
			//Show resultados
			this.resultados.innerHTML = bmi;
			this.resultados.className = 'bmiResultTextD';

		} //end calculateBMIFormula
		,
		/**
		* Calculates BMI for Metrico and imperial
		*
		**/
		calculateBMI:function() {
			var bmi = 0;
			
			if (this.imperialMetricooFlag == "imperial") {
				//Calculate Total Altura in pulgadas
				var totalAlturaInpulgadas = (Math.abs(this.pies.value) * 12) + Math.abs(this.pulgadas.value);

				//English BMI Formula: BMI = ( peso in Pounds / ( Altura in pulgadas ) x ( Altura in pulgadas ) ) x 703	
				bmi = (Math.abs(this.peso.value) /  (Math.abs(totalAlturaInpulgadas) * Math.abs(totalAlturaInpulgadas))) * this.bmiVariable;
		
			} else {
				bmi = Math.abs(this.peso.value) /  (Math.abs(this.metros.value) * Math.abs(this.metros.value)) * this.bmiVariable;;
			}

			return this.roundNumber(bmi,1);
			

		}//end calculateEnglishBMIFormula
		,
		/**
		* public 
		* @param num
		* @param dec
		**/
		roundNumber:function(num,dec) {

			var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
			return result;

		}
		,
		/**
		* public 
		*
		**/
		validateInputs:function() {
			
			//Check to see if value is entered
			if (this.peso.value.isEmpty())
			{
				this.displayErrorBox(errorMsgEnterValue)
				this.peso.focus();
				return true;
			}
			else {
				clearText(this.error);
			}

			//Check to see if it is a valid number
			if (isNaN(parseFloat(this.peso.value)))
			{
				this.displayErrorBox(errorMsgNaN)
				this.peso.value='';
				this.peso.focus();
				return true;
			}
			else {
				clearText(this.error);
			}


			if (this.imperialMetricooFlag == "imperial") {

				//Check to see if value is entered
				if (this.pies.value.isEmpty())
				{
					this.displayErrorBox(errorMsgEnterValue)
					this.pies.focus();
					return true;
				}
				else {
					clearText(this.error);
				}

				//Check to see if it is a valid number
				if (isNaN(this.pies.value))
				{
					this.displayErrorBox(errorMsgNaN)
					this.pies.value='';
					this.pies.focus();
					return true;
				}
				else {
					clearText(this.error);
				}

				//Check to see if value is entered
				if (this.pulgadas.value.isEmpty())
				{
					this.displayErrorBox(errorMsgEnterValue)
					this.pulgadas.focus();
					return true;
				}
				else {
					clearText(this.error);
				}

				//Check to see if it is a valid number
				if (isNaN(this.pulgadas.value))
				{
					this.displayErrorBox(errorMsgNaN)
					this.pulgadas.value='';
					this.pulgadas.focus();
					return true;
				}
				else {
					clearText(this.error);
				}

				//Make sure pulgadas is < 12
				if (this.pulgadas.value > 11)
				{
					this.displayErrorBox(errorpulgadasMax)
					this.pulgadas.focus();
					return true;
				}
				else {
					clearText(this.error);
				}

			}
			else {
				
				//Check to see if value is entered
				if (this.metros.value.isEmpty())
				{
					this.displayErrorBox(errorMsgEnterValue)
					this.metros.focus();
					return true;
				}
				else {
					clearText(this.error);
				}

				//Check to see if it is a valid number
				if (isNaN(this.metros.value))
				{
					this.displayErrorBox(errorMsgNaN)
					this.metros.value='';
					this.metros.focus();
					return true;
				}
				else {
					clearText(this.error);
				}
		

			}

		}//end validateInputs
		,
		/**
		* public 
		* @param {String} val This is a string parameter
		**/
		displayErrorBox:function(message) {
		
			this.error.innerHTML=message;
			this.error.className='bmiErrorBox errorText show';
		
		}
		,
		/**
		*
		*
		**/
		performToggle:function() {
			
			
			if (this.imperialMetricooFlag == "imperial") {
				
				document.getElementById("bmipiesRow").className = 'calculatorInputSectionInner dBlock';
				document.getElementById("bmiAlturaRow").className = 'calculatorInputSectionInner dBlock';
				document.getElementById("bmiMeterRow").className = 'dNone';
			}
			else {

				document.getElementById("bmipiesRow").className = 'dNone';
				document.getElementById("bmiAlturaRow").className = 'dNone';
				document.getElementById("bmiMeterRow").className = 'calculatorInputSectionInner dBlock';
			}

		}
		,
		/*
		*
		*
		*/
		appendScripts:function() {
		
			var head = document.getElementsByTagName('head').item(0);


			var jsFiles = this.importJsStr.split(",");
				
			if (!(jsFiles.length >= 1))
			{
				return true;
			}



			for (var i=0;i < jsFiles.length;i++) {

				var js = document.createElement('script');
				js.setAttribute('type', 'text/javascript');
				js.setAttribute('language', 'javascript');
				js.setAttribute('src', jsFiles[i]);
				head.appendChild(js);

			}


		}
		,
		//SETTERS
		/**
		* public 
		* @param {String} val This is a string parameter
		*
		**/
		setimperialMetricooFlag:function(val) {
			this.imperialMetricooFlag = val;
			if (this.imperialMetricooFlag == "imperial")
			{
				this.bmiVariable= 703;
			}
			else  {
				this.bmiVariable = 10000;
			}
				
			this.performToggle();
		}
		,
		/**
		* public 
		* @param {String} val This is a string parameter
		* 
		**/
		setTargetDIV:function(val) {
			this.targetDivId = val;
		}


	} //end BMICalculator.prototype



	String.prototype.isEmpty = function() {

		if (this == '')	{
			return true
		}
	}

	
	function clearText(obj) {
		
		obj.innerHTML='';
		
	}


	function ShowObj(obj) {
	
		obj.className='show';	
	
	}

	function hideObj(obj) {
	
		obj.className='hide';	
	
	}
