var ExpAddNewHouse = Class.create();

ExpAddNewHouse.prototype = {

	initialize : function(countryId) {

		this._photos 	= [];
		this._photosLen = 0;

		this._pointX 	= 0;
		this._pointY 	= 0;
		this._pointZoom = 0;

		if($('add-house-form')) {
			$('submit').onclick = this._submitAdd.bind(this);
		}

		this._getCoutries(countryId);

		this._map = new ExpMap(
			'map-content',
			{
				addPointCallback : this._addPointCallback.bind(this)
			}
		);
	},

	_addPointCallback : function() {

		var pointParams = this._map.getPointParams();

		this._pointX 	= pointParams.MAP_POS_X;
		this._pointY	= pointParams.MAP_POS_Y;
		this._pointZoom = pointParams.MAP_ZOOM;
	},

	changeCountry : function(selectObj) {

		var cntId = selectObj.options[selectObj.selectedIndex].value;

		this._getRegions(cntId);
	},

	_getCoutries : function(countryId) {

		var url = '/houses/getContries';
		new Ajax.Request(
			url,
			{
				onComplete : function(req) {

					eval('var ret=' + req.responseText);

					var ctnId = 0;

					var retLen = ret.length;

					var innerHTML = '';

							innerHTML += '<div>';
						innerHTML += '<select name="country" onchange="ExpAddNewHouseObj.changeCountry(this);" class="formhousereg">';

						for (var i = 0 ; i < retLen ; i++) {
								if(ret[i].CNT_ID == countryId) {
									innerHTML += '<option value="' + ret[i].CNT_ID + '" selected="selected">' + ret[i].CNT_NAME + '</option>';
								}
								else {
									innerHTML += '<option value="' + ret[i].CNT_ID + '">' + ret[i].CNT_NAME + '</option>';
								}


								if (ctnId == 0) {

									ctnId = ret[i].CNT_ID;
								}
						}
						innerHTML += '</select>';
						 innerHTML += '</div>';

						 innerHTML += '<div class="clear"></div>';

						 $('country-add-selector').update(innerHTML);

						 if (ctnId > 0) {

							 this._getRegions(ctnId);
						 }

						 ExpAddNewHouseObj.changeCountry($$('#country-add-selector select.formhousereg').first());

				}.bind(this)
			}
		);

		return false;
	},

	_getRegions : function(cntId) {

		var url = '/houses/getRegions/cntId/' + cntId;
		new Ajax.Request(
			url,
			{
				onComplete : function(req) {
					eval('var ret=' + req.responseText);
					var retLen = ret.length;
					var innerHTML = '';
					innerHTML += '<div>';
					innerHTML += '<select name="region" class="formhousereg">';
					if($('region-value')) {
						var value = parseInt($('region-value').innerHTML);
						for (var i = 0 ; i < retLen ; i++) {
							if(ret[i].REG_ID == value) {
								innerHTML += '<option value="' + ret[i].REG_ID + '" selected="selected">' + ret[i].REG_NAME + '</option>';
							}
							else {
								innerHTML += '<option value="' + ret[i].REG_ID + '">' + ret[i].REG_NAME + '</option>';
							}
						}
					}
					else {
						for (var i = 0 ; i < retLen ; i++) {
							innerHTML += '<option value="' + ret[i].REG_ID + '">' + ret[i].REG_NAME + '</option>';
						}
					}
					innerHTML += '</select>';
					innerHTML += '</div>';
					innerHTML += '<div class="clear"></div>';
					$('region-add-selector').update(innerHTML);
				}
			}
		);

		return false;
	},

	_printErrors : function(errors) {

		$$('.add-house-fild-error').each( function(el) {

				el.removeClassName('add-house-fild-error');
			}
		);

		$H(errors).each(function(errorId, index) {

				$(errorId[0]).className += ' add-house-fild-error';
			}
		);
	},

	_submitAdd : function() {

		var query = Object.extend({

				'mapX'		: this._pointX,
				'mapY'		: this._pointY,
				'mapZoom'	: this._pointZoom,
				'photos[]'  : this._photos
			},
			Form.serialize($('add-house-form'), true)
		);

		var url = '/houses/addNewHouse';

		new Ajax.Request(
			url,
			{
				method : 'POST',
				parameters : query,
				onComplete: function (req) {

					eval('var ret=' + req.responseText);

					if (ret.success && ret.success == 1) {
						
						var prefix = '/' + ($('cnt_prefix') ? $F('cnt_prefix') : ''); 

						var innerHTML = '';

						innerHTML += '<div style="padding: 30px; text-align: center;">';
						innerHTML += 'House was sucessfull added!';
						innerHTML += '</div>';

						$('add-house-content').update(innerHTML);

						if(ret.AgnQ == 1) {
							document.location = prefix + 'houses/payment/id/' + parseInt(ret.hanId);
						}
						else {
							document.location = prefix + 'post';
						}
					} else {

						if (ret.errors) {

							this._printErrors(ret.errors);

							document.location = '#errors';
						}
					}

				}.bind(this)
			}
		);

		return false;
	},

	addPhotoResult : function(json) {
		if (json.success && json.success == 1) {

			this._photos[this._photosLen] = json.path;
			this._photosLen++;
			this._renderPhotos();
			if ($('add-photo-error').getStyle('display') != 'none') {
				Effect.Fade('add-photo-error');
			}
		} else if (json.error) {

		 	var errorMessage = 'Uploaded file is not gif/jpg type!';
		 	if (json.error == 1) {}
		 	if (json.error == 2) {}
		 	if (json.error == 3) {}
		 	$('add-photo-error').update(errorMessage);
			if ($('add-photo-error').getStyle('display') == 'none') {
				Effect.Appear('add-photo-error');
			}
		}
	},

	dropPhoto : function(phtId) {

		var photosTmp = new Array();

		var index = 0;

		for (var i = 0 ; i < this._photosLen ; i++) {

			if (i != phtId) {

				photosTmp[index] = this._photos[i];
				index++;
			}
		}

		this._photos = photosTmp;
		this._photosLen = this._photos.length;

		this._renderPhotos();

		return false;
	},

	_renderPhotos : function() {

		var innerHTML = '';

		if (this._photosLen > 0) {

			for (var i = 0 ; i < this._photosLen ; i++) {

				innerHTML += '<div style="width:100px; padding: 5px; float: left;">';
				innerHTML += '<div>';
				if(this._photos[i].indexOf('_added') != -1) {
					innerHTML += '<img src="' + this._photos[i] + '" style="border: 1px solid #3389C3;"/>';
				}
				else {
					innerHTML += '<img src="/uploads/_tmp/' + this._photos[i]  + '_100x100.jpg" style="border: 1px solid #3389C3;"/>';
				}
				innerHTML += '</div>';
				innerHTML += '<div style="padding: 3px; background-color: #F4FAFE; text-align: center;">';
				innerHTML += '<a href="#" onclick="return ExpAddNewHouseObj.dropPhoto(' + i + ');">delete photo</a>';
				innerHTML += '</div>';
				innerHTML += '</div>';
			}
			innerHTML += '<div class="clear"></div>';
		}

		$('add-house-photo-upload-content').update(innerHTML);

		if (this._photosLen > 4) {

			$('add-house-photo-upload').setStyle({'display' : 'none'});
		} else {

			$('add-house-photo-upload').setStyle({'display' : 'block'});
		}
	},

	showAddress: function(address) {
		if(! this.geocoder) {
			this.geocoder = new GClientGeocoder();
		}
		this.geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert('Address: ' + address + " not found.");
				} else {
					this._map.map.setCenter(point, 16);
					this._map.addPoint(point);
				}
			}.bind(this)
		);
	}
}

Event.observe(window , 'load' , function() {
	if ($('findAddress')) {
		Event.observe($('findAddress'), 'click', function(event){
			Event.stop(event);
			var address;

			address = $('street').value;

			$A(Element.down($('region-add-selector'), 'select').options).each(function(option){
				if (option.selected && (option.text != 'All' && option.text != 'Other')) {
					address += ', ' + option.text;
					return;
				}
			});

			$A(Element.down($('country-add-selector'), 'select').options).each(function(option){
				if (option.selected) {
					address += ', ' + option.text;
					return;
				}
			});

			if (address) {
				ExpAddNewHouseObj.showAddress(address);
			}

			return false;
		});
	}
});
