$(document).ready(function()
{
	$.extend({
		page_progression: function(callback, opt, arg)
		{
			var qrystr = '';

			if (opt == 'skip')
			{
				qrystr += '?action=skip&item=' + arg;
			}
			$.ajax({
				url: '/v4/p/dedicated/ajax/progression.php' + qrystr,
				type: 'GET',
				dataType: 'json',
				success: function(json)
				{
					if (undefined != callback)
					{
						return callback(json);
					}
					return json;
				}
			});
		},
		gegevens_status: function(callback)
		{
			$.ajax({
				url: '/v4/p/dedicated/ajax/gegevens.php?action=status',
				type: 'GET',
				dataType: 'json',
				success: function(json)
				{
					if (undefined != callback)
					{
						return callback(json);
					}
					return json;
				}
			});
		},
		gegevens_load: function(callback)
		{
			$.gegevens_status(function(json)
			{
				$.each(json, function(i, n)
				{
					if (n.length > 0)
					{
						if (i == 'Geslacht') {
							$("select[title=offerte_input][name="+ i +"]").val(n);
						}
						else {
							var a = $("input[title=offerte_input][name="+ i +"]");
							a.attr("value", unescape(n));
						}
												
						$.geg___inputValid(a);
					}
				});
			});
		},
		item_value_get: function(callback, value, type)
		{
			$.ajax({
				url: '/v4/p/dedicated/ajax/item.php?action=edit&value=' + value + '&type=' + type,
				type: 'GET',
				dataType: 'json',
				success: function(json)
				{
					if (callback != undefined)
					{
						return callback(json);
					}
					return json;
				}
			});
		},
		geg___inputHandle: function(ob, action)
		{
			$.get('/v4/p/dedicated/ajax/gegevens.php',
			{
				name: ob.name,
				value: escape(ob.value),
				action: action
			});
            
            // If zipCode has been changed, fetch address + city information from
            // database and copy it to the appropriate fields.
            
            if ("Postcode" == ob.name) {
                $.ajax(
                {
                    url: '/shop/ajax/gegevens/address.php',
                    type: 'GET',
                    data: {"zipCode": ob.value},
                    dataType: 'json',
                    success: function(json) {
                        if (false === json) {
                            return;
                        }
                        
                        $('input[name=Straat]').attr("value", json.straatnaam);
                        $('input[name=Straat]').trigger("change");
                        $('input[name=Plaats]').attr("value", json.plaatsnaam);
                        $('input[name=Plaats]').trigger("change");
                    }
                });
            }
		},
		geg___inputValid: function(ob)
		{
			if (ob.name == 'Geslacht')
			{
				return;
			}

			$(ob).css('color', 'green');

			if ($(ob).parent().parent().hasClass('mark_geg_tableLoReq'))
			{
				$(ob).parent().parent().removeClass('geg_tableLoRequired');
				if ($(ob).parent().parent().hasClass('geg_tableLoError'))
				{
					$(ob).parent().parent().removeClass('geg_tableLoError');
				}
				$(ob).parent().parent().addClass('geg_tableLoSucces');
			}

			$('input[name='+ ob.name +']').css('color', 'green');

			if ($(ob).parent().next().children()[0])
			{
				$(ob).parent().next().children()[0].src = '/images/shop/accept.gif';
			}
		},
		geg___inputInvalid: function(ob)
		{
			$(ob).css('color', 'red');

			if ($(ob).parent().parent().hasClass('mark_geg_tableLoReq'))
			{
				$(ob).parent().parent().removeClass('geg_tableLoRequired');
				if ($(ob).parent().parent().hasClass('geg_tableLoSucces'))
				{
					$(ob).parent().parent().removeClass('geg_tableLoSucces');
				}
				$(ob).parent().parent().addClass('geg_tableLoError');
			}

			$('input[name='+ ob.name +']').css('color', 'red');

			if ($(ob).parent().next().children()[0])
			{
				$(ob).parent().next().children()[0].src = '/images/shop/cancel.gif';
			}
		}
	});
});

