function roundOff(value, skipZeros) {
	var input = String(value);
	if (!input.length || input == 'NaN') input = '0';
	doSkipZeros = (skipZeros && value == parseInt(value));
	if (input.indexOf(".") == 0) input = '0' + input;
	if (input.indexOf(".") == -1) input += '.00';
		else input += '00';
	var pattern = /\d*.\d\d/;
	var result = String(pattern.exec(input));
	if (result != '') {
		if (doSkipZeros) return result.substring( 0, result.indexOf('.') );
		else return result;
	} else return (skipZeros)? '0' : '0.00'
}


var currentPage = 0;
var prevPage = null;
var nextPage = null;
var submitForm = false;
var enableSubmit = false;

function page(id, menuid, enabled, link, onenter) {
	this.id = id;
	this.menuid = menuid;
	this.enabled = enabled;
	this.link = link;
	this.onenter = onenter;
	return this;
}

function menuClick() {
	var menuItemId = this.id;
	var pageToTurn = null;
	for ( var p = 0; p < pages.length; p++ ) {
		if ( pages[p].menuid == menuItemId ) {
			if ( pages[p].enabled ) {
				pageToTurn = p;
				// stop only if it's default link for this menu item
				if ( pages[p].link ) break;
			}
		}
	}
	if ( pageToTurn != null ) turnToPage( pageToTurn );
}

function turnToPage( pageNo ) {
	if ( pageNo != currentPage ) {
		var nextPageElem = document.getElementById( pages[pageNo].id );
		if ( nextPageElem ) nextPageElem.style.display = 'block';
		var currentPageElem = document.getElementById( pages[currentPage].id );
		if ( currentPageElem ) currentPageElem.style.display = 'none';
		currentPage = pageNo;
		if ( pages[currentPage].onenter ) pages[currentPage].onenter();
		updateNav();
	}
}

function pageBack() { turnToPage( prevPage ); }
function pageForward() { turnToPage( nextPage ); }

function updateNav() {
	for ( var p = 0; p < pages.length; p++ ) {
		if (p != currentPage) {
			var menuItem = document.getElementById( pages[p].menuid );
			if ( menuItem ) {
				if ( !(!pages[p].enabled && pages[ p - 1 ] && pages[ p - 1 ].menuid == pages[p].menuid) ) {
					if ( pages[p].enabled && menuItem.className != 'menu-item' ) {
						menuItem.className = 'menu-item';
					} else if ( !pages[p].enabled && menuItem.className != 'menu-item-disabled' ) {
						menuItem.className = 'menu-item-disabled';
					}
				}
//				menuItem.className = ( pages[p].enabled )? 'menu-item' : 'menu-item-disabled';
			}
		}
	}
	if ( pages[currentPage] ) {
		var menuItem = document.getElementById( pages[currentPage].menuid );
		if ( menuItem && menuItem.className != 'menu-item-current' ) menuItem.className = 'menu-item-current';

		var nextButton = document.getElementById('nextButton');
		var sendButton = document.getElementById('sendButton');
		var backButton = document.getElementById('backButton');

		// determining previous available page
		prevPage = null;
		for ( var i = 0; i < currentPage; i++ ) if ( pages[i].enabled ) prevPage = i;
		if ( pages[currentPage - 1] ) {
			backButton.style.display = 'inline';
			backButton.disabled = (prevPage == null);
		} else {
			backButton.style.display = 'none';
		}

		// determining next available page
		nextPage = null;
		for ( var i = pages.length - 1; i > currentPage; i-- ) if ( pages[i].enabled ) nextPage = i;
		if ( pages[currentPage + 1] ) {
			nextButton.style.display = 'inline';
			sendButton.style.display = 'none';
			nextButton.disabled = (nextPage == null);
			submitForm = false;
		} else {
			sendButton.disabled = (!enableSubmit);
			submitForm = enableSubmit
			nextButton.style.display = 'none';
			sendButton.style.display = 'inline';
		}
	}
}

var formTags = ['input', 'textarea', 'select'];

