﻿// JScript File
/*
if(window.HTMLElement) {
	HTMLElement.prototype.__defineGetter__("children",
		function(){
		var tmp=[];
		var j=0;
		var n;
		for(var i=0;i<this.childNodes.length;i++){
			n=this.childNodes[i];
			if(n.nodeType==1){
				tmp[j++]=n;
				if(n.name){
					if(!tmp[n.name])
						tmp[n.name]=[];
					tmp[n.name][tmp[n.name].length]=n;
				}
				if(n.id)
					tmp[n.id]=n;
				}
			}
			return tmp;
		}
	);
}

if(window.Node) {
	Node.prototype.swapNode=function(node){
		var nextSibling=node.nextSibling;
		var parentNode=node.parentNode;
		this.parentNode.replaceChild(node, this);
		parentNode.insertBefore(node,nextSibling);
	}
}
*/

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

// custom swapNode function
function cSwap(n1, n2) {
             if (n1.swapNode) {// IE only 
                 n1.swapNode(n2);
             } else {
                 // the node reference order for the swap is a little tricky.
                 var p = n2.parentNode;
                 var s = n2.nextSibling;
                 n1.parentNode.replaceChild(n2,n1);
                p.insertBefore(n1,s);
             }
}

var js_q3Answer = -1;
var js_subTotal = -1;
var js_total = -1;
var js_vat = -1;
var js_AverageHourlyWage = -1;
var currentCurrencySymbol = '&pound;';
var sessRefreshTime = 1 * 60 * 1000;
var bannerImg = new Image();

function contanceCheckBoxClick(checkBox)
{
	var row = document.getElementById('additionalInfo');
	//var checkedAttr = checkBox.getAttribute('checked');
	if (checkBox.checked) {
		row.style.display = 'inline';
	} else {
		row.style.display = 'none';
	}
}

function OnCheckBoxClick(checkBox, newState) {
	//var checkedAttr = checkBox.getAttribute('checked');
	if (isAnimationInProcess) {
		//checkBox.setAttribute('checked', !checkedAttr);
		checkBox.checked = !checkBox.checked;
		return;
	}
	if (newState != null) {
		//checkBox.setAttribute('checked', newState);
		checkBox.checked = newState;
	}
	//checkedAttr = checkBox.getAttribute('checked');
	if (checkBox.checked) {
		checkBox.parentNode.parentNode.parentNode.rows[0].style.backgroundColor = '';
		checkBox.parentNode.parentNode.parentNode.rows[0].className = 'selectedParts';
	} else {
		checkBox.parentNode.parentNode.parentNode.rows[0].className = 'unselectedParts';
		/*var attrV = checkBox.parentNode.parentNode.parentNode.parentNode.getAttribute('isoption');
		if (attrV && attrV.toLowerCase() == 'true') {
			checkBox.parentNode.parentNode.parentNode.rows[0].style.backgroundColor = 'white';
		}*/		
	}
	
	if (newState == null && checkBox.checked) {
		uncheckSameGroup(checkBox);
	}
	
	if (newState == null) {
		calculateAll();
	}
}

function getCheckBoxStates(parent)
{
	var inputs = parent.getElementsByTagName('INPUT');
	var result = new Array();
	var checkBoxCount = 0;
	for(var i=0; i<inputs.length; i++) {
		var attr = inputs[i].getAttribute('TYPE');
		if (attr.toLowerCase() == 'checkbox') {
			result[checkBoxCount] = new Array(2);
			result[checkBoxCount][0] = inputs[i].getAttribute('id');
			//result[checkBoxCount][1] = inputs[i].getAttribute('checked');
			result[checkBoxCount][1] = inputs[i].checked;
			checkBoxCount++;
		}
	}
	return result;
}

function restoreCheckBoxesStates(array)
{
	for(var i=0; i<array.length; i++) {
		var c = document.getElementById(array[i][0]);
		if (c) {
			//c.setAttribute('checked', array[i][1]);
			c.checked = array[i][1];
		}
	}
}

function moveOptionToUpSchedule(checkBoxId)
{
	var checkBox = document.getElementById(checkBoxId);
	if (checkBox) {
		if (isAnimationInProcess) {
			window.setTimeout("moveOptionToUpSchedule('" + checkBoxId + "');", 100);
		} else {
			
			moveOptionToUp(checkBox);
		}
	}
}

