
var newItemID = 0;
var expandSpeed = 100;
var fadeSpeed = 300;


function addNewItem(e)
{
	if (e && e.stop)
	{
		e.stop();
	}
	
	if ($('newDescription').get('value') == '')
	{
		alert('Please enter a description of the item you would like to order.');
		$('newDescription').focus();
		return false;
	}
	
	if ($('newQuantity').get('value') == '')
	{
		alert('Please enter an order quantity for this new item');
		$('newQuantity').focus();
		return false;
	}															
	
	newItemID++;
	
	var tr = new Element('tr').inject('items', 'top');
	
	new Element('td',
	{
		'html': $('newDescription').get('value')+
			'<input type="hidden" name="description_n'+newItemID+'" value="'+$('newDescription').get('value').replace('"', '&quot;')+'" />',
		'class': 'description'
	}).inject(tr);
	new Element('td',
	{
		'html': '<input type="text" name="quantity_n'+newItemID+'" class="quantity" value="'+
							$('newQuantity').get('value').replace(/,/, '')+'" />'
	}).inject(tr);
	new Element('td',
	{
		'html': '<textarea name="notes_n'+newItemID+'" class="notes">'+$('newNotes').get('value')+'</textarea>'
	}).inject(tr);
	
	tr.getElement('.notes').addEvent('focus', expandNotes).addEvent('blur', shrinkNotes);
	tr.getElement('.quantity').addEvent('blur', validateQuantity);
	
	$('newDescription').set('value', '');
	$('newQuantity').set('value', '');
	$('newNotes').set('value', '');
	
	$('noItems').setStyle('display', 'none');
	$('itemsTable').setStyle('display', 'block');
}


function backUserCreate(e)
{
	e.stop();
	crossFade('bankCreateStep', 'userCreateStep');
}

function backBankCreate(e)
{
	e.stop();
	crossFade('orderCreateStep', 'bankCreateStep');
}


function backOrderCreate(e)
{
	e.stop();
	
	fadeOut('confirmSignupStepTop');
	fadeOut('confirmSignupStepBottom');
	fadeOut('userCreateStep');
	fadeOut('bankCreateStep');
	fadeOut('confirmOrder');
	
	(function()
	{	
		$$('.hideOnConfirm').setStyle('display', '');
		$$('input[type="text"]').removeClass('static').set('disabled', false);
		$$('textarea').removeClass('static').set('disabled', false);
		$('stateStatic').destroy();
		
		fadeIn('orderCreateStep');
	}).delay(fadeSpeed + 50);
}




function checkNewDescription(e)
{
	if (e.target.get('value').match(
			/\*|need|ASAP|proof|contact|just like|same|list price|call|FDIC|take off|\(|\)|error|wrong|as sample|change copy|last|sal|,/i))
	{
		if (confirm('Item description should only describe the item. Any notes like "Need Proof," "ASAP," "Contact Jill," '+
								'"Same as last," "(out of storage)," addresses, and so on should be entered in the notes.'+
								"\n\n"+
								'Multiple items should be entered individually. '+
								'Describe the first item then click Add Another Item to add the next item'+
								"\n\n"+
								'If this filter caught your description incorrectly click Cancel to continue'))
		{
			(function()
			{
				e.target.focus();
			}).delay(50);
		}
	}
}



function continueBankCreate(e)
{
	e.stop();
	
	var missing = '';
	var focusID = false;
	if (!$('name').get('value'))
	{
		missing += "Your name\n";
		focusID = !focusID ? 'name' : focusID;
	}
	if (!$('username').get('value'))
	{
		missing += "Your username\n";
		focusID = !focusID ? 'username' : focusID;
	}
	if (!$('password').get('value'))
	{
		missing += "Your password\n";
		focusID = !focusID ? 'password' : focusID;
	}
	if (!$('confirmPassword').get('value'))
	{
		missing += "Your password confirmation\n";
		focusID = !focusID ? 'confirmPassword' : focusID;
	}
	if (!$('email').get('value'))
	{
		missing += "Your email address\n";
		focusID = !focusID ? 'email' : focusID;
	}
	
	if (missing != '')
	{
		alert("Please fill in the following fields\n"+missing);
		$(focusID).focus();
		return false;
	}
	
	if ($('password').get('value') != $('confirmPassword').get('value'))
	{
		alert('The passwords entered do not match');
		
		(function()
		{
			$('password').focus();
		}).delay(50);
		
		return false;
	}
	
	var regex = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";
	regex = new RegExp(regex, 'i');
	
	if (!regex.test($('email').get('value')))
	{
		alert("Invalid Email Address Entered\n\nPlease enter a valid email address");
		
		(function()
		{
			$('email').focus();
		}).delay(50);
		
		return false;
	}
	
	var taken = false;
	new Request.JSON
	({
		'url': 'signup_c.php',
	 	'data': 
	 	{
			'ajax': 'validateUsername',
			'username': $('username').get('value') 
		},
		'async': false,
		'onComplete': function(json)
		{
			if (json && json.taken)
			{
				taken = true;
			}
		}
	}).send();
	
	if (taken)
	{	
		alert('The chosen username is not available. Please choose another username');
		$('username').focus();
		return false;
	}
	
	(function()
	{
		$('companyName').focus();
	}).delay(fadeSpeed * 2);
	
	crossFade('userCreateStep', 'bankCreateStep');
}