function enableTab( elemId ) {
	var cElem = document.getElementById(elemId);
	if (cElem) {
		cElem.style.display = 'block';
		// we need to ENABLE all elements in the just opened tab
		for ( var tagIdx = 0; tagIdx < formTags.length; tagIdx++ )
			for ( var elemIdx = 0; (formElem = cElem.getElementsByTagName(formTags[tagIdx]).item(elemIdx)); elemIdx++ )
				formElem.disabled = false;
	}
}

function disableTab( elemId ) {
	var formElem;
	var cElem = document.getElementById(elemId);
	if (cElem) {
		cElem.style.display = 'none';
		// we need to DISABLE all elements in the tab we just hide
		for ( var tagIdx = 0; tagIdx < formTags.length; tagIdx++ )
			for ( var elemIdx = 0; (formElem = cElem.getElementsByTagName(formTags[tagIdx]).item(elemIdx)); elemIdx++ )
				formElem.disabled = true;
	}
}

function enablePage( pageNo ) { if ( pages[pageNo] ) pages[pageNo].enabled = true; }
function disablePage( pageNo ) { if ( pages[pageNo] ) pages[pageNo].enabled = false; }
function disableAllPagesFrom( pageNo ) { for ( var i = pageNo; i < pages.length; i++ ) pages[i].enabled = false; }

function checkElemValue( elem ) {
	if ( elem.className.indexOf('email') >= 0 ) {
		var re =  /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/;
		var nre = /(\s|\,)/ig;
		var nre2 = /(\s|\;)/ig;
		return !(re.test(elem.value) && !nre.test(elem.value) && !nre2.test(elem.value))
	} else if ( elem.options ) return ( elem.options[ elem.selectedIndex ].value == '' );
		else return ( elem.value == '' );
}

function checkCurrentPage() {
	var currPage = document.getElementById( pages[currentPage].id );
	var formElem;
	var requiredFields = 0;
	var oneOfFields = 0;
	var oneOf = false;
	for ( var tagIdx = 0; tagIdx < formTags.length; tagIdx++ ) {
		for ( var elemIdx = 0; (formElem = currPage.getElementsByTagName(formTags[tagIdx]).item(elemIdx)); elemIdx++ ) {
			if ( !formElem.disabled ) {
				if ( formElem.className.indexOf('one-of') >=0 ) {
					oneOfFields++;
					if ( !checkElemValue( formElem ) ) oneOf = true;
				} else if ( formElem.className.indexOf('required') >=0 ) {
					requiredFields++;
					if ( checkElemValue( formElem ) ) {
						disableAllPagesFrom( currentPage + 1 );
						enableSubmit = false;
						updateNav();
						return;
					}
				}
			}
		}
	}
	if ( oneOfFields > 0 && !oneOf ) {
		disableAllPagesFrom( currentPage + 1 );
		enableSubmit = false;
		updateNav();
	} else if ( oneOfFields > 0 || requiredFields > 0 ) {
		enablePage( currentPage + 1 );
		enableSubmit = true;
		updateNav();
	}
}


function init() {
	if ( document.createTextNode ) {
		// init menu
		for ( var p = 0; p < pages.length; p++ ) {
			var menuItem = document.getElementById( pages[p].menuid );
			if ( menuItem ) menuItem.onclick = menuClick;
		}
		updateNav();
		// init form elements
		var formElem;
		for ( var tagIdx = 0; tagIdx < formTags.length; tagIdx++ ) {
			for (var elemIdx = 0; (formElem = document.getElementsByTagName(formTags[tagIdx]).item(elemIdx)); elemIdx++) {
//						if ( !formTags[tagIdx].onchange ) formElem.onchange = checkCurrentPage;
				formElem.onkeyup = checkCurrentPage;
				if ( formTags[tagIdx] == 'select') {
					formElem.onclick = checkCurrentPage;
				} else {
					formElem.onchange = checkCurrentPage;
				}
			}
		}
		if ( pages[currentPage].onenter ) { pages[currentPage].onenter(); }
	}
}

window.onload = init;
