var customSelect = new function() {
	this.openedSelect = null;
	this.initClass = 'custom-select';
	this.selectValueContainerClass = 'select-value-container';
	this.selectValueContainerOverClass = 'select-value-container-over';
	this.selectValueClass = 'select-value';
	this.selectListClass = 'select-list';
	this.selectListItemClass = 'select-list-item';
	this.selectListItemActiveClass = 'select-list-item-active';
	this.selects = new Array();
	
	this.hookEvent = function(element, eventName, callback) {
		if(typeof(element) == "string")	element = document.getElementById(element);
		if(element == null) return;
		if(element.addEventListener) {
			if(eventName == 'mousewheel') {
				element.addEventListener('DOMMouseScroll',callback, false);
			}
			element.addEventListener(eventName, callback, false);
		}
		else if(element.attachEvent) element.attachEvent("on" + eventName, callback);
	}
	this.cancelEvent = function(e) {
		e = e ? e : window.event;
		if(e.stopPropagation) e.stopPropagation();
		if(e.preventDefault) e.preventDefault();
		e.cancelBubble = true;
		e.cancel = true;
		e.returnValue = false;
		return false;
	}
	
	this.selectStylish = function() {
		var selects = document.getElementsByTagName('SELECT');
		var i,j,dummy,arrow;
		for(i=0;i<selects.length;i++) {
			if(selects[i].className.indexOf(customSelect.initClass) >= 0) {
				dummy = document.createElement('DIV');
				dummy.ownerNode = selects[i];
				dummy.className = customSelect.selectValueContainerClass;
				dummy.onclick = function(e) {
					e = e ? e : window.event;
					if(customSelect.openedSelect == this.ownerNode.selectList) { 
						customSelect.openedSelect.style.display = 'none';
						customSelect.openedSelect = null;
					} else {
						this.ownerNode.selectList.style.display = 'block';
						customSelect.openedSelect = this.ownerNode.selectList;
					}
					customSelect.cancelEvent(e);
				}	
				dummy.onmouseover = function() { this.className = customSelect.selectValueContainerOverClass; }
				dummy.onmouseout = function() { this.className = customSelect.selectValueContainerClass; }
				selects[i].parentNode.insertBefore(dummy,selects[i]);
				selects[i].selectValueContainer = dummy;
				
				dummy = document.createElement('DIV');
				dummy.className = customSelect.selectValueClass;
				dummy.innerHTML = selects[i].options[selects[i].selectedIndex].innerHTML;
				selects[i].selectValueContainer.appendChild(dummy);
				selects[i].selectValue = dummy;
				
				dummy = document.createElement('DIV');
				dummy.className = customSelect.selectListClass;
				
				selects[i].parentNode.insertBefore(dummy,selects[i]);
				selects[i].selectList = dummy;
				
				for(j=0;j<selects[i].options.length;j++) {
					dummy = document.createElement('A');
					dummy.className = (selects[i].selectedIndex == j) ? customSelect.selectListItemActiveClass : customSelect.selectListItemClass;
					dummy.innerHTML = selects[i].options[j].innerHTML;
					dummy.listIndex = j;
					dummy.ownerNode = selects[i];
					dummy.onclick = function() {
						this.ownerNode.selectList.style.display = 'none';
						customSelect.openedSelect = null;
						this.ownerNode.selectValue.innerHTML = this.innerHTML;
						this.ownerNode.selectList.childNodes[this.ownerNode.selectedIndex].className = customSelect.selectListItemClass;
						this.className = customSelect.selectListItemActiveClass;
						this.ownerNode.selectedIndex = this.listIndex;
						this.ownerNode.onchange;
						//alert(typeof this.ownerNode.additionalProcess);
						//if(this.ownerNode.additionalProcess) this.ownerNode.additionalProcess(this.ownerNode.options[this.ownerNode.selectedIndex].value);
						return false;
					}
					selects[i].selectList.appendChild(dummy);
				}
				
				selects[i].removeList = function() {
					while (this.options.length) {
						this.options[0] = null;
						if(this.selectList.childNodes[0])this.selectList.removeChild(this.selectList.childNodes[0]);
					}
				}
				
				selects[i].newList = function(items) {
					this.removeList();
					var i,dummy;
					for(i=0;i<items.length;i++) {
						this.options[this.options.length] = new Option(items[i][1],items[i][0]);
						
						dummy = document.createElement('A');
						dummy.className = (i == 0) ? customSelect.selectListItemActiveClass : customSelect.selectListItemClass;
						dummy.innerHTML = items[i][1];
						dummy.listIndex = i;
						dummy.ownerNode = this;
						dummy.onclick = function() {
							this.ownerNode.selectList.style.display = 'none';
							openedSelect = null;
							this.ownerNode.selectValue.innerHTML = this.innerHTML;
							this.ownerNode.selectList.childNodes[this.ownerNode.selectedIndex].className = customSelect.selectListItemClass;
							this.className = customSelect.selectListItemActiveClass;
							this.ownerNode.selectedIndex = this.listIndex;
							//if(typeof(this.ownerNode.additionalProcess) == 'function') this.ownerNode.additionalProcess(this.ownerNode.options[this.ownerNode.selectedIndex].value);
							return false;
						}
						this.selectList.appendChild(dummy);
					}
				}
				
				selects[i].style.display = 'none';
			}
		}
	}
	
	this.hookEvent(window, 'load', this.selectStylish);
}();
