$(document).ready(function(){
	disappear();
	checkConnection();
	updateCost();
	addRow();
	editDomain();
	$('select[name="monthInt"]').change(function(){
		updateCartPrices();
	});
	emailAddress();
	passwords();
	validation();
	addCustomPort();
	
	storeOrder();
});

function storeOrder(){
	//~~~~~~ Pay Click
	$('button[name="cmdPay"]').click(function (){
		//some checking here
		//end checking
		var f = $('form');
		var res = f.serialize();
		//alert(res);
		$.post("ajax.php?m=insertTrans", res, function(data){
			//world pay kack
			$('input[name="cartId"]').val(data);
			$('form[name="rbswpForm"]').submit();
		
		});
		return false;
	});
}

function validation(){
	$('input[name^="domain"]').blur(function(){
		if(!checkDomain($(this).val())) $(this).css('border', '2px solid red');
		else $(this).css('border', '');
	});
}

function addCustomPort(){
	$('a.updatePorts').live('click', function(){
		$(this).prev().append('<li><label><input type="text" name="addport" value="" size="3" /> <input type="submit" name="addPortSubmit" value="Go" /></label></li>');
		return false;
	});
	
	$('input[name="addPortSubmit"]').live('click', function(){
		num = /^([0-9]+)$/;
		inputName = /^ports\[(\d+)\]\[\d+\]$/;
		var domainid = $(this).closest('ol.ports').find('li:first input').attr('name').match(inputName);
		if(!num.test($(this).prev().val())) $(this).prev().css('border', '2px solid red');
		else {
			var portnum = $(this).prev();
			$(this).replaceWith('<input type="checkbox" name="ports[' + domainid + '][' + $(portnum).val() + ']" checked="checked" /> Port ' + $(portnum).val());
			$(portnum).remove();
		}
		return false;
	});
}

function emailAddress(){
	var email = $('input[name="username"]')
	$(email).blur(function (){
		if($(this).val() != ""){
			var ur = "ajax.php?m=checkUsername&u=" + $(this).val();
			//Send AJAX call and process result.
			$.get(ur, function(data){
				if(data.match("false")){
					$(email).parent().find('img.status').remove();
					$(email).prev().find('span.error').remove();
					$(email).after('<img src="/images/tick.png" class="status" />');
				} else {
					if(data.match("true1")){
						$(email).prev().find('span.error').remove();
						$(email).prev().append('<span class="error"> - Email address is not valid</span>');
					} else if(data.match("true2")){
						$(email).prev().find('span.error').remove();
						$(email).prev().append('<span class="error"> - Email address has already been used</span>');
					}
				}
			});
		}
	});
}

function passwords(){
	var pass = $('input[name="password"]');
	$(pass).blur(function(){
		if($(this).val() != ""){
			var ur = "ajax.php?m=checkPassword&p=" + $(this).val();
			//Send AJAX call and process result.
			$.get(ur, function(data){
				if(data.match("false1")){
					$(pass).prev().find('span.error').remove();
					$(pass).prev().append('<span class="error"> - Please enter a secure password</span>');
				} else if(data.match("false2")){
					$(pass).prev().find('span.error').remove();
					$(pass).prev().append('<span class="error"> - Password is too short or contains bad characters</span>');
				} else {
					$(pass).prev().find('span.error').remove();
					$(pass).parent().find('img.status').remove(); 
					$(pass).after('<img src="/images/tick.png" class="status" />');
				}
			});
		}
		//updateUserDisplay();
	});
	$('input[name="password2"]').blur(function(){
		if($(this).val() != $('input[name="password"]').val()){
			$(this).prev().find('span.error').remove();
			$(this).prev().append('<span class="error"> - Your passwords do not match</span>');
		} else {
			$(this).prev().find('span.error').remove();
			$(this).parent().find('img.status').remove(); 
			$(this).after('<img src="/images/tick.png" class="status" />');
		}
	});
}

function disappear(){
	$('div.addDomain input[name^="domain"]').click(function(){
		if($(this).val() == 'Enter domain name..') $(this).val('');
	}).blur(function(){
		if($(this).val() == '') $(this).val('Enter domain name..');
	});
}

function updatePorts(table){
	var total = 0;
	$(table).find('ol.ports input[type="checkbox"]').each(function(){
		if($(this).attr('checked') == true) total = total + 1;
	});
	$(table).find('input[name^="pc"]').val(total);
	$(table).find('span.totalports').text(total);
}

function checkConnection(){
	$('ol.ports input[type="checkbox"]').live('change', function(){
		//get port number
		if($(this).attr('checked') == true){
			var checkbox = $(this);
			var temp = $(this).attr('name').split("[");
			var port = temp[2].replace("]", "");
			var domain = $(this).closest('tbody').prev().find('input[name^="domain"]').val();
			var url = "ajax.php?m=checkPort&p="+port+"&ur="+domain;
			$.ajax({
				type: "GET",
				url: url,
				success: function(msg){
					if(msg.match('true')) $(checkbox).parent().append('<img src="/images/server-ok.png" class="serverstatus" />');
					else $(checkbox).parent().append('<img src="/images/server-fail.png" class="serverstatus" />');
				}
			});
		} else $(this).parent().find('img').remove();
	});
}