var ds = new function()
{
	var self = this;
	var progression;

	this.page_next = function(opt, arg)
	{
		$.page_progression(function(result)
		{
			if (result.total != undefined)
			{
				//	recalc total
				ds.item_set('Totaal per maand', result.total_formatted, 'total');
			}

			/**	nav
			*/
			$.each(result.list, function(i, v)
			{
				//	reset
				$("a.page_link[title="+ i +"]").removeClass("page_link_done");
				$("a.page_link[title="+ i +"]").removeClass("page_link_neutral");
				$("a.page_link[title="+ i +"]").removeClass("page_link_active");
				$("a.page_link[title="+ i +"]").removeClass("page_link_exclude");
				$("div.page[title="+ i +"] a.page_link_header_add").removeClass("page_link_current");
				$("div.page[title="+ i +"] a.page_link_yes").removeClass("page_link_current");
				$("div.page[title="+ i +"] a.page_link_yes").css('display', 'block');
				$("div.page[title="+ i +"] a.page_link_no").css('display', 'block');
				$("div.page[title="+ i +"] span.page_infoblock[title=infoblock_freeoption]").css('display', 'none');

				switch(v)
				{
					//	done
					case 1:
						if (i != 'intro')
						{
							$("a.page_link[title="+ i +"]").addClass("page_link_done");
						}
					break;

					//	disabled
					case 2:
						//$("a.page_link[title="+ i +"]").addClass("page_link_neutral");
						//$("a.page_link[title="+ i +"]").addClass("page_link_exclude");
						$("a.page_link[title="+ i +"]").addClass("page_link_done");
						$("div.page[title="+ i +"] a.page_link_header_add").addClass("page_link_current");
						self.item_clear(i);

						$("a.page_link[title="+ i +"]").addClass("page_link_done");
						$("div.page[title="+ i +"] a.page_link_header_add").addClass("page_link_current");
						$("div.page[title="+ i +"] a.page_link_yes").css('display', 'none');
						$("div.page[title="+ i +"] a.page_link_no").css('display', 'none');
						$("div.page[title="+ i +"] span.page_infoblock[title=infoblock_freeoption]").css('display', 'block');
					break;

					//	open
					default:
						$("a.page_link[title="+ i +"]").addClass("page_link_neutral");
					break;
				}
			});
			$("a.page_link[title="+ result.next +"]").removeClass("page_link_neutral");
			$("a.page_link[title="+ result.next +"]").addClass("page_link_active");

			//	brick links
			if (result.build != undefined)
			{
				$.each(result.build, function(i, v)
				{
					$("div.page[title="+ i +"] a.page_link_header_add").removeClass("page_link_current");
					$("div.page[title="+ i +"] a.page_link_header_add[title="+ v.type +"]").addClass("page_link_current");
					$("div.page[title="+ i +"] a.page_link_yes").addClass("page_link_current");
				});
			}

			//	offerte
			$("div.page[title=contract] a.page_link_header_add[title="+ result.contract +"]").addClass("page_link_current");

			//	viewport
			$("div.page").css("display", "none");
			$("div.page[title="+ result.next +"]").css("display", "block");
		},
		opt, arg);
	},
	this.page_show = function(page)
	{
		$("div.page").css("display", "none");
		$("div.page[title=" + page + "]").css("display", "block");
	},
	this.page_select = function(page)
	{
		var a = "a.page_link[title=" + page + "]";
		if ($(a).hasClass("page_link_neutral"))
		{
			return;
		}
		$("a.page_link").removeClass("page_link_active");
		$(a).addClass("page_link_active");

		self.page_show(page);
	},
	this.item_get = function(value, type)
	{
		//	marked current
		if ($("div.page[title="+ type +"] a.page_link_header_add[title="+ value +"]").hasClass("page_link_current"))
		{
			return;
		}
		if (value == 'skip')
		{
			ds.item_clear(type);
		}
		$.ajax({
			url: '/v4/p/dedicated/ajax/item.php?action=edit&value=' + value + '&type=' + type,
			type: 'GET',
			dataType: 'json',
			success: function(json)
			{
				if (json.price != undefined)
				{
					self.item_set(json.specs, json.price, type);
				}
				//	next
				self.page_next();
			}
		});
	},
	this.item_set = function(value, price, type)
	{
		var valueLink = (type == 'total' ? value : '<a class="specs_link" onfocus="blur();" href="javascript:void(ds.page_select(\''+ type +'\'));">'+ value +'</a>');
		if (value != null)
		{
			$("ul.l_specs li[title=" + type + "] span.l_specs_left").html(valueLink);
		}
		$("ul.l_specs li[title=" + type + "] span.l_specs_right").html((value == null ? price : '&euro; ' + price));
		$("ul.l_specs li[title=" + type + "]").addClass('l_specs_hasItem');
	},
	this.item_clear = function(type)
	{
		$("ul.l_specs li[title=" + type + "] span.l_specs_left").html('');
		$("ul.l_specs li[title=" + type + "] span.l_specs_right").html('');
		$("ul.l_specs li[title=" + type + "]").removeClass('l_specs_hasItem');
		//$("div.page[title="+ type +"] a.page_link_add").removeClass("page_link_current");
	},
	this.contract_set = function(year)
	{
		//	set
		$.get("/v4/p/dedicated/ajax/contract.php", { year: year } );
		$("div.page[title=contract] a.page_link_header_add").removeClass("page_link_current");
		$("div.page[title=contract] a.page_link_header_add[title="+ year +"]").addClass("page_link_current");

		//	reload
		$.page_progression(function(result)
		{
			//	specs
			$.each(result.build, function(i, v)
			{
				self.item_set(v.specs, v.price, i);
			});

			self.item_set(null, year + ' jr', 'contractduur');
			self.item_set('Totaal per maand', result.total_formatted, 'total');
		});
	}
	this.input_listen = function(ob)
	{
		if (Validators.validate(ob.name, ob.value))
		{
			$.geg___inputHandle(ob, 'add');

			if (ob.name == 'Achternaam')
			{
				var genderOb = {
					"value": escape($("select[name=Geslacht]").attr("value")),
					"title": escape($("select[name=Geslacht]").attr("title")),
					"name": escape($("select[name=Geslacht]").attr("name"))
				};
				$.geg___inputHandle(genderOb, 'add');
			}
			$.geg___inputValid(ob);
		}
		else {
			$.geg___inputHandle(ob, 'remove');
			$.geg___inputInvalid(ob);
		}
	},
	this.infoadd = function()
	{
		$.gegevens_status(function(json)
		{
			var method = $("input[name=offerte_method]:checked").attr('value');
			var required = new Array('Hostname','E-mailadres');

			for (var i in required)
			{
				if (json[required[i]] == undefined || json[required[i]].length == 0)
				{
					return alert(required[i] + ' invullen a.u.b.');
				}
				
				if (required[i] == "Hostname") {
					function isHostname(s) {
						var regexp = /^[a-zA-Z0-9]+[-a-zA-Z0-9]*[a-zA-Z0-9]+$/;
						return regexp.test(s);
					}
					var checkit = '' + unescape(json[required[i]]);
					if (!isHostname(checkit)) {
						return alert('Hostname invoer is niet geldig.\nEnkel lowercase letters, nummers en streepjes zijn toegestaan.');
					}
					if(json[required[i]].length > 40) {
						return alert('Hostname is te lang! Max. 40 karakters toegestaan.');
					}
				}
				
				if (required[i] == "E-mailadres") {
					var checkit = '' + unescape(json[required[i]]);
					var arr_emails = checkit.split(",");
					
					function validateEmail(email){  
						var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
						return emailPattern.test(email);  
					}
					for (x = 0; x < arr_emails.length; x++) {
						var tocheck = arr_emails[x].split(' ').join('');
						if (!validateEmail(tocheck)) {
							return alert('Emailadres(sen) niet correct ingevoerd.\nControleer en probeer nogmaals.');
						}
					}
				}
			}
			$.ajax({
				url: '/v4/p/dedicated/ajax/item.php?action=edit&type=admininfo',
				type: 'GET',
				dataType: 'json',
				success: function(json)
				{
					//	next
					self.page_next();
				}
			});
		});
	},
	this.offerte = function()
	{
		$.gegevens_status(function(json)
		{
			var method = $("input[name=offerte_method]:checked").attr('value');
			var required = new Array('Achternaam','Voorletters','Straat','Huisnummer','Postcode','Telefoonnummer');

			for (var i in required)
			{
				if (json[required[i]] == undefined || json[required[i]].length == 0)
				{
					return alert(required[i] + ' invullen a.u.b.');
				}
			}
			switch (method)
			{
				case 'email':
					if ($('input[name=E-mail]').css('color') != 'green')
					{
						return alert('E-mail invullen a.u.b.');
					}
				break;
				case 'fax':
					if ($('input[name=Faxnummer]').css('color') != 'green')
					{
						return alert('Fax invullen a.u.b.');
					}
				break;
			}

			window.location = '/dedicated/offerte?type=' + method;
		});
	}
}

