var Nproperty = Class.create();

Nproperty.prototype = {
	update: function (evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var resultid = target.readAttribute('result');
		var metatype = target.readAttribute('metatype');
		target.className = 'property-content-link-selected chaste-over';
		target.up(0).siblings().each(function(sibling){sibling.down(0).className = 'property-content-link chaste-over'});
		this.switch_content(metatype, resultid);
	},
	minimise: function (evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var resultid = target.readAttribute('result');
		if (resultid == 'search') {
			$('property-search').style.display = 'none';
		} else {
			$('property-content-' + resultid).style.display = 'none';
			$('property-footer-' + resultid).style.display = 'none';
		}
		target.up(0).siblings().each(function(item){item.style.display = 'block';});
		target.up(0).style.display = 'none';
	},
	maximise: function (evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var resultid = target.readAttribute('result');
		if (resultid == 'search') {
			$('property-search').style.display = 'block';
		} else {
			$('property-content-' + resultid).style.display = 'block';
			$('property-footer-' + resultid).style.display = 'block';
		}
		target.up(0).siblings().each(function(item){item.style.display = 'block';});
		target.up(0).style.display = 'none';
	},
	remove: function (evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var resultid = target.readAttribute('result');
		$('property-result-' + resultid).remove();
	},
	show_images: function (evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var resultid = target.up(0).readAttribute('result');
		var targeturl = target.readAttribute('src');
		$('main-content-image-' + resultid).src = targeturl;
	},
	show_floorplans: function (evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var resultid = target.up(0).readAttribute('result');
		var targeturl = target.readAttribute('src');
		$('main-content-floorplan-' + resultid).src = $('main-content-floorplan-' + resultid).up().href = targeturl;
	},
	switch_content: function (mt, id) {
		// @@ sorttable seems to have a clash that triggers add (!?), so we use the if (mt) hack to workaround for now...
		if (mt) {
			
			var development = 'northchase';
			var resulttype = 'properties';
			
			$A($('result-'+id+'-sub-content').getElementsByClassName('result-sub-content')).each(function(f){f.style.display = 'none'});
               $A($('result-'+id+'-main-content').getElementsByClassName('result-main-content')).each(function(f){f.style.display = 'none'});
			
			$A($('result-'+id+'-sub-content').getElementsByClassName(mt+'-sub')).first().style.display = 'block';
			$A($('result-'+id+'-main-content').getElementsByClassName(mt+'-main')).first().style.display = 'block';
			
			
			thumbnails = new Array('images', 'floorplans');
			
			if (thumbnails.include(mt)) {
				$$('.property-'+ mt +'-thumb').each(
					function (item) {
						Event.observe(
							item,
							'click',
							this['show_'+mt].bindAsEventListener(this)
						);
					}.bind(this)
				);
			}
		}
	},
	email_result: function(evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var flash = $A(target.getElementsByClassName('email-notification')).first();
		request = new Ajax.Updater(
			flash,
			'/send_email',
			{
				parameters: target.serialize(true),
				onComplete: function() {
                $A(target.getElementsByClassName('recipients-box')).first().value = '';
				}
			}
		);
	},
	toggle_email_form: function(evt) {
		var target = Event.element(evt);
		Event.stop(evt);
		var target_id = target.readAttribute('result');
		var is_visible = $('email-result-'+ target_id).visible();
		if(!is_visible) {
			$('email-result-' + target_id).show();
			Event.observe(
				'email-result-'+ target_id,
				'submit',
				this.email_result.bindAsEventListener(this)
			);
		} else {
			$('email-result-' + target_id).hide();
		}
	},
	apply_observers: function() {
		$$('.property-content-link', '.property-content-link-selected').each(
			function (item) {
				Event.stopObserving(
					item,
					'click',
					this['events_cache']['content']
				);
				Event.observe(
					item,
					'click',
					this['events_cache']['content']
				);
			}.bind(this)
		);
		$$('.minimise-result').each(
			function (item) {
				Event.stopObserving(
					item,
					'click',
					this['events_cache']['minimise']
				);
				Event.observe(
					item,
					'click',
					this['events_cache']['minimise']
				);
			}.bind(this)
		);
		$$('.maximise-result').each(
			function (item) {
				Event.stopObserving(
					item,
					'click',
					this['events_cache']['maximise']
				);
				Event.observe(
					item,
					'click',
					this['events_cache']['maximise']
				);
			}.bind(this)
		);
		$$('.maximise-result').each(
			function (item) {
				var resultid = item.readAttribute('result');
				if ($('property-content-' + resultid) && $('property-content-' + resultid).visible()) {
					item.up(0).style.display = 'none';
				}
			}
		);
		$$('.minimise-result').each(
			function (item) {
				var resultid = item.readAttribute('result');
				if ($('property-content-' + resultid) && !$('property-content-' + resultid).visible()) {
					item.up(0).style.display = 'none';
				}
			}
		);
		$$('.remove-result').each(
			function (item) {
				Event.stopObserving(
					item,
					'click',
					this['events_cache']['remove']
				);
				Event.observe(
					item,
					'click',
					this['events_cache']['remove']
				);
			}.bind(this)
		);
		$$('.email-result').each(
			function (item) {
				Event.stopObserving(
					item,
					'click',
					this['events_cache']['email']
				);
				Event.observe(
					item,
					'click',
					this['events_cache']['email']
				);
			}.bind(this)
		);
	},
	initialize: function () {
		this['events_cache'] = {
			'content': this.update.bindAsEventListener(this),
			'minimise': this.minimise.bindAsEventListener(this),
			'maximise': this.maximise.bindAsEventListener(this),
			'remove': this.remove.bindAsEventListener(this),
			'email': this.toggle_email_form.bindAsEventListener(this)
		}
		this.apply_observers();
	}
};
Event.observe(
	$(window),
	'load',
	function () {
		if(!window.newhall_property_instance){
			window.newhall_property_instance = new Nproperty();
		}
	}
);
