// ARRAY EXTENSIONS
if (!Array.prototype.push) Array.prototype.push = function() {
	for (var i=0; i<arguments.length; i++) this[this.length] = arguments[i];
	return this.length;
}

Array.prototype.find = function(value, start) {
	start = start || 0;
	for (var i=start; i<this.length; i++)
			if (this[i]==value)
					return i;
	return -1;
}

Array.prototype.has = function(value) {
	return this.find(value)!==-1;
}

// FUNCTIONAL
function map(list, func) {
	var result = [];
	func = func || function(v) {return v};
	for (var i=0; i < list.length; i++) result.push(func(list[i], i, list));
	return result;
}

function filter(list, func) {
	var result = [];
	func = func || function(v) {return v};
	map(list, function(v) { if (func(v)) result.push(v) } );
	return result;
}

function isUndefined(v) { var undef; return v===undef }

// DOM
var DOM = {
	
	getElem: function(elem) {
		if (document.getElementById) {
			if (typeof elem == "string") {
				elem = document.getElementById(elem)
				if (elem===null) return false //throw 'cannot get element: element does not exist'
			} else if (typeof elem != "object") 
				return false //throw 'cannot get element: invalid datatype'
		} else 
			return false //throw 'cannot get element: unsupported DOM'
		return elem
	},
	
	hasClass: function(elem, className) { 
		return DOM.getElem(elem).className.split(' ').has(className) 
	},
	
	getElementsByClass: function(className, tagName, parentNode) {
		parentNode = !isUndefined(parentNode)? DOM.getElem(parentNode) : document;
		if (isUndefined(tagName)) tagName = '*'
		return filter(parentNode.getElementsByTagName(tagName),
			function(elem) { return DOM.hasClass(elem, className) })
	},
	
	listen: function(event, elem, func) {
		elem = DOM.getElem(elem)
		if (elem) {
			if (elem.addEventListener)  // W3C DOM
				elem.addEventListener(event,func,false)
			else if (elem.attachEvent)  // IE DOM
				elem.attachEvent('on'+event, function(){ func(new W3CDOMEvent(elem)) } )
			else 
				return false //throw 'cannot add event listener'
		}
	},
	
	mlisten: function(event, elem_list, func) { 
		map(elem_list, function(elem) { DOM.listen(event, elem, func) }) 
	},
	
	cancelEvent: function(e) { e.preventDefault() }
	
}

function W3CDOMEvent(currentTarget) {
	this.currentTarget  = currentTarget
	this.preventDefault = function() { window.event.returnValue = false }
	return this
}

// FAKE MOUSEOVER
var FakeMouseOver = {
	assign: function(elem, classe) {
		elem = DOM.getElem(elem)
		if (elem) {
			DOM.listen('mouseover', elem, function() { elem.className += " " + classe })
			DOM.listen('focus', elem, function() { elem.className += " " + classe })
			DOM.listen('mouseout', elem, function() { elem.className = elem.className.replace(classe, "") })
			DOM.listen('blur', elem, function() { elem.className = elem.className.replace(classe, "") })
		}
	},
	mAssign: function(elem_list, classe) { 
		map(elem_list, function(elem) { FakeMouseOver.assign(elem, classe) }) 
	}
}

// POPUP
var Popup = {
	_POPUP_FEATURES: '',
	raw: function(url, target, features) {
		if (isUndefined(features)) features = Popup._POPUP_FEATURES
		if (isUndefined(target)) target= '_blank'
		var theWindow = window.open(url, target, features)
		theWindow.focus()
		return theWindow
	},
	'link': function(src, features) {
		return Popup.raw(src.getAttribute('href'), src.getAttribute('rel') || '_blank', features);
	},
	'event': function(e) { 
		Popup.link(e.currentTarget); e.preventDefault() 
	},
	eventFeatures: function(features) {
		return function(e) { Popup.link(e.currentTarget, features); e.preventDefault() }
	},
	openImage: function(src, width, height) { 
		return Popup.link(src, 'width=' + (width + 20) + ',height=' + (height + 20) + ',top=' + ((screen.width - width + 20) / 2) + ',left=' + ((screen.height - height + 20) / 2) + ',scrollbars=0,location=0,statusbar=0,menubar=0')
	},
	openImageF: function(width, height) { 
		return function(e) { Popup.link(e.currentTarget, 'width=' + (width + 20) + ',height=' + (height + 20) + ',top=' + ((screen.width - width + 20) / 2) + ',left=' + ((screen.height - height + 20) / 2) + ',scrollbars=0,location=0,statusbar=0,menubar=0'); e.preventDefault() }
	},
	closeWindow: function(e) { e.preventDefault(); window.close() }
}

// GERAL
var Geral = {
	blnSendForm: false,
	voltarPagina: function(e) { e.preventDefault(); window.history.back() },
	preventClick: function(e) { 
		if (!Geral.blnSendForm) Geral.blnSendForm = true
		else { alert('O formulário já está sendo processado. Por favor, aguarde alguns instantes.'); e.preventDefault() }
	},
	
	iniciar: function() {
		
		var o, strPagina = window.location.href
		strPagina = strPagina.substr(strPagina.lastIndexOf("/") + 1).toLowerCase()
		
		if (/popup_/.test(strPagina)) { 
			DOM.listen('click', 'fechar', Popup.closeWindow)
		} else {
			if (o = DOM.getElem('f-restrita')) {
				var oText = document.createTextNode('Enviar')
				var oA = document.createElement('a')
				var oInput = DOM.getElementsByClass('submit', 'input', o)[0]
				oA.setAttribute('href', '#')
				oA.appendChild(oText)
				oInput.parentNode.insertBefore(oA, oInput)
				oInput.parentNode.removeChild(oInput)
				DOM.listen('click', oA, function(e) { e.preventDefault(); o.submit() })
			}
			DOM.listen('click', DOM.getElem('ct-inferior').getElementsByTagName('a')[0], Popup.event)
		} 
		
		if (/empresa.asp/.test(strPagina)) { 
			DOM.listen('click', 'a-fotoempresa1', Popup.openImageF(500, 330))
			DOM.listen('click', 'a-fotoempresa2', Popup.openImageF(455, 289))
			DOM.listen('click', DOM.getElem('l-links').getElementsByTagName('a')[1], Popup.eventFeatures('width=600,height=500,top=50,left=50,scrollbars=1,resizable=1,menubar=1'))
		} else 
		
		if (/noticias.asp/.test(strPagina))
			FakeMouseOver.mAssign(DOM.getElem('imagens').getElementsByTagName('li'), 'over')	
		
	}
}

DOM.listen('load', window, Geral.iniciar)