function continueConfirmSignup(e)
{
	e.stop();
		
	if ($('newDescription').get('value') != '' && $('newQuantity').get('value') != '')
	{
		addNewItem();
	}
	
	$('confirmOrderRows').empty();
	
	var hadOne = false;
	$$('.quantity').each(function(input)
	{
		if (input.get('value'))
		{
			hadOne = true;
			var tr = new Element('tr').inject('confirmOrderRows', 'bottom');
			
			new Element('td',
			{
				'text': input.getParent('tr').getElement('.description').get('text')
			}).inject(tr);
			
			new Element('td',
			{
				'text': input.get('value')
			}).inject(tr);
			
			new Element('td',
			{
				'text': input.getParent('tr').getElement('.notes').get('value')
			}).inject(tr);
		}
	});
	
	if (!hadOne)
	{
		alert('You have not ordered anything. Enter a quantity for an item to order that item.');
		return false;
	}
	
	fadeOut('orderCreateStep');
	
	(function()
	{	
		$$('.hideOnConfirm').setStyle('display', 'none');
		$$('input[type="text"]').addClass('static').set('disabled', 'disabled');
		$$('textarea').addClass('static').set('disabled', 'disabled');
		new Element('span',
		{
			'id': 'stateStatic',
			'text': $$('#state option:selected').get('text')
		}).inject('state', 'after');
		
		fadeIn('userCreateStep');
		fadeIn('bankCreateStep');
		fadeIn('confirmSignupStepTop');
		fadeIn('confirmSignupStepBottom');
		fadeIn('confirmOrder');
		
	}).delay(fadeSpeed + 50);
}


function continueOrderCreate(e)
{
	e.stop();
	
	var missing = '';
	var focusID = false;
	if (!$('companyName').get('value'))
	{
		missing += "Company name\n";
		focusID = !focusID ? 'companyName' : focusID;
	}
	if (!$('address').get('value'))
	{
		missing += "Company address\n";
		focusID = !focusID ? 'address' : focusID;
	}
	if (!$('city').get('value'))
	{
		missing += "Company city\n";
		focusID = !focusID ? 'city' : focusID;
	}
	if (!$('state').get('value'))
	{
		missing += "Company state\n";
		focusID = !focusID ? 'state' : focusID;
	}
	if (!$('postalCode').get('value'))
	{
		missing += "Company zip code\n";
		focusID = !focusID ? 'postalCode' : focusID;
	}
	if (!$('phone').get('value'))
	{
		missing += "Company phone number\n";
		focusID = !focusID ? 'phone' : focusID;
	}
	
	if (missing != '')
	{
		alert("Please fill in the following fields\n"+missing);
		$(focusID).focus();
		return false;
	}
	
	var regex = /^\d{5}(?:\D\d{4})?$/;
	if (!$('postalCode').get('value').test(regex))
	{
		alert("Invalid zip code entered\n\nExamples\n12345\n12345-9876\n");
		
		(function()
		{
			$('postalCode').focus();
		}).delay(50);
		
		return false;
	}
	
	regex = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,3})|(\(?\d{2,3}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext| ext )\d{1,5}){0,1}$/;
	if (!$('phone').get('value').test(regex))
	{
		alert("Invalid phone number entered\n\n"+
					"Examples\n555 123-1234\n+1-555-123-1343\n+1 (555) 123 1234 ext453\n+44 20 88709929\n+44 78 14728381 x34");
		
		(function()
		{
			$('phone').focus();
		}).delay(50);
		
		return false;
	}
	
	$('shipToStatic').set('html', 
		$('companyName').get('value')+'<br />'+
		$('address').get('value')+'<br />'+
		$('city').get('value')+' '+$('state').get('value')+' '+$('postalCode').get('value'));
	
	crossFade('bankCreateStep', 'orderCreateStep');
	
	(function()
	{
		$('newDescription').focus();
	}).delay(fadeSpeed * 2);
}


