

var Field = Class.create();
Field.prototype = {

	field:null,
	container:null,
	ispassword:false,
	mask:null,
	focusListener:null,
	blurListener:null,

	initialize: function (element) {
		Element.extend(element);
		this.field = element;
		if(Element.readAttribute(this.field,'alt')) {
			this.container = new Element('div', {'class':this.field.className});
			this.field.parentNode.insertBefore(this.container, this.field);
			this.container.appendChild(element);
			this.focusListener = this.activate.bindAsEventListener(this);
			this.blurListener = this.desactivate.bindAsEventListener(this);
			this.mask = new Element('input',{'type':'text', 'value':Element.readAttribute(element,'alt'), "class":"empty"});
			this.field.parentNode.insertBefore(this.mask, this.field);
			if(this.field.value!="") {
				Element.hide(this.mask);
				Event.observe(this.field, "blur", this.blurListener);
			} else {
				Element.hide(this.field);
				Event.observe(this.mask, "focus", this.focusListener, false);
			}
		}

	},

	activate: function (e) {
		Event.observe(this.field, "blur", this.blurListener);
		Event.stopObserving(this.field, "focus", this.focusListener, false);
		Element.show(this.field);
		Element.hide(this.mask);
		this.field.focus();
	},

	desactivate: function (e) {
		if(this.field.value=="") {
			Element.show(this.mask);
			Element.hide(this.field);
			Event.stopObserving(this.field, "blur", this.blurListener, false);
			Event.observe(this.mask, "focus", this.focusListener, false);
		}
	}

}

var check = Class.create();
check.prototype = {

	initialize: function (element) {
		var message = "";
		var css =  element.style ? element.style : document.defaultView.getComputedStyle(element, null);
		if(css) {
			for(a in css) {
				if(typeof css[a] != "function") {
					message += a+"="+element.getStyle(a)+", ";
				}
			}
			alert(message);
		}
	}

}

var SelectBox = Class.create();
SelectBox.prototype = {

	element:null,
	caption:null,
	elementId:null,
	list:null,
	rolloutHandler:null,

	initialize: function(element) {

		this.elementId = element.id;
		this.element = new Element('div', {'class':'customSelect'});
		element.parentNode.insertBefore(this.element, element);

		this.caption = new Element('div', {'class':'caption'});
		this.caption.setAttribute('autocomplete','off');
		this.caption.setAttribute('readonly','readonly');
		this.element.appendChild(this.caption);

		this.list = new Element('div', {'class':'list'});
		this.element.setStyle({'width':Math.max(element.getWidth()+25,50)+'px'});
		this.element.setStyle({'height':element.down('li').getHeight()+'px'});
		this.list.setStyle({'width':this.element.getWidth()+'px'});
		this.list.setStyle({'top':(this.element.getHeight()-1)+'px'});
		element.removeClassName("select");
		this.list.appendChild(element);
		this.element.appendChild(this.list);

		this.rolloutHandler = this.detectRollout.bind(this);

		Element.hide(this.list);
		Event.observe(this.element, "mousedown", function(e) {this.open(e)}.bind(this),false);

		var options = this.list.getElementsByTagName('li');
		for(i=0; i<options.length;i++) {
			if(options[i].hasClassName("selected")) {
				this.caption.innerHTML = options[i].down('a').innerHTML;
				options[i].remove();
				break;
			}
		}

	},

	open: function(e) {
		Element.show(this.list);
		Event.stopObserving(this.element, "mousedown", function(e) {this.open(e)}.bind(this),false);
		Event.observe(document, 'mousemove', this.rolloutHandler,false);
	},

	detectRollout: function(e) {
		if(this.list.getStyle('display')!='none') {
			var left = Element.cumulativeOffset(this.list).left;
			var top = Element.cumulativeOffset(this.list).top;
			var width = Element.getDimensions(this.list).width;
			var height = Element.getDimensions(this.list).height;
			var mouseX = Event.pointerX(e);
			var mouseY = Event.pointerY(e);
			if(mouseX<left-20 || mouseX>left+width+20 || mouseY<top-20 || mouseY>top+height+40) {
				this.close();
			}
		}
	},

	close: function(e) {
		Event.stopObserving(document, 'mousemove', this.rolloutHandler,false);
		Event.observe(this.element, "mousedown", function(e) {this.open(e)}.bind(this),false);
		Element.hide(this.list);
	}
}



//------------------------------------------------------------------------------

// List manager

//------------------------------------------------------------------------------



var listManager = Class.create();
listManager.prototype = {

	action:null,
	list:null,
	deleteable:false,

	initialize: function (el) {
		this.action = el.title;
		this.list = el;
		this.initItems(this.list);
		this.list.title = "";
	},

	initItems: function (el) {
		for(var j=0;j<el.childNodes.length;j++) {
			if(el.childNodes[j].tagName && el.childNodes[j].tagName.toLowerCase() == 'li') {
				var li = el.childNodes[j];
				Element.extend(li);
				var icon = new Element("a", {"title":this.list.readAttribute("rel"), "href":this.action+li.id}).update("");
				icon.addClassName("icon");
				li.appendChild(icon);
				Element.insert(li.down(0), {after:icon});
				Element.hide(icon);
				Event.observe(li, "mouseover", function(ev) {this.showAction(ev)}.bindAsEventListener(this), false);
				Event.observe(li, "mouseout", function(ev) {this.hideAction(ev)}.bindAsEventListener(this), false);
				//Event.observe(icon, "click", function(ev) {this.doAction(ev)}.bindAsEventListener(this), false);
			}
		}
	},

	showAction: function (ev) {
		var li = (Event.element(ev).up("li")) ? Event.element(ev).up("li") : Event.element(ev);
		li.addClassName("active");
		li.down(".icon").show();
	},

	hideAction: function (ev) {
		var li = (Event.element(ev).up("li")) ? Event.element(ev).up("li") : Event.element(ev);
		li.removeClassName("active");
		li.down(".icon").hide();
	},

	doAction: function (ev) {
		var li = (Event.element(ev).up("li")) ? Event.element(ev).up("li") : Event.element(ev);
		document.location.href = this.action+li.id;
	},

	dispose: function () {

	}



}