function editDomain(){
	$('#doms a[class^="config"]').live('click', function(){
		if($(this).hasClass('config-down')){
			$(this).closest('thead').next().slideDown('slow');
			$(this).attr('class', 'config');
		} else {
			$(this).closest('thead').next().slideUp('slow');
			$(this).attr('class', 'config-down');
		}
	});
}

function updateCost(){
	$('ol.ports input[type="checkbox"], select[name^="interval"]').change(function(){
		var table = $(this).closest('table');
		updatePorts(table);
		updatePortCost(table);
		updateFooters();
		updateCartPrices();
		updateWorldPayForm();
	});
}

function updateFooters(){
	$('input[name="costPerMonth"]').val(0);
	$('span.totalcost').each(function(){
		var subtotal = $(this).parent().find('span.totalports').text() * $(this).parent().find('span.costperport').text();
		$(this).parent().find('span.totalcost').text(subtotal.toFixed(2));
		$('input[name="costPerMonth"]').val(parseFloat($('input[name="costPerMonth"]').val()) + parseFloat(subtotal));
	});
}

function updateCartPrices(){
	var subtotal = parseFloat($('input[name="costPerMonth"]').val()) * parseFloat($('[name="monthInt"]').val());
	$('#subtotal').text(subtotal.toFixed(2));
	var vat = parseFloat($('#subtotal').text() * 0.15);
	$('#vat').text(vat.toFixed(2));
	var total = parseFloat($('#subtotal').text()) + parseFloat($('#vat').text());
	$('#total').text(total.toFixed(2));
	if(total.toFixed(2) == '0.00') $('button[name="cmd"]').attr('disabled', 'disabled');
	else $('button[name="cmd"]').removeAttr('disabled');
}

function updateWorldPayForm(){
	$('input[name="amount"]').val($('#total').html());
	$('input[name="email"]').val($('input[name="username"]').val());
}

function updatePortCost(table){
	switch($(table).find('select[name^="interval"]').val()){
		case '1':  var costPerInt = '3.00'; break;
		case '2':  var costPerInt = '2.50'; break;
		case '5':  var costPerInt = '2.00'; break;
		case '10': var costPerInt = '1.50'; break;
		case '15': var costPerInt = '1.00'; break;
	}
	$(table).find('span.costperport').text(costPerInt);
}

function duplicateDomainRow(){
	//find the domain id
	var temp = $('#doms tr:last').prev().find('input[name^="val"]').attr('name');
	var temp = temp.replace("val", "");
	var temp = temp.replace("[", "");
	var temp = temp.replace("]", "");
	var oldid = parseInt(temp);
	
	$('#doms tr:last').prev().clone(true).insertBefore('#doms tr:last').hide();
	var newDomainRow = $('#doms tr:last').prev().find('table');
	$(newDomainRow).find('input[name^="domain"]').val('Enter domain name..');
	$(newDomainRow).find('img').remove();
	$(newDomainRow).find('ol.ports input[type="checkbox"]').removeAttr('checked');
	updatePorts(newDomainRow);
	updatePortCost(newDomainRow);
	updateFooters();
	updateDomainID(newDomainRow, oldid);
	//alert($('#doms tr:last').prev().find('tbody').parent().html());
	$('#doms tr:last').prev().slideDown('slow').find('tbody').show();
}

function updateDomainID(newDomainRow, oldid){
	var newid = oldid+1;
	$(newDomainRow).find('[name^="domain"]').attr('name', 'domain[' + newid + ']');
	$(newDomainRow).find('[name^="interval"]').attr('name', 'interval[' + newid + ']');
	$(newDomainRow).find('[name^="pc"]').attr('name', 'pc[' + newid + ']');
	$(newDomainRow).find('[name^="cpc"]').attr('name', 'cpc[' + newid + ']');
	$(newDomainRow).find('[name^="val"]').attr('name', 'val[' + newid + ']');
	$(newDomainRow).find('[name^="ports"]').each(function(){
		//get port
		var port = $(this).attr('name');
		port = port.replace('ports[' + oldid + ']', '');
		$(this).attr('name', 'ports[' + newid + ']' + port);
	});
	$(newDomainRow).find('a[class^="config"]').attr('class', 'config');
}

function addRow(){
	$('#addRow').click(function(){
		//alert($(this).closest('tr').prev().find('tbody').attr('class'));
		$(this).closest('tr').prev().find('tbody').slideUp('slow', function(){
			duplicateDomainRow();
		});
		disappear();
		return false;
	});
}

function checkDomain(domain){
	validdomain = /^(([a-z0-9-]+[\.])+([a-z]{2,}))|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/;
	return validdomain.test(domain);
}







