
//var Search = Class.create();
//Search.prototype = {
var Search = Class.create({
  initialize: function(element, form, fquery, fsel, path) {
    this.path = path;
	this.backend = path + 'backend/';
	this.form = form;
    this.element = $(element);
	this.fquery = $(fquery);

	this.fsel = new Array();
	this.sel = new Array();
	for (i = 0; i < fsel.length; i++) {
		this.fsel[i] = $(fsel[i]);
		this.sel[i] = new Form.Element.EventObserver(this.fsel[i], this.onChange);
		this.sel[i].backref = this;
		this.sel[i].id = this.fsel[i].id;
	}

	this.query = new Form.Element.Observer(this.fquery, 1, this.onChange); 
	this.query.backref = this;

	this.res_msg = this.createResHolder(''); 
	this.res_users = this.createResHolder('Users'); 
	this.res_blogs = this.createResHolder('Blogs'); 
  },

  createResHolder: function(name) {
	var c = document.createElement('div');
	Element.hide(c);

	if (name != '') {
		var tmp = document.createElement('h3');
		tmp.innerHTML = name;
		c.appendChild(tmp);
	}

	c.content = document.createElement('div');
	cls = new Element.ClassNames(c.content);
	cls.add('resultcontainer')
	c.appendChild(c.content);

	this.element.appendChild(c);
	return c;
  },

  onChange: function() {
	var obj = this.backref;
	obj.submit_search();
  },


  submit_search: function() {
	this.res_msg.innerHTML = '';
	var tmp = document.createElement('div');
	tmp.id = 'loader';

	var spin = document.createElement('img');
	spin.src = this.path + 'img/progress.gif'; spin.border = "0";
	Element.setStyle(spin, { border: '0' });
	tmp.appendChild(spin);
	tmp.innerHTML += 'Searching, please wait...'; 
	
	this.res_msg.appendChild(tmp);

	Element.show(this.res_msg);

	var pars = Form.serialize(this.form);
	var obj = this;
	var handler = function(req, stat) {
		var res = JSON.parse(req.responseText);

		Element.hide(obj.res_msg);
		if (res.results.blogs == 0 &&
			res.results.tags == 0 &&
			res.results.users == 0) {
			Element.hide(obj.res_blogs);
			Element.hide(obj.res_users);
			obj.res_msg.innerHTML = 'Your query does not match any blogs nor users';
			Element.show(obj.res_msg);
			return;
		}

		if (res.results.blogs > 0 || res.results.tags > 0) {
			Element.show(obj.res_blogs);
			var elm = obj.res_blogs.content;
			elm.innerHTML = '';
			var tbl = document.createElement('table');
			var tblhead = document.createElement('tbody'); 
			tbl.appendChild(tblhead);
			elm.appendChild(tbl);

			var createrow = function(blog, tblrow) {
				var col1 = document.createElement('td');
				var col2 = document.createElement('td');
	
				var imgpath = obj.path + 'thumbs/60/' + blog.id;
				var datearr = ut2array(blog.date);
				var link = obj.path + 'user/' + blog.link;
				var datestr = getDatestr(blog.date);

				col1.innerHTML = '<a href="'+link+'">\
<img src="' + imgpath + '" border="0" id="blog_'+i+'"/></a>';
				col2.innerHTML = blog.title + ' <br/><h4>by ' + blog.user + ' at '+datestr +'</h4>';
				tblrow.appendChild(col1); tblrow.appendChild(col2);
			};

			var blogs = res.blogs;
			var row = document.createElement('tr');
			for (i = 0; i < blogs.length; i++) {
				createrow(blogs[i], row);
				if (i % 2) {
					tblhead.appendChild(row);
					row = document.createElement('tr');
				}
			}
			tblhead.appendChild(row);
		}
		else {
			Element.hide(obj.res_blogs);
		}

		if (res.results.users > 0) {
			Element.show(obj.res_users);
			var elm = obj.res_users.content;
			elm.innerHTML = '';

			var users = res.users;
			for (i = 0; i < users.length; i++) {
				var tmp = document.createElement('a');
				tmp.href = obj.path + 'user/' + users[i].name;
				tmp.innerHTML = users[i].name; 
				elm.appendChild(tmp);
				elm.appendChild(document.createElement('br'));
			}

		}
		else {
			Element.hide(obj.res_users);
		}
		Element.hide(obj.res_msg);
	};
	var req = new Ajax.Request(this.backend + 'search.php',
		{ method: 'get', parameters: pars, onComplete: handler});
  }
});



