

(function($){
	/* set vars */
	var fl = $('ul#faq-list'),
            f = $('form.validate'),
            s = $('.column-2 > .slider'),
            r = $('.radius'),
            mt = $('table.matches'),
            md = $('.modal'),
            rm = $('#sRemarks'),
            ref = $('#re-form'),
            ac = $("input.ac-input"),
            orderby = $("#sOrderBy");

	/* ie6 hovers */
	if (typeof document.body.style.maxHeight == "undefined"){ // IE6 only! document.all targets both ie6 & ie7
		$('#nav li, button').hover(function(){$(this).addClass('hover');}, function(){$(this).removeClass('hover');});
	}

	$.extend($.validator.messages, {
		required: "Dit is een verplicht veld.",
		remote: "Controleer dit veld.",
		email: "Vul hier een geldig email adres in.",
		url: "Vul hier een geldige URL in.",
		date: "Vul hier een geldige datum in.",
		number: "Vul hier een geldig nummer in.",
		digits: "Vul hier alleen nummers in.",
		maxlength: $.format("Vul hier maximaal {0} tekens in."),
		minlength: $.format("Vul hier minimaal {0} tekens in."),
		rangelength: $.format("Vul een waarde in van minimaal {0} en maximaal {1} tekens."),
		range: $.format("Vul een waarde in tussen {0} en {1}."),
		max: $.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."),
		min: $.format("Vul hier een waarde in groter dan of gelijk aan {0}.")
	});

	/* Set validation defaults and classes */
	$.validator.addMethod("postal", function(value, element) {return this.optional(element) || /^[0-9]{4}\s?([a-zA-Z]{2})?$/.test(value);}, "Geef een geldige postcode op");
	$.validator.addMethod("required_group", function(val, el){
		return $("body.woning-toevoegen .contents input:checked").length;
	}, "Selecteer aub minimaal 1 van de bovenstaande opties");
	$.validator.addClassRules("required_group",{"required_group": true});

	/* Validate the form */
	if(f.size() > 0){
		f.validate({
			"groups": {
				"sq": "aiType[] aiLocation[] aiProperties[] aiBuild[]"
			},
			"errorPlacement": function(er,el){
				if(el.attr("name") == "iLivingArea" || el.attr("name") == "iEstateArea"){
					el.closest("p").append(er);
				}else{
					er.insertAfter(el);
				}

				if(el.attr("name")=="aiType[]"){
					er.css("paddingLeft","0");
					el.closest("div.contents").append(er);
				}
			},
			"rules": {
				"sq": {
					"required": true,
					"required_group": true
				}
			}
		});
	}

	/*
	$("#re-button").click(function(ev){
		if(GBrowserIsCompatible()){
			getLatLngFromAddr(function(){
				$("#form-realestate").submit();
			});
		}else{
			$("#form-realestate").submit();
		}
		return false;
	});*/

	/* Faqlist */
	if(fl.get(0)){
		fl.find('.answer').hide().end().find('a.question').click(function(){
			$(this).toggleClass('expanded').parent().find('.answer').toggle();
		});
	}

	/* add other realestate */
	$('a#bAddAnotherRealEstate').click(function(){
		$('input[name=bAddAnotherRealEstate]').val('true');
		$(this).closest('form').submit();
	});

	/* Nieuwbouw switch */
	$('select#iBuild, select#iType').change(function(){
		var target = this.id == "iBuild" ? "#iPeriod" : "#iEstateArea";
		if(this.value == "2"){
			if(this.id == "iBuild"){
				$('#iPeriod').find('option[value=2001]').attr('selected','selected').parent().parent().addClass('disabled');
			}else{
				$(target).removeClass("required").parent().addClass('disabled');
			}
		}else{
			$(target).parent().removeClass('disabled');
			if(this.id == "iType") $(target).addClass("required");
		}
	});

	/* Slider */
	if(s.get(0)){
		var ranges = {
			"iPrice": {
						"range":[50000,1010000], "values":[$('input[name=iPriceLow]').val(),$('input[name=iPriceHigh]').val()],
						"maxtext":"meer dan 1 miljoen", "mintext":"50000", "step":10000
					},
			"iRooms": {
						"range":[1,11], "values":[$('input[name=iRoomsLow]').val(),$('input[name=iRoomsHigh]').val()],
						"maxtext":"meer dan 10", "mintext":"1", "step":1
					},
			"iLivingArea": {
						"range":[50,505], "values":[$('input[name=iLivingAreaLow]').val(),$('input[name=iLivingAreaHigh]').val()],
						"maxtext":"meer dan 500", "mintext":"50", "step":5
					},
			"iEstateArea": {
						"range":[100,1505], "values":[$('input[name=iEstateAreaLow]').val(),$('input[name=iEstateAreaHigh]').val()],
						"maxtext":"meer dan 1500", "mintext": "100", "step":5
					},
			"iPeriod": {
						"range":[1899, 2001], "values":[$('input[name=iPeriodLow]').val(),$('input[name=iPeriodHigh]').val()],
						"maxtext":"na 2000", "mintext":"voor 1900", "step":1
					}
			},
			opt = {
				range: true,
				slide: function(event, ui) {
							var vl = ui.values[0], vh = ui.values[1], lid = this.parentNode.id, max = false, min = false;
							if(ranges[lid].range[1] == vh){
								vh = ranges[lid].maxtext;
								max = true;
							}
							if(ranges[lid].range[0] == vl){
								vl = ranges[lid].mintext;
								min = true;
							}
							if(lid == 'iPrice' || lid == 'iEstateArea' || lid == 'iLivingArea'){
								vl = formatCurrency(vl);
								if(lid=='iPrice'){
									if(!max){
										vh = "€ " + formatCurrency(vh) + ",-";
									}
								}else{
									if(!max){
										vh = formatCurrency(vh);
									}
								}
							}
							$(this)
								.parent()
									.find('input.low').val(ui.values[0]).end()
									.find('input.high').val(ui.values[1]).end()
									.find('em.low').text(vl).end()
									.find('em.high').text(vh);
						}
			};
		s.find('span').each(function (){
			var p = this.parentNode.id;
			opt.values = ranges[p].values;
			opt.min = ranges[p].range[0];
			opt.max = ranges[p].range[1];
			opt.step = ranges[p].step;
			$(this).slider(opt);
		});

		s.find('input:checkbox')
			.each(function(){
				if(this.checked){
					var li = $(this).closest('li');
					li.addClass('disabled');
					li.find('span').slider("disable");
				}
			})
			.click(function(){
				var li = $(this).closest('li');
				li.toggleClass('disabled');
				li.find('span').slider(li.hasClass("disabled") ? "disable" : "enable");
			});
	}

	/* Matches Tables */
	var ib = $('#info-block');
	ib.hide();
	if(mt.get(0)){
		if(!mt.hasClass('show')){
			mt.hide();
		}
		/* Click on the buttons */
		$('dl.order-list dd.view a:not(.no-matches)').click(function(){
			var $this = $(this);
			if($this.hasClass('grey')){
				$this.removeClass('grey').text($this.text().replace('Verberg','Bekijk'));
				$this.closest('dl').next().hide();
			}else{
				$this.addClass('grey').text($this.text().replace('Bekijk','Verberg'));
				$this.closest('dl').next().show();
			}
			return false;
		});

		$('dl.order-list dt a').click(function(){
			$(this).closest('dl.order-list').find('dd.view a').click();
		});

		mt.find('a.info').hover(
			function(){
				var p = $(this).position();
				ib.css('left',p.left+20+'px').css('top',p.top+10+'px').show();
			},
			function(){
				ib.hide();
			}
		);

		/* Modal for match detail*/
		mt.find('a.details, td.info a:not(.info)').colorbox({
			opacity: 0.70, speed:0, initialWidth:100, initialHeight: "90%",
			innerWidth:"600px", maxHeight:"1200px",
			scrolling: false,
			onOpen:function(){
				$("body").addClass("open-modal");
			},
			onCleanup:function(){
				$("body").removeClass("open-modal");
			}
		}
		,function(){
			mt.colorbox.resize();
			$("a.delete").click(function(){
				return confirm("Weet u zeker dat u deze match wilt verwijderen?");
			});
			$('a.print').click(function(){
				if(window.print){
					window.print();
					return false;
				}
			});
		});

	}

	/* confirms */
	$('a.delete').click(function(){
		return confirm('Weet u zeker dat u deze match wilt verwijderen?');
	});
	$('a.delete-woning').click(function(){
		return confirm('Weet u zeker dat u deze woning wilt verwijderen?');
	});

	/* Modal */
	if(md.get(0)){
		md.colorbox({
				/*width:"800px", height:"90%",*/
				opacity: 0.70, speed:0, initialWidth:100, initialHeight:50,
				innerWidth:"800px", innerHeight:"90%",
				transition:"none", preloading:false},
				function(){
					sIFR.replace(clan, {
					  selector: 'h1',
					  css: '.sIFR-root { color: #222222;}',
					  wmode: 'transparent'
					});
				}
			);
	}

	/* order search */
	if(orderby.get(0)){
		orderby.get(0).onchange = function(ev){
			window.location.href = $('#search').attr('action') + '?sOrderBy=' + this.value;
			return false;
		};
	}

	/* TextBlur, for focus,blurring  */
	function textBlur($el){
		if($el.size() > 0){
			var t = $el.val();
			$el.focus(function(){
					if(this.value == t){
						this.value = '';
					}
				})
				.blur(function(){
					if(this.value == '' || this.value == t){
						this.value = t;
					}
				});
		}
	}
	textBlur($('#q'));
	textBlur(rm);

	/* stap1 */
	$('input[name=bSearchRequired]').click(function(){
		if(this.value == "0"){
			$('#main').addClass('search-required').find('input:text, input:checkbox').attr('disabled','disabled');
			$("#bought button").show();
		}else{
			$('#main').removeClass('search-required').find('input:text, input:checkbox').attr('disabled','');
			$("#bought button").hide();
		}
	});

//        if ($("body").hasClass("addtore")){
//            $("#bSearchRequired0").click();
//        }
    if ($("body").hasClass("back-sq") || $("body").hasClass("sqrequired1")){
        $("#bSearchRequired0").click(); // clicks ja
    }


	/* ideal radios */
	$("p.ideal input, p.machtiging input").click(function(){
		var b = $("p.bank");
		$(this).parent().addClass("selected");
		$("p."+(this.value == "ideal"?"machtiging":"ideal")+" label").removeClass("selected");
		if(this.value=="ideal"){
			b.removeClass("disabled").find("select").attr("disabled", "");
		}else{
			b.addClass("disabled").find("select").attr("disabled", "disabled");
		}
	});

	/* RealEstate get Geo Location */
	if(ref.get(0) && GBrowserIsCompatible()){
		var getLatLngFromAddr = function (){
			var g = new GClientGeocoder(), val = $('#sStreet').val()+' '+$('#iNumber').val()+', '+$('#sPostal').val()+' '+$('#sCity').val(),
			found = $('#iCoordsFound');
			g.getLocations(val+' Nederland', function (response){
				if (!response || response.Status.code != 200){
					found.val('0');
					return false;
				}
				var place = response.Placemark[0];
				found.val('1');
				$('#fLocationLat').val(place.Point.coordinates[1]);
				$('#fLocationLng').val(place.Point.coordinates[0]);
			});
		},
		oBusy,oTarget;
		ref.keyup(function(ev){
			$oTarget = $(ev.target);
			if ($oTarget.is('input#sPostal') || $oTarget.is('input#sStreet')){
				if (oBusy){
					clearTimeout(oBusy);
				}
				oBusy = setTimeout(function(){
					getLatLngFromAddr();
				}, 250);
			}
		});

	}

	/* Auto complete */
	if(ac.get(0)){
		ac.autocomplete("/remote/cities.php", {
			"selectFirst": true,
			"mustMatch": true,
			"width": 221
		});
	}

	var fb = $('#feedback-box');
	fb.find('a').click(function(){
		$(this).parent().find('fieldset').toggle();
		return false;
	}).end().submit(function(ev){
		ev.preventDefault();
		$.post("/woning-matcher/send-feedback/",
			{
				'sMessage':$(this).find('textarea').val(),
				'action': $(this).find('input[name=action]').val(),
				'sResolution': $(this).find('input[name=sResolution]').val()
			},
			function(){
				$('#feedback-box').addClass('sent').find('textarea').after('<em>Bedankt voor je feedback!</em>').remove();
			}
		);
	});

	$("select#iAssociation").change(function(){
		var nvmw = $(".nvm-wrapper");
		if ($(this).val() == "1"){ // 1 === NVM
			nvmw.show();
		}else{
			nvmw.hide();
		}
	}).change();

	$("#funda-sync").click(function(ev){
		ev.preventDefault();
		var sync_log = $("#sync-log");

		sync_log.addClass("loading").html("<h3>Bezig met woningen importeren... <img src=\"/images/woningmatcher/icons/ajax-loader.gif\" alt=\"Bezig met ophalen\"/></h3><p>Dit kan enkele seconden tot minuten duren....</p>");

		$.getJSON("/woning-matcher/tiara-sync/", {}, function(json){
			var content = "";
			if (json.status == "1"){
				if (json.realestate_added > 0){
					var crt = $("#header ul li.cart");
					if (crt.size() > 0){
						var ctext = crt.find("a").text(),
							crrnt = ctext.substring(13, ctext.indexOf(")")),
							bestelcount = parseInt(crrnt) + parseInt(json.realestate_added);
						crt.find("a").html("Bestellijst ("+bestelcount+")");
					}else{
						$("#header ul li:first").after("<li class=\"cart\"> | <a href=\"/woning-matcher/betaling/\">Bestellijst ("+json.realestate_added+")</a></li>");
					}
				}

				content = "<h3>Synchronisatie voltooid.</h3><ul><li><strong>"+json.realestate_added+"</strong> "+(json.realestate_added=="1"?"nieuwe woning is":"nieuwe woningen zijn")+" toegevoegd.</li>"+
						"<li><strong>"+json.realestate_updated+"</strong> "+(json.realestate_updated=="1"?"bestaande woning is":"bestaande woningen zijn")+" bijgewerkt.</li>"+
						"<li><strong>"+json.realestate_unchanged+"</strong> "+(json.realestate_unchanged=="1"?"woning is":"woningen zijn")+" ongewijzigd gebleven.</li>"+
						"<li><strong>"+json.realestate_deleted+"</strong> "+(json.realestate_deleted=="1"?"woning is":"woningen zijn")+" verwijderd.</li></ul>";
			}else{
				content = "<h3>Synchronisatie mislukt</h3><p>Kon de woningen niet ophalen: <strong>"+json.message+"</strong></p>";
			}
			sync_log.removeClass("loading").html(content);
		})
	});

	function formatCurrency(num){
		num = num.toString().replace(/\$|\,/g,'');
		if(isNaN(num)){
			num = "0";
		}
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num*100+0.50000000001);
		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 num;
	}

})(jQuery);
