var CGI_PAGES		= null;
var CGI_AREACODE	= null;
var ACTIVATION_FEE	= '1.99';
var SHOW_ALL_AREACODES	= 1;
var ADMIN_HAS_FEE	= true;

/* port number functions */

// {{{ checkPortNumber( form ) 
function checkPortNumber( form ) {
	var areaCode	= $('admin_AreaCode');
	var pattern	= /^\d{3}$/; 

	if (!pattern.test(areaCode.value)) { 
		alert("Please choose are code");
		return false;
	}

	form.submit();
	return true;
}
// }}}

/* submit functions */

// {{{ signupFirstStepContinue( form ) 
function signupFirstStepContinue( form ) {
	var areaCode = $('admin_AreaCode');
	var acRegExp = /^\d{3}$/;

	if (!acRegExp.exec(areaCode.value)) {
		alert('Please choose Area Code');
		areaCode.focus();
		return false;
	}

	form.step.value = 'step2'; 
	form.submit();

	return true;
}
// }}}

/* signup functions */

// {{{ setSignupServiceType() 
function setSignupServiceType() {
	var types 		= new Array('Local', 'TollFree');
	var typesNames 		= new Array('Local', 'Toll Free');
	var serviceName		= $('admin_ServiceName');
	var serviceType 	= $('admin_ServiceType');

	// remove all option elements
	serviceType.length = 0;

	if (serviceName.value == 'secure-storage') {
		var text = document.createTextNode('-');
		var opt = document.createElement('option');
		opt.setAttribute('value', 'Local'); // pass checks
		opt.appendChild(text);
		opt.selected = true;
		serviceType.appendChild(opt);
	} else {
		for (var i = 0; i < types.length; i++) {
			// voicemail no toll-free
			if (serviceName.value == 'voicemail' && types[i] == 'TollFree')
				continue;
			// conference no toll-free
			if (serviceName.value == 'conf' && types[i] == 'TollFree')
				continue;

			var opt = document.createElement('option');
			opt.setAttribute('value', types[i]);

			if (types[i] == 'TollFree' && !IS_LOCAL_NUMBER) {
				opt.selected = true;
			} else if (types[i] == 'Local') {
				opt.selected = true;
			}

			var text = document.createTextNode(typesNames[i]);

			opt.appendChild(text);
			serviceType.appendChild(opt);
		}
	}

	/* this will exec on success getSignupPages(1) */
	setAreaCodes('admin_AreaCode', serviceName.value, serviceType.value);
}
// }}}