function crossFade(before, after)
{
	fadeOut(before, {'duration': fadeSpeed});
	(function()
	{
		fadeIn(after);
	}).delay(fadeSpeed + 50);
}



function expandNotes(e)
{
	e.target.set('morph', {'duration': expandSpeed}).morph('.expandedNotes');
}



function fadeIn(id)
{
	$(id).fade('hide');
	$(id).setStyle('display', 'block');
	$(id).fade('in', {'duration': fadeSpeed});
}



function fadeOut(id)
{
	$(id).fade('out', {'duration': fadeSpeed});
	(function()
	{
		$(id).setStyle('display', 'none');
	}).delay(fadeSpeed + 50);
}


function shrinkNotes(e)
{
	e.target.set('morph', {'duration': expandSpeed}).morph('.notes');
}


function signup(e)
{
	e.stop();
	
	$('signup').disabled = true;
	$('status').set('text', 'Signing you up...');
	
	$$('.static').set('disabled', false);
	
	new Request.JSON
	({
		'url': 'signup_c.php?ajax=submit',
		'data': $('mainForm'),
		'method': 'post',
		'onFailure': function()
		{
			$('signup').disabled = false;
			$('status').set('text', 'Failure to send request');			
			$$('.static').set('disabled', 'disabled');
		},
		'onSuccess': function(json)
		{
			if (!json)
			{
				$('signup').disabled = false;
				$('status').set('text', 'Failure to complete request');			
				$$('.static').set('disabled', 'disabled');
				return false;
			}
			
			if (!json.success)
			{
				$('signup').disabled = false;
				$('status').set('text', 'Error encountered: '+json.error);			
				$$('.static').set('disabled', 'disabled');
				return false;
			}
			
			$('status').set('text', 'You are signed up! Redirecting...');
			
			(function()
			{
				window.location = 'login.php';
			}).delay(fadeSpeed);
		}
	}).send();
}

function validateQuantity(e)
{
	var qty = e.target.get('value');
	if (qty == '')
	{
		return true;
	}
	
	qty = qty.replace(/,/, '');
	e.target.set('value', qty);
	
	var description = e.target.getParent('tr').getElement('.description').get('text');
	qty = qty.toInt();
	
	if (isNaN(qty) || qty < 0)
	{
		alert('Invalid quantity for '+description);
		e.target.set('value', '');
		(function() { e.target.focus() }).delay(5);
		return false;
	}
	
	var perPack = e.target.getParent('tr').getElement('.perPackage');
	if (perPack)
	{
		perPack = perPack.get('text').toInt();
		perPack = isNaN(perPack) ? 1 : perPack;
		
		if ((qty % perPack) > 0)
		{
			alert(description+' must be ordered in multiples of '+perPack);
			e.target.set('value', '');
			(function() { e.target.focus() }).delay(5);
			return false;
		}
		
		var onHand = e.target.getParent('tr').getElement('.onHand').get('text').toInt();
		onHand = isNaN(onHand) ? null : onHand;
		
		if (onHand != null && qty > onHand)
		{
			alert(description+' order amount is greater than quantity on hand');
			e.target.set('value', '');
			return false;
		}
	}
}


window.addEvent('domready', function()
{
	$('userCreateStep').setStyle('display', 'block');
	$('name').focus();
	
	if ($('addNewItem'))
	{
		$('addNewItem').addEvent('click', addNewItem);
	}
	
	$('backUserCreate').addEvent('click', backUserCreate);
	$('backBankCreate').addEvent('click', backBankCreate);
	$('backOrderCreate').addEvent('click', backOrderCreate);
	
	$('continueBankCreate').addEvent('click', continueBankCreate);
	$('continueOrderCreate').addEvent('click', continueOrderCreate);
	$('continueConfirmSignup').addEvent('click', continueConfirmSignup);
	
	if ($('newDescription'))
	{
		$('newDescription').addEvent('blur', checkNewDescription).addEvent('keydown', function(e)
		{
			if (e.key == 'enter')
			{
				e.stop();
				return false;
			}
		});
	}
	
	$$('.notes').addEvent('focus', expandNotes).addEvent('blur', shrinkNotes);
	
	$$('.quantity').addEvent('blur', validateQuantity);
	
	$('signup').addEvent('click', signup);
});