var isAnimationInProcess = false;
var rowToBeRemoved = null;
var newRow = null;
var array = null;
var mainTable = null;
function moveOptionToUp(checkBox)
{
/* -- ANIMATIO WAS REMOVED - 
	//var isChecked = checkBox.getAttribute('checked');
	var isChecked = checkBox.checked;
	if (isChecked) {
		isAnimationInProcess = true;
		var parent = checkBox.parentNode;
		var table = null;		
	// find all needed objects
		// find 'parts group' table
		while(parent.tagName.toLowerCase() != 'table')	{
			parent = parent.parentNode;
		}
		table = parent;
		
		// find row to be removed
		while(parent.tagName.toLowerCase() != 'tr') {
			parent = parent.parentNode;
		}
		rowToBeRemoved = parent;
		mainTable = rowToBeRemoved.parentNode;
		if (rowToBeRemoved.previousSibling) {
	    // remember states of all checkboxes
		    array = getCheckBoxStates(mainTable);
	    // create HtmlTableRow with DIV control inside to anime row height changes
		    var divControl = document.createElement("DIV");
		    newRow = document.createElement("TR");
		    var newCell = document.createElement("TD");
		    divControl.setAttribute('height', 0);
		    newCell.appendChild(divControl);
		    var divControlId = checkBox.getAttribute('id') + '_div';
		    divControl.setAttribute('id', divControlId);
		    newRow.appendChild(newCell);
		    placeOnTop(mainTable, newRow);
		    restoreCheckBoxesStates(array);
	    // make animation
		    var maxHeight = parseInt(String(rowToBeRemoved.offsetHeight));
		    animate(divControlId, maxHeight);
		} else {
		    isAnimationInProcess = false;
		}
		
	}	
	*/
}



function animate(divControlId, maxHeightStr)
{
	try {
		var maxHeight = parseInt(maxHeightStr);
		var divControl = document.getElementById(divControlId);
		var MAXSteps = 5;
		var stepHeight = Math.round(maxHeight/MAXSteps);
		if (divControl) {
			var h = 0;
			try {
				h = parseInt(divControl.style.height);
			} catch(e) {
				h = 0;
			}
			if (isNaN(h)) {
				h = 0;
			}
			
			if (h > maxHeight) {
				swapRows();
				return;
			} else {
				divControl.style.height = String(h + stepHeight) + 'px';
				window.setTimeout("animate('" + divControlId + "', '" + maxHeightStr + "');", 50);
			}
		}
	} catch (e) {
		restoreCheckBoxesStates(array);
		isAnimateInProcess = false;
		return;
	}
}

function customSwapNode(firstNode, node)
{
	var nextSibling=firstNode.nextSibling;
	var parentNode=firstNode.parentNode;
	node.parentNode.replaceChild(firstNode, node);
	parentNode.insertBefore(node,nextSibling);
}

function swapRows()
{
	if (newRow && rowToBeRemoved) {
		//newRow.swapNode(rowToBeRemoved);
		cSwap(newRow, rowToBeRemoved);
	}
	restoreCheckBoxesStates(array);
	mainTable.removeChild(newRow);
	isAnimationInProcess = false;
}

function placeOnTop(parent, n) {
    parent.appendChild(n);
    var childs = parent.children;
    for(var i = parent.childNodes.length - 1; i>0; i--) {
		//parent.children(i-1).swapNode(parent.children(i));
		//parent.childNodes[i-1].swapNode(parent.childNodes[i]);
		cSwap(parent.childNodes[i-1], parent.childNodes[i]);
		//childs[i-1].swapNode(childs[i]);
    }
}

function uncheckSameGroup(checkBox)
{
	var group = checkBox.getAttribute('groupName'); 
	if (group != null) {
		var controls = document.getElementsByTagName('INPUT');
		for(index=0; index<controls.length; index++) {
			if (controls[index] && checkBox.id != controls[index].id) {
				var attr = controls[index].getAttribute('TYPE');
				var groupAttr = controls[index].getAttribute('groupName');
				if (attr.toLowerCase() == 'checkbox' && groupAttr == group) {
					OnCheckBoxClick(controls[index], false);
				}
			}
		}
	}
}