// {{{ getSignupPages( setTotalBool ) 
function getSignupPages(setTotalBool) {
	var serviceName		= $('admin_ServiceName').value;
	var serviceType		= $('admin_ServiceType').value;
	var tollFree		= (serviceType == 'Local') ? 0 : 1;
	var period			= $('admin_PayPeriod');
	var areaCode		= $('admin_AreaCode');
	var pages			= $('admin_Pages');
	var oldPagesValue	= (pages.value == '') ? null : pages.value;
	var ac				= getAreaCodeDefaulted(areaCode.value, tollFree);

	// fix toll free pay as you go
	if (tollFree && oldPagesValue == 0) {
		oldPagesValue = null;
	}

	new Ajax.Request('/json_of.cgi', { 
		method: 'post',
		parameters: { o: 'getAPPages', aff_id: AFF_ID, service_name: serviceName, toll_free: tollFree, area_code: ac, period: period.value },
		onSuccess: function(transport, json){
			var pArray 	 = transport.responseText.evalJSON(true);
			var haveSelected = false;
			var selectOption = '';
			var firstElement = 0;

			// remove all option elements
			pages.length = 0;

			// check if old pages value exists in the new result set
			if (oldPagesValue != null) {
				var haveIt = false;
				for (var i = 0; i < pArray.length; i++) {
					if (pArray[i].max == oldPagesValue) {
						haveIt = true;
						break;
					}
				}

				if (!haveIt) {
					oldPagesValue = null;
				}
			}

			// check if CGI_PAGES exists in the new result set
			if (CGI_PAGES != null) {
				var haveIt = false;
				for (var i = 0; i < pArray.length; i++) {
					if (pArray[i].max == CGI_PAGES) {
						haveIt = true;
						break;
					}
				}

				if (!haveIt) {
					CGI_PAGES = null;
				}
			}

			for (var i = 0; i < pArray.length; i++) {
				var opt = document.createElement('option');
				opt.setAttribute( 'value', pArray[i].max );

				switch (serviceName) {
					case 'conf':
						opt.selected = true;
						selectOption = 'Conferencing 10';
						break;
					case 'secure-storage':
						if (!haveSelected) {
							var sel = false;
							if (CGI_PAGES == null && oldPagesValue == null && i == firstElement) {
								sel = true;
							} else if (pArray[i].max == oldPagesValue) {
								sel = true;
							} else if (pArray[i].max == CGI_PAGES) {
								sel = true;
							}

							if (sel) {
								opt.selected = true;
								haveSelected = true;
							}
						}
						selectOption = 'Secure Storage ' + pArray[i].max + 'MB';
						break;
					case 'voicemail': 
						opt.selected = true;
						selectOption = 'Voicemail Unlimited Receiving';
						break;
					case 'fax':
						if (!haveSelected) {
							var sel = false;

							if ((!tollFree && pArray[i].max == -1) || (tollFree && pArray[i].max == 0)) {
								firstElement++;
							}

							if (CGI_PAGES == null && oldPagesValue == null && i == firstElement) {
								sel = true;
							} else if (pArray[i].max == oldPagesValue) { // higher priority then CGI_PAGES
								sel = true;
							} else if (pArray[i].max == CGI_PAGES) {
								sel = true;
							}

							if (sel) {
								opt.selected = true;
								haveSelected = true;
							}
						}

						if ((!tollFree && pArray[i].max == -1) || (tollFree && pArray[i].max == 0)) {
							selectOption = 'Pay As You Go / 5 Cents Per Page';
						} else {
							selectOption = (tollFree) ? 
								pArray[i].max + ' Pages Sending / Receiving' : 
								'Unlimited Receiving / ' + pArray[i].max + ' Pages Sending';
						}

						break;
				}

				var text = document.createTextNode(selectOption);
				opt.appendChild(text);
				pages.appendChild(opt);
			}

			if (setTotalBool) {
				setSignupTotal();
			}
		},
		onFailure: function(response) { $('jserror').innerHTML += '[JS]: ' + response.status + ': ' + response.statusText + '<br />'; },
		onException: function(request, ex) { /* do nothing */ }
	});
}
// }}}

// {{{ setSignupTotal() 
function setSignupTotal() {
	var serviceName		= $('admin_ServiceName').value;
	var serviceType		= $('admin_ServiceType').value;
	var tollFree		= (serviceType == 'Local') ? 0 : 1;
	var period		= $('admin_PayPeriod');
	var areaCode		= $('admin_AreaCode');
	var pages		= $('admin_Pages');
	var accountsNumber	= $('admin_Number');
	var price		= $('price');
	var activation		= $('activation');
	var total		= $('total');
	var notePages		= $('notePages');
	var ac			= getAreaCodeDefaulted(areaCode.value, tollFree);

	price.innerHTML 	= '$-.--';
	activation.innerHTML 	= '$-.--';
	total.innerHTML 	= '$-.--';

	if (serviceName == 'fax') {
		var pv = pages.value;
		if (tollFree) {
			notePages.innerHTML = '* 5 cents/page over ' + pv + ' pages<br/>** 22 cents/page for Hawaii, Alaska and Peurto Rico';
		} else {
			if (pv == -1) { 
				notePages.innerHTML = '* 5 cents/page over 0 pages';
			} else {
				notePages.innerHTML = '* 5 cents/page over ' + pv + ' pages of sending';
			}
		}
	} else if (serviceName == 'conf') {
		notePages.innerHTML = '* 5 cents/min<br/>** Rates are per caller';
	} else { // Voicemail & Secure Storage
		notePages.innerHTML = '';
	}

	new Ajax.Request('/json_of.cgi', { 
		method: 'post',
		parameters: { o: 'getACPPrice', aff_id: AFF_ID, service_name: serviceName, toll_free: tollFree, area_code: ac, period: period.value, pages: pages.value },
		onSuccess: function(transport, json){
			var acObj  = transport.responseText.evalJSON(true);  
			var pPrice = (accountsNumber.value * acObj.price).toFixed(2);
			var pFee   = (accountsNumber.value * ACTIVATION_FEE).toFixed(2);
			var pTotal = (parseFloat(pFee) + parseFloat(pPrice)).toFixed(2);

			price.innerHTML 	= '$' + pPrice;
			activation.innerHTML 	= '$' + pFee;
			total.innerHTML 	= '$' + pTotal;
		},
		onFailure: function(response) { $('jserror').innerHTML += '[JS]: ' + response.status + ': ' + response.statusText + '<br />'; },
		onException: function(request, ex) { /* do nothing */ }
	});
}
// }}}

