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;

	for (var i = 0; i < types.length; i++) {
		if (types[i] == 'TollFree') {
			if (serviceName.value == 'voice')
				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', 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 );

				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';
				}

				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' || tollFree) {
		var pv = pages.value;
		if (tollFree) {
			notePages.innerHTML = '5 cents per additional page over ' + pv + ' pages';
		} else {
			if (pv == -1) { 
				notePages.innerHTML = '5 cents per page additional over 0 pages';
			} else {
				notePages.innerHTML = '5 cents per page additional over ' + pv + ' pages of sending';
			}
		}
	} else { // Voicemail Local
		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 pTotal = (parseFloat(ACTIVATION_FEE) + parseFloat(pPrice)).toFixed(2);

			price.innerHTML 	= '$' + pPrice;
			activation.innerHTML 	= '$' + ACTIVATION_FEE;
			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;

	for (var i = 0; i < types.length; i++) {
		if (types[i] == 'TollFree') {
			if (!ALLOW_TOLLFREE)
				continue;
			if (serviceName.value == 'voice')
				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', 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);

				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';
				}

				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 price		= $('price');
	var unusedCredits	= $('unusedCredits');
	var activation		= $('activation');
	var total		= $('total');
	var ac			= getAreaCodeDefaulted(areaCode.value, tollFree);

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

	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 serviceTypePrice 	= (accountsNumber.value * acObj.price).toFixed(2);
			var leftCredits		= (ADMIN_HAS_FEE) ?
				(parseFloat(ADMIN_CREDITS) - parseFloat(ACTIVATION_FEE) - parseFloat(serviceTypePrice)).toFixed(2) :
				(parseFloat(ADMIN_CREDITS) - parseFloat(serviceTypePrice)).toFixed(2);
			var totalPrice		= (ADMIN_HAS_FEE) ?
				(parseFloat(ACTIVATION_FEE) + parseFloat(serviceTypePrice) - parseFloat(ADMIN_CREDITS)).toFixed(2) :
				(parseFloat(serviceTypePrice) - parseFloat(ADMIN_CREDITS)).toFixed(2);

			activation.innerHTML 	= '$' + ((ADMIN_HAS_FEE) ? ACTIVATION_FEE : '0.00');
			price.innerHTML 	= '$' + serviceTypePrice;
			unusedCredits.innerHTML = '$' + ((leftCredits > 0) ? leftCredits : '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, serviceType ) 
function setAreaCodes( elAreaCode, serviceType ) {
	var areaCode	= $(elAreaCode);
	var tollFree 	= (serviceType == 'Local') ? 0 : 1;
	var oldValue	= areaCode.value;

	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);
			}
	
			if (elAreaCode == 'AreaCode') {
				getAdminAddPages(1);
			} else {
				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;
}
// }}}