function displayCostingWithParse(subTotalNumberStr)
{
	var subTotalNumber = parseFloat(subTotalNumberStr);
	displayCosting(subTotalNumber);
}

function displayCosting(subTotalNumber)
{
	var subTotal = document.getElementById('subTotal');
	//var vat = document.getElementById('vat');
	//var total = document.getElementById('total');
	var totalNumber = 0;
	if (subTotalNumber > 0) {
		subTotal.innerHTML = currentCurrencySymbol + subTotalNumber;
		//vat.innerHTML = currentCurrencySymbol + Math.round(subTotalNumber * 0.1746);
		totalNumber = (Math.round(subTotalNumber * 0.1746) + subTotalNumber);
		//total.innerHTML = currentCurrencySymbol + totalNumber;
		
	} else {
		subTotal.innerHTML = '--';
		//vat.innerHTML = '--';
		//total.innerHTML = '--';
	}
	return totalNumber;
}

function displaySavingsWithParse(q3AnswerStr, totalNumberStr)
{
	var q3Answer = parseInt(q3AnswerStr);
	var totalNumber = parseFloat(totalNumberStr);
	displaySavings(q3Answer, totalNumber);
}

function displaySavings(q3Answer, totalNumber)
{
	var perMonthControl = document.getElementById('perMonth');
	var perYearControl = document.getElementById('perYear');
	var roiTimeControl = document.getElementById('roiTime');
	
	var perM = 0;
	var perY = 0;
	var roi = 0;
	
	var z_perM = 0;
	var z_perY = 0;
	var z_roi = 0;
	
	var MF = 5; // Minutes per fax
	var W = js_AverageHourlyWage; //Average hourly wage (in pounds)
	var M = 12; //Months per year
	var D = 20; //Working days per month
	//alert('AHW = ' + W);
	if (q3Answer > 0 && totalNumber > 0 ) {
		perM = (q3Answer * MF * W * D) / 60; // Current cost per month
		z_perM = perM * 0.2; // Zetafax cost per month
		perY = perM * M;//(q3Answer * MF * W * D * M) / 60; // Current cost per annum
		z_perY = perY * 0.2; // Zetafax cost per annum
		perMonthControl.innerHTML = currentCurrencySymbol + Math.round((perM - z_perM) * 100) / 100; // Saving per month
		perYearControl.innerHTML = currentCurrencySymbol + Math.round((perY - z_perY) * 100) / 100; // Saving per annum
		var roiValue = Math.ceil(totalNumber / (perM - z_perM)); // ROI time
		if (roiValue > 18) { // if ROI time is more than 18 months than we should not display ROI time
			roiTimeControl.parentNode.parentNode.style.display = 'none';
			roiTimeControl.innerHTML = '';
		} else {
			roiTimeControl.parentNode.parentNode.style.display = '';
			roiTimeControl.innerHTML = roiValue;
		}
		drawChart(q3Answer, perM, perY, z_perM, z_perY);
	} else {
		perMonthControl.innerHTML = '--';
		perYearControl.innerHTML = '--';
		roiTimeControl.innerHTML = '--';
		
		drawChart(-1, perM, perY, z_perM, z_perY);
	}
}

function clearDevesionLabels()
{
    var firstLabel = document.getElementById('oneChartLabel');
    var secondLabel = document.getElementById('twoChartLabel');
    var thirdLabel = document.getElementById('threeChartLabel');
    var fourthLabel = document.getElementById('fourChartLabel');
    var fivesLabel = document.getElementById('fiveChartLabel');
    var sixsLabel = document.getElementById('sixChartLabel');
    
    firstLabel.innerHTML = ''
    secondLabel.innerHTML = '';
    thirdLabel.innerHTML = '';
    fourthLabel.innerHTML = '';
    fivesLabel.innerHTML = '';
    sixsLabel.innerHTML = '';
}