/* admin add functions */

// {{{ setAdminAddServiceType() 
function setAdminAddServiceType() {
	var types			= new Array('Local', 'TollFree');
	var typesNames 		= new Array('Local', 'Toll Free');
	var serviceName		= $('ServiceName');
	var serviceType 	= $('ServiceType');

	// remove all option elements
	serviceType.length = 0;

	if (serviceName.value == 'secure-storage') {
		var text = document.createTextNode('-');
		var opt = document.createElement('option');
		opt.setAttribute('value', 'Local'); // pass checks
		opt.appendChild(text);
		opt.selected = true;
		serviceType.appendChild(opt);
	} else {
		for (var i = 0; i < types.length; i++) {
			if (types[i] == 'TollFree') {
				if (!ALLOW_TOLLFREE)
					continue;
				if (serviceName.value == 'voicemail')
					continue;
				if (serviceName.value == 'conf')
					continue;
			}

			var opt = document.createElement('option');
			opt.setAttribute('value', types[i]);

			if (types[i] == 'TollFree' && !IS_LOCAL_NUMBER) {
				opt.selected = true;
			} else if (types[i] == 'Local') {
				opt.selected = true;
			}

			var text = document.createTextNode(typesNames[i]);

			opt.appendChild(text);
			serviceType.appendChild(opt);
		}
	}

	/* this will exec on success getSignupPages(1) */
	setAreaCodes('AreaCode', serviceName.value, serviceType.value);
}
// }}}

