function phoneFormFieldHandler(obj)
{
	var phoneNumber = new String(obj.value);
	phoneNumber = phoneNumber.replace(/[^0-9]/g, "");

	if (phoneNumber.length == 11 && phoneNumber.charAt(0) == '1')
		phoneNumber = phoneNumber.substr(1);
	if (phoneNumber.length != 10)
		return;
	obj.value = "(" + phoneNumber.substr(0, 3) + ") " + phoneNumber.substr(3, 3) + "-" + phoneNumber.substr(6);
}

function verify_textfield(fieldObj, objRegExp, msg, optional) {
    if (optional && fieldObj.value == "")
            return true;

    if (objRegExp.test(fieldObj.value))
        return true;

  alert(msg + " field contents are invalid.");
  fieldObj.focus();
  return false;
}

function verify_dropdown(obj, msg) {
    if (obj.options[obj.selectedIndex].value != "")
        return true;

  alert(msg + " selection is required.");
  obj.focus();
  return false;
}

function updatePricePreview(o, nUnitPrice, sPartNo) {
	$(sPartNo + "_totalPrice").update(formatCurrency(nUnitPrice * o.value));
}

function formatCurrency(origNum) {
	var num = origNum.toString().replace(/[^0-9\.]/g,'');
	if(num == "" || isNaN(num))
		return origNum;
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function switchTabs(sKey, oTab) {
	var arrTabs = $(oTab).up().select("span.active");
	$A(arrTabs).each(function(o) { o.removeClassName("active"); });
	oTab.addClassName("active");

	var arr = ["new", "renewal", "reinstatement", "tradeup", "other"];
	for (var i = 0; i < arr.length; i++) {
		if ($("tabContent_" + arr[i]))
			$("tabContent_" + arr[i]).hide();
	}

	$("tabContent_" + sKey).show();
}

function handleAddToCartClick(frm, partno) {
	frm.valid = true;

	if (!$(frm).getInputs('text').any(function(o) { return (o.value != "" && o.value != 0) })) {
		alert("Please enter a quantity of greater than 0 in the appropriate field before clicking on Add to Quote button.");
		return;
	}
	!$(frm).getInputs('text').each(function(o) {
			if (o.value != "" && o.value != 0)
				o.onblur();
		});

	if (!frm.valid) {
//		alert("Invalid quantity entry. Please correct it and try again.");
		return;
	}

	$(frm).request({ 
		method: 'post',
		onSuccess: function(transport) { refreshShoppingCart(); },
		onFailure: function(transport) { alert("Error placing item into the cart.\n\nIf this issue persists, please call us to place your order over the phone.\n\nWe apologize for any inconvenience."); }
	});
}

function handleShoppingCartActions(SID, action, frm) {
	var extra = "";
	switch(action) {
		case "remove":
			extra = "&action_remove=";
			// fall through
		case "update":
			frm.valid = true;

			!$(frm).getInputs('text').each(function(o) {
					if (o.value != "" && o.value != 0)
						o.onblur();
				});

			if (!frm.valid)
				return;
		
			new Ajax.Request("/cart_update.php", { 
				method: 'post',
				postBody: $(frm).serialize() + extra,
				onSuccess: function(transport) { 
					refreshShoppingCart();
				},
				onFailure: function(transport) { alert("Error updating shopping cart.\n\nIf this issue persists, please give us a call.\n\nWe apologize for any inconvenience."); }
			});
			break;
		case "clear":
			if (!confirm("You are about to clear your shopping cart.\n\nProceed with this action?"))
				return;
			new Ajax.Request("/cart_clear.php", { 
				method: 'get',
				onSuccess: function(transport) { 
					refreshShoppingCart();
				},
				onFailure: function(transport) { alert("Error clearing shopping cart.\n\nIf this issue persists, please give us a call.\n\nWe apologize for any inconvenience."); }
			});
			break;
		case "email":
		    if (!verify_textfield(frm.email, /^[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]$/i, "Email", false)) return false;
			new Ajax.Request("/cart_email.php", { 
				method: 'post',
				postBody: $(frm).serialize(),
				onSuccess: function(transport) { 
					alert("Quote has been emailed to " + frm.email.value + ".");
				},
				onFailure: function(transport) { alert("Error emailing quote.\n\nIf this issue persists, please give us a call.\n\nWe apologize for any inconvenience."); }
			});
			break;
	}
}

function clearShoppingCart(SID) {
	if (!confirm("You are about to clear your shopping cart.\n\nProceed with this action?"))
		return;
	location.href = "/cart_clear.php?" + SID;
}

function showWindow(id) {
	var viewportOffsets = document.viewport.getScrollOffsets();
	var viewportSize = document.viewport.getDimensions();
	var winSize = $(id).getDimensions();
	
	var top = ((viewportSize.height - winSize.height) / 2) + viewportOffsets.top;
	if (top < 0) top = 0;
	
	var left = ((viewportSize.width - winSize.width) / 2) + viewportOffsets.left;
	if (left < 0) left = 0;
	
	$("screen").setStyle({'height' : $(document.body).getHeight() + "px", 'display' : 'block' });
	$(id).setStyle({'top' : top + "px", 'left' : left + "px", 'display' : 'block' });
	
	var popup = "";	
	switch(id) {
		case "priceLevelWindow":
			popup = "priceLevel";
			break;
		case "askQuestionWindow":
			popup = "askQuestion";
			break;
		case "shoppingCart":
			popup = "shoppingCart";
			break;
	}
	$("hiddenFrame").src = "/popup_tracker.php?id=" + popup;
}

function hideWindow(id) {
	$(id).setStyle({'display' : 'none'});
	$("screen").setStyle({'display' : 'none'});
}

function verifyQuantity(o, n) {
	if (o.value == "") {
		o.form.valid = true;
		return;
	}

	if (o.value % n == 0) {
		o.form.valid = true;
		return;
	}

	o.form.valid = false;
	alert("Invalid quantity value.\n\nThis item is only available in lots of " + n + ".\n\nPlease try again.");
	o.select();
}

function switchPA(oRadio) {
	if (oRadio.value == "pa")
		$('paAgreementSection').show();
	else {
		oRadio.form.agreement.value = "";
		$('paAgreementSection').hide();
	}
}

function handleRequestInvoiceForm(frm) {
    if (!verify_textfield(frm.company_name, /^.+$/i, "Company Name", false)) return false;
    if (!verify_textfield(frm.address1, /^.+$/i, "Business Address", false)) return false;
    if (!verify_textfield(frm.city, /^.+$/i, "City", false)) return false;
    if (!verify_textfield(frm.state, /^.+$/i, "State", false)) return false;
    if (!verify_textfield(frm.zip, /^.+$/i, "Zip Code", false)) return false;
    if (!verify_textfield(frm.contact_name, /^.+$/i, "Contact Name", false)) return false;
    if (!verify_textfield(frm.email, /^[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]$/i, "Email", false)) return false;
    
    return true;
}

function handleRequestContactForm(frm) {
    if (!verify_textfield(frm.name, /^.+$/i, "Name", false)) return false;
    if (!verify_textfield(frm.company, /^.+$/i, "Company", false)) return false;
    if (!verify_textfield(frm.email, /^[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]$/i, "Email", false)) return false;	
    if (!verify_dropdown(frm.subject, "Subject")) return false;
    if (!verify_textfield(frm.question, /.+/i, "Question", false)) return false;

    return true;
}

function handleRequestFastTrackInfo(frm) {
    if (!verify_dropdown(frm.fasttrack_option, "FastTrack Option")) return false;
    if (!verify_textfield(frm.contact_name, /^.+$/i, "Name", false)) return false;
    if (!verify_textfield(frm.company_name, /^.+$/i, "Company", false)) return false;
    if (!verify_textfield(frm.email, /^[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]$/i, "Email", false)) return false;

    return true;
}


function handleViewAccountForm(frm) {
    if (!verify_textfield(frm.email, /^[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]$/i, "Email", false)) return false;	
    if (!verify_textfield(frm.password, /.+/i, "Password", false)) return false;

    return true;
}

function handleSendMessageForm(frm) {
    if (!verify_textfield(frm.name, /^.+$/i, "Name", false)) return false;
    if (!verify_textfield(frm.subject, /^.+$/i, "Subject", false)) return false;
    if (!verify_textfield(frm.company, /^.+$/i, "Company", false)) return false;
    if (!verify_textfield(frm.email, /^[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]$/i, "Email", false)) return false;	
    if (!verify_textfield(frm.message, /.+/i, "Message", false)) return false;

	new Ajax.Request("/send_message.php", { 
		method: 'post',
		postBody: $(frm).serialize(), 
		onSuccess: function(transport) { 
			var sHTML = '';
			sHTML += '<div style="margin-top: 10px; margin-left: 20px; font-size: 14px; font-weight: bolder; color: #8AB44C; ">Message has been sent.</div>';
			sHTML += '<div style="margin-top: 10px; margin-left: 20px; margin-bottom: 10px; line-height: 22px;">A sales associate will contact you within 24 hours.<br/>We appreciate your business.</div>';
			$('sendMessageArea').update(sHTML);
		},
		onFailure: function(transport) { alert("Error sending message.\n\nIf this issue persists, please give us a call instead.\n\nWe apologize for any inconvenience."); }
	});    
}

function handleAskQuestionForm(frm) {
    if (!verify_textfield(frm.name, /^.+$/i, "Name", false)) return false;
    if (!verify_textfield(frm.company, /^.+$/i, "Company", false)) return false;
    if (!verify_textfield(frm.email, /^[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]$/i, "Email", false)) return false;	
    if (!verify_textfield(frm.question, /.+/i, "Question", false)) return false;

	new Ajax.Request("/ask_question.php", { 
		method: 'post',
		postBody: $(frm).serialize(), 
		onSuccess: function(transport) { 
			alert("Message sent."); 
			hideWindow('askQuestionWindow');
			frm.question.value = "";
		},
		onFailure: function(transport) { alert("Error sending message.\n\nIf this issue persists, please give us a call instead.\n\nWe apologize for any inconvenience."); }
	});    
}

function verifySearchForm(frm) {
    if (!verify_textfield(frm.query, /^.+$/i, "Search", false)) return false;
}

function refreshShoppingCart() {
	new Ajax.Request('/cart_getlist.php', {
				method:'get',
				requestHeaders: {Accept: 'application/json'},
				onSuccess: function(transport) {
					var json = transport.responseText.evalJSON(true);
					
					var sHTML = '';

					var counter = 0;
					var total = 0;
					if (json.items.constructor != Array) {
						sHTML += '<table cellpadding="4" cellspacing="0" border="1" width="95%" align="center">';
						sHTML += '<tr>';
						sHTML += '<th>&nbsp;</th>';
						sHTML += '<th align="left">Product Name</th>';
						sHTML += '<th>Quantity</th>';
						sHTML += '<th nowrap>Unit Price</th>';
						sHTML += '<th nowrap>Sub Total</th>';
						sHTML += '</tr>';
						for(var partno in json.items) {
							sHTML += '<tr>';
							sHTML += '<td align="center"><input type="checkbox" name="' + partno + '_checkbox" /></td>';
							sHTML += '<td><a href="/?ibmpartno=' + partno + '">' + partno + ' ' + json.items[partno].description + '</a></td>';
							var msrp_price = json.items[partno].msrp * json.items[partno].quantity;
							var price = json.items[partno].price * json.items[partno].quantity;
							total += price;
							sHTML += '<td align="center"><input type="text" name="' + partno + '_quantity" value="' + json.items[partno].quantity + '" maxlength="255" style="width: 40px; text-align: right;" onblur="verifyQuantity(this, ' + json.items[partno].qnty_size + ')"/></td>';
							sHTML += '<td align="right" nowrap>' + formatCurrency(json.items[partno].price)
								  + '<div style="color: gray;">List ' + formatCurrency(json.items[partno].msrp) + '</div></td>';
							sHTML += '<td align="right" nowrap>' + formatCurrency(price)
								  + '<div style="color: gray;">Savings ' + formatCurrency(msrp_price - price) + '</div></td>';
							sHTML += '</tr>';
							counter++;
						}
						sHTML += '</table>';
					} else {
						sHTML += "Shopping Cart is empty.";
					}
					$("shoppingCartBody").update(sHTML);
					$("shoppingCartCount").update((counter == 1?"1 item":counter + " items"));
					$("shoppingCartTotal").update(formatCurrency(total));
					showWindow('shoppingCart');
				}
			});	
}