function setDevesionLabels(divisionStep)
{
    var firstLabel = document.getElementById('oneChartLabel');
    var secondLabel = document.getElementById('twoChartLabel');
    var thirdLabel = document.getElementById('threeChartLabel');
    var fourthLabel = document.getElementById('fourChartLabel');
    var fivesLabel = document.getElementById('fiveChartLabel');
    var sixsLabel = document.getElementById('sixChartLabel');
    var initialValue = 0;
    firstLabel.innerHTML = String(initialValue);
    secondLabel.innerHTML = String(initialValue += divisionStep);
    thirdLabel.innerHTML = String(initialValue += divisionStep);
    fourthLabel.innerHTML = String(initialValue += divisionStep);
    fivesLabel.innerHTML = String(initialValue += divisionStep);
    sixsLabel.innerHTML = String(initialValue += divisionStep);
}

function drawChart(q3Answer, perM, perY, z_perM, z_perY)
{
	var chartTable = document.getElementById('innerChartTable');
	var perMonth_chart = document.getElementById('currentMethodMonthChart');
	var z_perMonth_chart = document.getElementById('zetafaxMethodMonthChart');
	var perYear_chart = document.getElementById('currentMethodYearChart');
	var z_perYear_chart = document.getElementById('zetafaxMethodYearChart');
		
	if (q3Answer > 0) {
	    var maxColumnHeight = perY > z_perY ? perY : z_perY;
	    var maxValue = Math.ceil(maxColumnHeight);
	    var divisionStep = Math.round(maxValue / 5); 
	    setDevesionLabels(divisionStep);
		var oneDollHeight = chartTable.offsetHeight / maxValue; 
		//alert(perM + ' : ' + z_perM + ' : ' + perY + ' : ' + z_perY);
		var maxControlHeight = String(chartTable.offsetHeight-1) + 'px'; // -1 needs to avoid some diffects on FF browser
		if (perM < maxValue) {
			perMonth_chart.style.height = String(Math.round(oneDollHeight * perM)) + 'px';
		} else {
			perMonth_chart.style.height = maxControlHeight;
		}
		if (z_perM < maxValue) {
			z_perMonth_chart.style.height = String(Math.round(oneDollHeight * z_perM)) + 'px';
		} else {
			z_perMonth_chart.style.height = maxControlHeight;
		}
		if (perY < maxValue) {
			perYear_chart.style.height = String(Math.round(oneDollHeight * perY)) + 'px';
		} else {
			perYear_chart.style.height = maxControlHeight;
		}
		if (z_perY < maxValue) {
			z_perYear_chart.style.height = String(Math.round(oneDollHeight * z_perY)) + 'px';
		} else {
			z_perYear_chart.style.height = maxControlHeight;
		}
	} else {
	    clearDevesionLabels();
		perMonth_chart.style.height = 0;
		z_perMonth_chart.style.height = 0;
		perYear_chart.style.height = 0;
		z_perYear_chart.style.height = 0;
	}
}

function calculateAll()
{
	var totalNumber = 0;
	var subTotalNumber = 0;
	
	var checkBoxes = document.getElementsByTagName('INPUT');
	for(index=0; index<checkBoxes.length; index++) {
		var cb = checkBoxes[index];
		var price = checkBoxes[index].getAttribute('price');
		//var checkedAttr = cb.getAttribute('checked');
		var checkedAttr = cb.checked;
		if (cb != null && checkedAttr && price != "undefined" && price != null) {
			var rowValue = parseInt(price);
			subTotalNumber = subTotalNumber + rowValue;
		}
	}
	
	totalNumber = displayCosting(subTotalNumber);
	
	displaySavings(js_q3Answer, totalNumber);
}

function countrySelectedChange(control)
{
	var q = document.getElementById('notForAmerica');
	if (q) {
		try {
			var text = control.options[control.selectedIndex].text
			if (text != 'USA' && text != 'United Kingdom') {
			    
				q.style.display = 'none';
				//q.style.height = '0px';
				//q.visible = 'false';
			} else {
			    
				q.style.display = 'inline';
				//q.style.height = '0px';
				//q.visible = 'true';
			}
		} catch (e) {
			return;
		}
	}
}

function EmailButtonClick()
{
	window.open('EmailPage.aspx', '_blank', 'width=800, height=300, location=yes, menubar=yes, scrollbars=yes, resizable=yes');
}

function CallMeButtonClick()
{
    window.open('EmailPage.aspx?isAdvanced=true', '_blank', 'width=800, height=300, location=yes, menubar=yes, scrollbars=yes, resizable=yes');
}