// {{{ getAdminAddPages( setTotalBool ) 
function getAdminAddPages( setTotalBool ) {
	var serviceName		= $('ServiceName').value;
	var serviceType		= $('ServiceType').value;
	var tollFree		= (serviceType == 'Local') ? 0 : 1;
	var period			= $('PayPeriod');
	var areaCode		= $('AreaCode');
	var pages			= $('Pages');
	var oldPagesValue	= (pages.value == '') ? null : pages.value;
	var ac				= getAreaCodeDefaulted(areaCode.value, tollFree);

	// fix toll free pay as you go
	if (tollFree && oldPagesValue == 0) {
		oldPagesValue = null;
	}

	new Ajax.Request('/json_of.cgi', { 
		method: 'post',
		parameters: { o: 'getAPPages', aff_id: AFF_ID, admin_id: ADMIN_ID, service_name: serviceName, toll_free: tollFree, area_code: ac, period: period.value },
		onSuccess: function(transport, json){
			var pArray 	 = transport.responseText.evalJSON(true);
			var haveSelected = false;
			var selectOption = '';
			var firstElement = 0;

			// remove all option elements
			pages.length = 0;

			// check if old pages value exists in the new result set
			if (oldPagesValue != null) {
				var haveIt = false;
				for (var i = 0; i < pArray.length; i++) {
					if (pArray[i].max == oldPagesValue) {
						haveIt = true;
						break;
					}
				}

				if (!haveIt) {
					oldPagesValue = null;
				}
			}

			// check if CGI_PAGES exists in the new result set
			if (CGI_PAGES != null) {
				var haveIt = false;
				for (var i = 0; i < pArray.length; i++) {
					if (pArray[i].max == CGI_PAGES) {
						haveIt = true;
						break;
					}
				}

				if (!haveIt) {
					CGI_PAGES = null;
				}
			}

			for (var i = 0; i < pArray.length; i++) {
				var opt = document.createElement('option');
				opt.setAttribute('value', pArray[i].max);

				switch (serviceName) {
					case 'conf':
						opt.selected = true;
						selectOption = 'Conferencing 10';
						break;
					case 'secure-storage':
						if (!haveSelected) {
							var sel = false;
							if (CGI_PAGES == null && oldPagesValue == null && i == firstElement) {
								sel = true;
							} else if (pArray[i].max == oldPagesValue) {
								sel = true;
							} else if (pArray[i].max == CGI_PAGES) {
								sel = true;
							}

							if (sel) {
								opt.selected = true;
								haveSelected = true;
							}
						}
						selectOption = 'Secure Storage ' + pArray[i].max + 'MB';
						break;
					case 'voicemail': 
						opt.selected = true;
						selectOption = 'Voicemail Unlimited Receiving';
						break;
					case 'fax':
						if (!haveSelected) {
							var sel = false;

							if ((!tollFree && pArray[i].max == -1) || (tollFree && pArray[i].max == 0)) {
								firstElement++;
							}

							if (CGI_PAGES == null && oldPagesValue == null && i == firstElement) {
								sel = true;
							} else if (pArray[i].max == oldPagesValue) {
								sel = true;
							} else if (pArray[i].max == CGI_PAGES) {
								sel = true;
							}

							if (sel) {
								opt.selected = true;
								haveSelected = true;
							}
						}

						if ((!tollFree && pArray[i].max == -1) || (tollFree && pArray[i].max == 0)) {
							selectOption = 'Pay As You Go / 5 Cents Per Page';
						} else {
							selectOption = (tollFree) ? 
								pArray[i].max + ' Pages Sending / Receiving' : 
								'Unlimited Receiving / ' + pArray[i].max + ' Pages Sending';
						}

						break;
				}

				var text = document.createTextNode(selectOption);
				opt.appendChild(text);
				pages.appendChild(opt);
			}

			if (setTotalBool) {
				setAdminAddTotal();
			}
		},
		onFailure: function(response) { $('jserror').innerHTML += '[JS]: ' + response.status + ': ' + response.statusText + '<br />'; },
		onException: function(request, ex) { /* do nothing */ }
	});
}
// }}}

// {{{ setAdminAddTotal() 
function setAdminAddTotal() {
	var serviceName		= $('ServiceName').value;
	var serviceType		= $('ServiceType').value;
	var tollFree		= (serviceType == 'Local') ? 0 : 1;
	var period			= $('PayPeriod');
	var areaCode		= $('AreaCode');
	var accountsNumber	= $('Number');
	var pages			= $('Pages');
	var ac				= getAreaCodeDefaulted(areaCode.value, tollFree);

	new Ajax.Request('/json_of.cgi', { 
		method: 'post',
		parameters: { o: 'getAPPrice', aff_id: AFF_ID, admin_id: ADMIN_ID, service_name: serviceName, toll_free: tollFree, area_code: ac, period: period.value, pages: pages.value },
		onSuccess: function(transport, json){
			var acObj			= transport.responseText.evalJSON(true);  
			var pro				= (acObj.pro == 1) ? true : false;
			var price		 	= roundNumber(accountsNumber.value * acObj.price, 2);
			var proPrice		= roundNumber(accountsNumber.value * acObj.proPrice, 2);
			var pp1				= (pro) ? (parseFloat(proPrice) - parseFloat(price)).toFixed(2) : proPrice;
			var activationFee	= (ADMIN_HAS_FEE) ? (accountsNumber.value * ACTIVATION_FEE).toFixed(2) : '0.00';
			var totalAmount		= (parseFloat(activationFee) + parseFloat(proPrice)).toFixed(2);
			var usedCredits		= (totalAmount > ADMIN_CREDITS) ? ADMIN_CREDITS : totalAmount;
			var totalPrice		= (parseFloat(totalAmount) - parseFloat(usedCredits)).toFixed(2);
	
			$('sp1').innerHTML			= acObj.proStartPeriod;
			$('ep1').innerHTML			= acObj.endPeriod;
			$('pp1').innerHTML			= '$' + pp1;
			$('nrd').innerHTML			= acObj.proEndPeriod;
			$('pr1').innerHTML			= (pro) ? 'Prorated Cycle' : 'Next Cycle';
			$('pp2TR').style.display	= (pro) ? '' : 'none';
			$('sp2').innerHTML			= acObj.endPeriod;
			$('ep2').innerHTML			= acObj.proEndPeriod;
			$('pp2').innerHTML			= '$' + price;
			$('activation').innerHTML 	= '$' + activationFee;
			$('price').innerHTML		= '$' + price;
			$('credits').innerHTML		= '- $' + ((usedCredits > 0) ? usedCredits : '0.00');
			$('total').innerHTML		= '$' + ((totalPrice > 0) ? totalPrice : '0.00');
		},
		onFailure: function(response) { $('jserror').innerHTML += '[JS]: ' + response.status + ': ' + response.statusText + '<br />'; },
		onException: function(request, ex) { /* do nothing */ }
	});
}
// }}}