//------------------------------------------------------------------------------
// Vote
//------------------------------------------------------------------------------

var voteBoxes = Class.create();
voteBoxes.prototype = {

	action:null,
	actionAfter:null,
	list:null,
	mouseoverHandler:null,
	mouseoutHandler:null,
	defaultValue: 0,
	length: 0,

	initialize: function (el) {

		var actions = el.title.split("|");
		this.action = actions[0];
		this.actionAfter = actions[1];

		this.list = el;
		if(!this.list.hasClassName("inherit")) {
			this.mouseoverHandler = this.rollover.bindAsEventListener(this);
			this.mouseoutHandler = this.rollout.bindAsEventListener(this);
			this.mouseclickHandler = this.click.bindAsEventListener(this);
			this.initItems(this.list);
		} else if(this.actionAfter!="") {
			this.mouseclickHandler = this.clickAfter.bindAsEventListener(this);
			this.initItems(this.list);
		}
		this.list.title = "";
	},

	initItems: function (el) {
		var index = 1;
		for(var j=0;j<el.childNodes.length;j++) {
			if(el.childNodes[j].tagName && el.childNodes[j].tagName.toLowerCase() == 'li') {
				var li = el.childNodes[j];
				Element.extend(li);
				li.id = this.list.id+"_"+index;
				if(!this.list.hasClassName("inherit")) {
					if(li.hasClassName("selected")) defaultValue = index;
					Event.observe(li.down('a'), "mouseover", this.mouseoverHandler);
					Event.observe(li.down('a'), "mouseout", this.mouseoutHandler);
					Event.observe(li.down('a'), "mousedown", this.mouseclickHandler);
				} else {
					Event.observe(li.down('a'), "mousedown", this.mouseclickHandler);
				}
				index++;
			}
		}
		this.length = index-1;
	},

	rollover: function (ev) {
		var el = (Event.element(ev).tagName.toLowerCase()=="li") ? Event.element(ev) : Event.element(ev).up('li');
		var index = parseInt(el.id.substr(el.id.indexOf("_")+1,el.id.length));
		for(var i=1;i<=index;i++) {
			$(this.list.id+"_"+i).isSelected = $(this.list.id+"_"+i).hasClassName("selected");
			$(this.list.id+"_"+i).addClassName("selected");
		}
	},

	rollout: function (ev) {
		var el = (Event.element(ev).tagName.toLowerCase()=="li") ? Event.element(ev) : Event.element(ev).up('li');
		var index = parseInt(el.id.substr(el.id.indexOf("_")+1,el.id.length));
		for(var i=1;i<=index;i++) {
			if(i>this.defaultValue) {
				if(!$(this.list.id+"_"+i).isSelected) $(this.list.id+"_"+i).removeClassName("selected");
			}
		}
	},

	click: function (ev) {
		var el = (Event.element(ev).tagName.toLowerCase()=="li") ? Event.element(ev) : Event.element(ev).up('li');
		var index = parseInt(el.id.substr(el.id.indexOf("_")+1,el.id.length));
		var options = {
			method: "get",
			parameters: this.list.id+"="+index,
			onSuccess: function(transport) {
				var data = transport.responseText.evalJSON();
				var note = parseInt(data.NOTE);
				for(var i=1;i<=this.length;i++) {
					li = $(this.list.id+"_"+i);
					Event.stopObserving(li.down('a'), "mouseover", this.mouseoverHandler);
					Event.stopObserving(li.down('a'), "mouseout", this.mouseoutHandler);
					Event.stopObserving(li.down('a'), "mousedown", this.mouseclickHandler);
					if(i<=note) li.addClassName("selected");
				}
				this.list.addClassName("inherit");
				if(this.actionAfter!="") this.clickAfter();

			}.bind(this)
		}
		new Ajax.Request(this.action, options);
		if(ev) Event.stop(ev);
		return false;
	},

	clickAfter: function (ev) {
		eval(this.actionAfter);
		if(ev) Event.stop(ev);
		return false;
	},

	dispose: function () {

	}

}

//------------------------------------------------------------------------------
// Autocompleter
//------------------------------------------------------------------------------



var autoCompleter = Class.create();
autoCompleter.prototype = {

	action:null,
	field:null,
	param:null,
	afterUpdateHandler:null,

	initialize: function(el) {

		this.action = el.readAttribute("src");
		this.param = el.name;
		this.field = el;
		this.afterUpdateHandler = this.afterUpdateElement.bind(this);
		var completer = new Element("div", {"id":this.field.id+"Completer","class":"autocompleteList"});
		Element.insert(this.field, {after:completer});
		completer.setStyle({'width':this.field.getWidth()+"px"});
		autocomplete = new Ajax.Autocompleter(this.field.id, completer.id, this.action, {paramName:this.param, minChars: 4, indicator:null, afterUpdateElement: this.afterUpdateHandler});

	},

	afterUpdateElement: function(field, item) {
		$('searchForm').q.value = field.value;
	},

	dispose: function () {



	}

}


