var AtmoAjaxSearch = new Class({
	Implements: [Options, Events],
	options: {
		'results': null,
		'textPages': 'Pages',
		'textOf': 'of',
		'close': null,
		'websearch': false,
		'search': null,
		'readmore': null,
		'noresults': null,
		'advsearch': null,
		'searchlink': null,
		'advsearchlink': null,
		'page': null,
		'page_of': null,
		'uribase': null,
		'limit': null,
		'perpage': null,
		'ordering': null,
		'phrase': null,
		'keyevents': true,
		'hidedivs': null,
		'includelink': null,
		'viewall': null,
		'estimated': null,
		'showestimated': true,
		'showpagination': true,
		'showcategory': true,
		'showreadmore': true,
		'showdescription': true
	},
	initialize: function (options) {
		this.setOptions(options);
		this.timer = null;
		this.rows = ['roksearch_odd', 'roksearch_even'];
		this.inputBox = $('roksearch_search_str').setProperty('autocomplete', 'off');
		var pos = this.inputBox.getCoordinates();
		var left = pos.left + pos.width - $('roksearch_results').getSize().x + 22;
		if (left < 0) { left = pos.left;}
		this.results = $('roksearch_results').setStyles({
			'position': 'absolute',
			'top': pos.top + pos.height,
			'left': left
		}).inject(document.body);
		this.fx = new Fx.Morph(this.results, {
			duration: 1000,
			transition: Fx.Transitions.Sine.easeOut
		});
		this.fx.set({
			'opacity': 0
		});
		this.current = 0;
		this.type = 'local';
		var perpage = this.options.perpage;
		this.addEvents();
	},
	addEvents: function () {
		var self = this;
		this.inputBox.addEvents({
			'click': function () {
				if (self.inputBox.get('value') == self.options.search) { self.inputBox.value = '';}
			},
			'blur': function () {
				if (self.inputBox.get('value') == '') { self.inputBox.value = self.options.search;}
			}
		});
		$('atmoajaxsearch').addEvent('submit', function (e) {
			e.stop();
			var lnk = self.options.searchlink.split("?")[0];
			lnk = lnk.replace(self.options.uribase, '');
			lnk = (lnk) ? lnk : "index.php";
			var uri = self.options.uribase + lnk;
			if (self.inputBox.value == '') {
				var splitDivs = self.options.hidedivs.split(" ");
				self.results.empty().removeClass('roksearch_results').setStyle('visibility', 'hidden');
				if (splitDivs.length > 0 && splitDivs != '') { splitDivs.each(function (div) {
					$(div).setStyle('visibility', 'visible');
				});}
			} else {
				var request = new Request({
					method: 'get',
					utl: uri,
					data: {
						'type': 'raw',
						'option': 'com_search',
						'view': 'search',
						'searchphrase': self.options.phrase,
						'ordering': self.options.ordering,
						'limit': self.options.limit,
						'searchword': self.inputBox.value,
						'tmpl': 'component',
						'r': $time()
					},
					onRequest: function () {
						$('loadingindicator').addClass('loading');
						$('btnsubmit').setStyle('display', 'none');
					},
					onComplete: function (response) {
						var results = new Element('div').set('html', response);
						var tmp = $('atmoajaxsearch_tmp');
						results.getChildren().each(function (div) {
							if (div.getProperty('class') == 'contentpaneopen' || div.id == 'page') {
								if (div.id == 'page') {
									var rs = div.getElement('.results');
									tmp.set('html', (rs) ? rs.innerHTML : '');
								} else { tmp.set('html', div.innerHTML); }
							}
						});
						self.results.empty().removeClass('roksearch_results').setStyle('visibility', 'visible');
						self.arrowleft = null;
						self.arrowright = null;
						self.selectedEl = -1;
						self.els = [];
						if (results.getElement('.contentpaneopen')) { self.outputTable();}
						tmp.empty().setStyle('visibility', 'visible');
						$('loadingindicator').removeClass('loading');
						$('btnsubmit').setStyle('display', 'block');
						self.fx.start({
							'opacity': 1
						});
						self.inputBox.fireEvent('loaded');
					}
				}).send();
			}
		});
	},
	outputTable: function () {
		var self = this;
		var wrapper1 = new Element('div', {
			'class': 'roksearch_wrapper1'
		}).inject(this.results);
		var wrapper2 = new Element('div', {
			'class': 'roksearch_wrapper2'
		}).inject(wrapper1);
		var wrapper3 = new Element('div', {
			'class': 'roksearch_wrapper3'
		}).inject(wrapper2);
		var wrapper4 = new Element('div', {
			'class': 'roksearch_wrapper4'
		}).inject(wrapper3);
		var header = new Element('div', {
			'class': 'roksearch_header png'
		}).set('html', this.options.results).injectInside(wrapper4);
		this.close = new Element('a', {
			'id': 'roksearch_link',
			'class': 'png'
		}).setProperty('href', '#').set('html', this.options.close).injectBefore(header);
		var splitDivs = this.options.hidedivs.split(" ");
		this.close.addEvent('click', function (e) {
			e.stop();
			self.inputBox.fireEvent('unloaded');
			new Event(e).stop();
			self.inputBox.value = self.options.search;
			self.fx.start({
				'opacity': 0
			}).chain(function () {
				self.results.empty().removeClass('roksearch_results');
			});
			if (splitDivs.length > 0 && splitDivs != '') { splitDivs.each(function (div) {
				$(div).setStyle('visibility', 'visible');
			});}
		});
		if (splitDivs.length > 0 && splitDivs != '') { splitDivs.each(function (div) {
			$(div).setStyle('visibility', 'hidden');
		});}
		self.results.addClass('roksearch_results');
		var searchedRestuls = $$('#atmoajaxsearch_tmp fieldset');
		var splitting = null;
		if (searchedRestuls.length > 0) {
			var container = new Element('div', {
				'class': 'container-wrapper'
			}).inject(wrapper4);
			var scroller = new Element('div', {
				'class': 'container-scroller',
				'id': 'container-scroller'
			}).inject(container);
			searchedRestuls.each(function (res, i) {
				var data = '';
				data = res.getChildren();
				if (data.length > 0) {
					data.each(function (div, j) {
						if (div.get('tag') == "div") {
							if (div.getChildren().length > 2 && !div.getPrevious()) {
								var suri = $(div).getFirst().getNext().getProperty('href');
								var el = new Element('div', {
									'class': self.rows[i % 2] + ' png'
								});
								var name = new Element('h3').set('html', $(div).getFirst().getNext().get('text')).injectInside(el);
								self.els.push(el);
								el.addEvents({
									'mouseenter': function () {
										this.addClass(self.rows[i % 2] + '-hover');
										this.selectedEl = i;
									},
									'mouseleave': function () {
										this.removeClass(self.rows[i % 2] + '-hover');
										if (this.selectedEl == i) { this.selectedEl = -1; }
									}
								});
								var description = '';
								if (self.options.showdescription) { description = div.getNext().innerHTML;}
								else { description = '';}
								var desc = new Element('div', {
									'class': 'description'
								}).set('html', description).injectAfter(name);
								if (self.options.showreadmore) {
									var lnk = new Element('a', {
										'class': 'clr'
									}).setProperty('href', suri).set('html', self.options.readmore).injectAfter(desc);
								}
								var innerWrapper1 = new Element('div', {
									'class': 'roksearch_result_wrapper1 png'
								}).inject(scroller);
								var innerWrapper2 = new Element('div', {
									'class': 'roksearch_result_wrapper2 png'
								}).inject(innerWrapper1);
								var innerWrapper3 = new Element('div', {
									'class': 'roksearch_result_wrapper3 png'
								}).inject(innerWrapper2);
								var innerWrapper4 = new Element('div', {
									'class': 'roksearch_result_wrapper4 png'
								}).inject(innerWrapper3);
								el.inject(innerWrapper4);
							}
						}
					},
					this);
				}
			},
			this);
			splitting = scroller.getChildren();
			var max = Math.max(this.options.perpage, splitting.length);
			var min = Math.min(this.options.perpage, splitting.length);
			var perpage = this.options.perpage;
			this.page = [];
			(Math.abs(max / min)).times(function (i) {
				if (splitting[i]) {
					self.page.push(new Element('div', {'class': 'page page-' + i}).inject(scroller).setStyle('width', scroller.getStyle('width')));
				}
				for (j = 0, l = perpage; j < l; j++) {
					if (splitting[i * perpage + j]) {splitting[i * perpage + j].inject(self.page[i]);}
				}
			});
			scroller.setStyle('width', container.getStyle('width').toInt() * Math.round(max / min) + 1000);
		}
		var name = null;
		if (!searchedRestuls.length) {
			var el = new Element('div', {
				'class': this.rows[0]
			});
			name = new Element('h3').set('html', this.options.noresults).injectInside(el);
			var lnk = new Element('a').setProperty('href', this.options.advsearchlink).injectAfter(name);
			name = new Element('span').set('html', this.options.advsearch).injectInside(lnk);
			el.inject(wrapper4);
		} else {
			var limit = $$('#atmoajaxsearch input[name=limit]')[0];
			this.bottombar = new Element('div', {
				'class': "roksearch_row_btm png"
			});
			var lnk2 = new Element('a').setProperty('href', "#").injectInside(this.bottombar);
			name = new Element('span').set('html', this.options.viewall).injectInside(lnk2);
			if (this.page.length) {
				this.current = 0;
				var currentPage22 = this.current + 1;
				var countPages = new Element('div', {
					'id': 'ajaxcountpages'
				}).set('html', this.options.textPages + ' <span>' + currentPage22 + '</span> ' + this.options.textOf + ' <span> ' + this.page.length + '</span>').injectInside(this.bottombar);
			}
			lnk2.addEvent('click', function (e) {
				new Event(e).stop();
				limit.value = '';
				$('atmoajaxsearch').submit();
			});
			this.bottombar.inject(wrapper4);
			if (splitting.length > this.options.perpage) {
				this.arrowDiv = new Element('div', {
					'class': 'container-arrows'
				}).inject(this.bottombar, 'top');
				this.arrowleft = new Element('div', {
					'class': 'arrow-left-disabled'
				}).inject(this.arrowDiv);
				this.arrowright = new Element('div', {
					'class': 'arrow-right'
				}).inject(this.arrowDiv);
				this.arrowsInit(container);
			}
		}
	},
	arrowsInit: function (wrapper) {
		var self = this;
		this.arrowleft.addEvent('click', function () {
			if (self.current - 1 <= 0) {
				self.arrowleft.removeClass('arrow-left').addClass('arrow-left-disabled');
				self.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right');
			} else {
				self.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
				self.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right');
			}
			if (!self.current) { return;}
			else {
				self.current -= 1;
				var currentPage22 = self.current + 1;
				$('ajaxcountpages').set('html', self.options.textPages + ' <span>' + currentPage22 + '</span> ' + self.options.textOf + ' <span> ' + self.page.length + '</span>');
				$('container-scroller').tween('marginLeft', self.current * '-400');
			}
		});
		this.arrowright.addEvent('click', function () {
			if (self.current + 1 >= self.page.length - 1) {
				self.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
				self.arrowright.removeClass('arrow-right').addClass('arrow-right-disabled');
			} else {
				self.arrowleft.removeClass('arrow-left').addClass('arrow-left-disabled');
				self.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right');
			}
			if (self.current + 1 >= self.page.length) { return;}
			else {
				if (self.arrowleft.hasClass('arrow-left-disabled')) { self.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');}
				self.current += 1;
				var currentPage22 = self.current + 1;
				$('ajaxcountpages').set('html', self.options.textPages + ' <span>' + currentPage22 + '</span> ' + self.options.textOf + ' <span> ' + self.page.length + '</span>');
				$('container-scroller').tween('marginLeft', self.current * '-400');
			}
		});
	}
});