/* global functions */

// {{{ setAreaCodes( elAreaCode, serviceName, serviceType ) 
function setAreaCodes( elAreaCode, serviceName, serviceType ) {
	var areaCode	= $(elAreaCode);
	var tollFree 	= (serviceType == 'Local') ? 0 : 1;
	var oldValue	= areaCode.value;

	if (serviceName == 'secure-storage') {
		areaCode.length = 0;
		var opt = document.createElement('option');
		var text = document.createTextNode('-');
		opt.setAttribute('value', '954');
		opt.appendChild(text);
		areaCode.appendChild(opt);
		(elAreaCode == 'AreaCode') ? getAdminAddPages(1) : getSignupPages(1);
		return true;
	}

	new Ajax.Request('/json_of.cgi', { 
		method: 'post',
		parameters: { o: 'getAreaCodes', all: SHOW_ALL_AREACODES, toll_free: tollFree },
		onSuccess: function(transport, json){
			var pArray 	 = transport.responseText.evalJSON(true);
			var haveSelected = false;

			// remove all option elements
			areaCode.length = 0;

			var opt = document.createElement('option');
			var text = document.createTextNode('Choose Area Code');
			opt.setAttribute('value', '');
			opt.appendChild(text);
			areaCode.appendChild(opt);

			for (var i = 0; i < pArray.length; i++) {
				opt = document.createElement('option');
				opt.setAttribute('value', pArray[i].id);
				if (!haveSelected) {
					var sel = false;
					if (pArray[i].id == CGI_AREACODE) {
						sel = true;
					} else if (pArray[i].id == oldValue) {
						sel = true;
					}

					if (sel) {
						opt.selected = true;
						haveSelected = true;
					}
				}
				text = document.createTextNode(pArray[i].id + ' - ' + pArray[i].state);
				opt.appendChild(text);
				areaCode.appendChild(opt);
			}
	
			(elAreaCode == 'AreaCode') ? getAdminAddPages(1) : getSignupPages(1);
		},
		onFailure: function(response) { $('jserror').innerHTML += '[JS]: ' + response.status + ': ' + response.statusText + '<br />'; },
		onException: function(request, ex) { /* do nothing */ }
	});
}
// }}}

// {{{ getAreaCodeDefaulted( value, tollFree ) 
function getAreaCodeDefaulted( value, tollFree ) {
	var ac;

	if (value == '') {
		ac = (tollFree) ? 866 : 954;
	} else {
		ac = value;
	}

	return ac;
}
// }}}

// {{{ roundNumber( number, digits ) 
function roundNumber(number, digits) {
	var multiple = Math.pow(10, digits);
	var rndedNum = Math.round(number * multiple) / multiple;
	return (parseFloat(rndedNum)).toFixed(digits);         
}
// }}}