$(document).ready(function()
{
	/**	boot
	*/

	//	misc
	$("div.page[title=intro]").css('display', 'block');
	//$(".page_link_add").html('Kiezen');
	$("a").focus(function(){ this.blur(); });
	$('a.a__external').click(function()
	{
		window.open(this.href, 'externalLink');
		return false;
	});

	$.page_progression(function(result)
	{
		//	nav
		$.each(result.list, function(i, v)
		{
			//	reset
			$("a.page_link[title="+ i +"]").removeClass("page_link_done");
			$("a.page_link[title="+ i +"]").removeClass("page_link_neutral");
			$("a.page_link[title="+ i +"]").removeClass("page_link_active");

			switch(v)
			{
				//	done
				case 1:
					if (i != 'intro')
					{
						$("a.page_link[title="+ i +"]").addClass("page_link_done");
					}
				break;

				//	disabled
				case 2:
					$("a.page_link[title="+ i +"]").addClass("page_link_done");
					$("div.page[title="+ i +"] a.page_link_header_add").addClass("page_link_current");
					$("div.page[title="+ i +"] a.page_link_no").css('display', 'none');
					$("div.page[title="+ i +"] a.page_link_yes").css('display', 'none');
					$("div.page[title="+ i +"] span.page_infoblock[title=infoblock_freeoption]").css('display', 'block');
				break;

				//	open
				default:
					$("a.page_link[title="+ i +"]").addClass("page_link_neutral");
				break;
			}
		});
		$("a.page_link[title="+ result.next +"]").removeClass("page_link_neutral");
		$("a.page_link[title="+ result.next +"]").addClass("page_link_active");

		//	specs
		if (result.build != undefined) $.each(result.build, function(i, v)
		{
			ds.item_set(v.specs, v.price, i);
			$("div.page[title="+ i +"] a.page_link_header_add[title="+ v.type +"]").addClass("page_link_current");
		});

		//	total
		ds.item_set('Totaal per maand', result.total_formatted, 'total');

		//	contract
		$("div.page[title=contract] a.page_link_header_add[title="+ result.contract +"]").addClass("page_link_current");
		ds.item_set(null, result.contract + ' jr', 'contractduur');

		//	viewport
		$("div.page").css("display", "none");
		$("div.page[title="+ result.next +"]").css("display", "block");

		$.gegevens_load();
	});

	$("input.geg___gegInput").change(function() {
		ds.input_listen(this);
	});
	$("select[name=Geslacht]").change(function() {
		ds.input_listen(this);
	});
});