function HowCostingDoneClick()
{
	window.open('HowCostingDone.aspx', '_blank', 'width=800, height=600, location=yes, menubar=yes, scrollbars=yes, resizable=yes');
}

function OnRecomendPhoneLinesNumberClick()
{
	var q = document.getElementById('phoneLinesRequire');
	var q2 = document.getElementById('howManyPeopleText');
	if (q && q2) {
		try {
			if (q2.value.length == 0)
			{
				q.value = '0';
				return;
			}
			var q2Answer = parseInt(q2.value);
			if (q2Answer <= 0) {
				q.value = '0';
				return;
			}
			if (q2Answer >= 1 && q2Answer <= 25) {
				q.value = '1';
			} else if (q2Answer >= 26 && q2Answer <= 50) {
				q.value = '2';
			} else if (q2Answer >= 51 && q2Answer <= 75) {
				q.value = '3';
			} else if (q2Answer >= 76 && q2Answer <= 100) {
				q.value = '4';
			} else {
				q.value = '5';
			}
		} catch(e) {
			if (q) {
				q.value = '0';
			}
		}
	}	
}

function phoneLinesRequireValidate(source, arguments)
{
	try {
		var q = document.getElementById('notForAmerica');
		if (q.style.display == 'none' || q.visible == 'false') {
			if (arguments)
				arguments.IsValid = true;
		} else {
			if (arguments)
				arguments.IsValid = arguments.Value.match(/^\d{1,12}$/);
		}
		setValidatorClassName(source, arguments);
	} catch (e) {}
}

function emailFormAdditionalFieldValidate(source, arguments)
{
	try {
		var q = document.getElementById('additionalInfoChk');
		//var checkedAttr = q.getAttribute('checked');
		var checkedAttr = q.checked;
		if (checkedAttr) {
			if (arguments)
				arguments.IsValid = arguments.Value.trim().length > 0;
		} else {
			if (arguments)
				arguments.IsValid = true;
		}
		setValidatorClassName(source, arguments);
	} catch (e) {}
}

function init()
{
	var controls = document.getElementsByTagName('INPUT');
	for(index=0; index<controls.length; index++) {
		if (controls[index]) {
			var attr = controls[index].getAttribute('TYPE');
			var questionAttribute = controls[index].getAttribute('questionNumber');
			//var checkedAttr = controls[index].getAttribute('checked');
			var checkedAttr = controls[index].checked;
			if (attr.toLowerCase() == 'checkbox' && checkedAttr && questionAttribute == null) {
				controls[index].parentNode.parentNode.parentNode.rows[0].className = 'selectedParts';
			}
		}
	}
	var specificationTab = document.getElementById('systemRecomendedRegion');
	if (specificationTab) {
	// call this method only if we are on specification tab, 
	// becose for another tabs calculation done on server and 
	// than call specific JS to display results.
		calculateAll();
	}
	var country = document.getElementById('country');
	countrySelectedChange(country);
}

function GroupCheckBoxClicked(arg, context)
{
	// DO NOTHING
}

// keep session alive
function RotateBanner()
{
	try { bannerImg.src = "SessionImage.aspx?n=" + Math.round(Math.random() * 1000000); }
	catch(e) {}
	window.setTimeout("RotateBanner()", sessRefreshTime);
}
window.setTimeout("RotateBanner()", sessRefreshTime);

function customIntegerValidator(source, arguments)
{
    try {
		if (arguments)
			arguments.IsValid = arguments.Value.match(/^\d{1,12}$/);
			setValidatorClassName(source, arguments);
	} catch (e) {}
}

function customRequiredValidator(source, arguments)
{
    if (arguments)
		arguments.IsValid = arguments.Value.length > 0;
	setValidatorClassName(source, arguments);
}

function validateEmailAddress(source, arguments)
{
	try {
		if (arguments)
		 //^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$
			arguments.IsValid = arguments.Value.match(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/);
			setValidatorClassName(source, arguments);
	} catch (e) {}
}

function setValidatorClassName(source, arguments)
{
    if (arguments.IsValid) {
	    source.parentNode.className = '';
	} else {
	    source.parentNode.className = 'validationError';
	}
}

