var dropdowners = []

var dropdownersPrepare = function () {
	dropdowners.length = 0
	$('a[rel=dropdown]').each(function(){
		dropdowners.push(new Dropdowner(this))
	})

	$('div[rel=dropdown]').each(function(){
		this.onclick = function (e) {
			var e = e || event
			var t = e.target || e.srcElement
			while (t.nodeType == '1' && t.tagName != 'A') t = t.parentNode
			if (t.nodeType != '1') return true
			dropdowners.push(new Dropdowner(t, this, e))
			return false
		}
		this.onmouseover = this.onmouseout = function () { return true }
	})

	$('div[rel=bubble]').each(function(){
		this.onmouseover = function (e) {
			var e = e || event
			var t = e.target || e.srcElement
			while (t.nodeType == '1' && t.tagName != 'A') t = t.parentNode
			if (t.nodeType != '1') return true
			dropdowners.push(new Dropdowner(t, this, e))
		}
		this.onclick = function () { return true }
	})
}

$(dropdownersPrepare)

function Dropdowner (element, dropdownerList, e) {
	this.caller = element
	var dropdowner = this
	
	callerCls = dropdowner.caller.className
	callerRel = dropdowner.caller.className
	
	if (dropdownerList) {
		var callerCls = dropdownerList.getAttribute('rev')
		var bubble = (dropdownerList.getAttribute('rel') == 'bubble') ? true : false
	}
	
	dropdowner.init = function (e) {
		e = e || event
		dropdowner.block = document.createElement('div')
		dropdowner.block.className = callerCls + ' dropdown'
		dropdowner.block.style.display = 'none'
		$(dropdowner.block).append(dropdowner[callerCls]())
		document.body.appendChild(dropdowner.block)
		var links = dropdowner.block.getElementsByTagName('a');
		if (!links) return false
		hider.add( dropdowner.close )
		for (var cnt=0; cnt<links.length; cnt++)
			if (/\bexpander\b/.test(links[cnt].className))
				expanders.push(new Expander(links[cnt]))
		dropdowner[callerCls].go()
		var cls = function(){ return !!dropdowner.close() }
		var clsCallers = byClass('close', dropdowner.block)
		if (clsCallers) for (el in clsCallers) clsCallers[el].onclick = cls
		//.getElementsByTagName('a')[0].onclick =
		//dropdowner.block.getElementsByTagName('input')[dropdowner.block.getElementsByTagName('input').length -1].onclick = 
		dropdowner.show(e)
	}

	dropdowner.show = function (e) {
		var mar = (bubble == true) ? 35 : 0
		var l = left = e.clientX + document.documentElement.scrollLeft + mar
		if ( l + 252 > document.documentElement.scrollWidth ) l = document.documentElement.scrollWidth - 252
		with (dropdowner.block.style) {
			left = l + 'px'
			top = e.clientY + document.documentElement.scrollTop + mar + 'px'
		}
		$(dropdowner.block).show(180)
		if (bubble == false) {
			dropdowner.caller.onclick = function (e) {
				dropdowner.close(e)
				return false
			}
		}
	}

	dropdowner.close = function () {
		$(dropdowner.block).hide( 180, function () { $(dropdowner.block).remove(); hider.remove() } )
		if (bubble == false) dropdowner.caller.onclick = function (e) {
			dropdowner.show(e)
			return false
		}
	}

	if (dropdownerList) dropdowner.init(e)

	if (bubble == true) {
		dropdowner.caller.onmouseover = function (e) {
			dropdowner.show(e)
		}
		dropdowner.caller.onmouseout = function (e) {
			dropdowner.close(e)
		}
		dropdowner.caller.onclick = function () { return true}
	}

	else {
		dropdowner.caller.onclick = function (e) {
			dropdowner.init(e)
			return false
		}
		dropdowner.caller.onmouseover = dropdowner.caller.onmouseout = function () { return true}
	}

}

