// Array
Array.prototype.indexOf = function(value, start, strict) {
	start = start || 0;
	for (var i=start; i<this.length; i++) {
		var item = this[i];
		if (strict ? item === value : isRegexp(value) ? value.test(item) : isFunction(value) ? value(item) : item == value)
			return i;
	}
	return -1;
}

Array.prototype.contains = function(value,strict) {
	return this.indexOf(value,0,strict) !== -1;
}

Array.prototype.include = Array.prototype.contains;

Array.prototype.count = function(value, strict) {
	var pos, start = 0, count = 0;
	while ((pos = this.indexOf(value, start, strict)) !== -1) { start = pos + 1; count++; }
	return count;
}

Array.prototype.merge = function() {
	var a = [];
	for (var i=0; i<arguments.length; i++)
		for (var j=0; j<arguments[i].length; j++)
			a.push(arguments[i][j]);
	for (var i=0; i<a.length; i++) this.push(a[i]);
	return this
}

Array.prototype.map = function(fn) { return map(this, fn) }

Array.prototype.remove = function(value,all,strict) {
	while (this.contains(value,strict)) {
		this.splice(this.indexOf(value,0,strict),1);
		if (!all) break
	}
	return this;
}

if (!Array.prototype.push) Array.prototype.push = function() {
	for (var i=0; i<arguments.length; i++) this[this.length] = arguments[i];
	return this.length;
}

if (!Array.prototype.splice) Array.prototype.splice = function (s, d) {
	var max = Math.max, min = Math.min, a = [], e, i = max(arguments.length - 2, 0), k = 0, l = this.length, n, v, x;  

	s = s || 0;
	if (s < 0) { s += l; }
	s = max(min(s, l), 0);  
	d = max(min(isNumber(d) ? d : l, l - s), 0);	
	v = i - d;
	n = l + v;
	while (k < d) {
		e = this[s + k];
		if (!isUndefined(e)) { a[k] = e; }
		k += 1;
	}
	x = l - s - d;
	if (v < 0) {
		k = s + i;
		while (x) { this[k] = this[k - v]; k += 1; x -= 1; }
		this.length = n;
	} else if (v > 0) {
		k = 1;
		while (x) { this[n - k] = this[l - k]; k += 1; x -= 1; }
	}
	for (k = 0; k < i; ++k) {
		this[s + k] = arguments[k + 2];
	}
	return a;
}

function __strfn(args, fn) {
	function quote(s) { return '"' + s.replace(/"/g,'\\"') + '"' }
	if (!/\breturn\b/.test(fn)) {
		fn = fn.replace(/;\s*$/, '');
		fn = fn.insert(fn.lastIndexOf(';')+1, ' return ');
	}
	return eval('new Function(' + map(args.split(/\s*,\s*/), quote).join() + ',' + quote(fn) + ')' );
}

function each(list, fn) {
	if (typeof(fn)=='string') return each(list, __strfn('item,idx,list', fn));
	for (var i=0; i < list.length; i++) fn(list[i], i, list);
}

function map(list, fn) {
	if (typeof(fn)=='string') return map(list, __strfn('item,idx,list', fn));
	var result = [];
	fn = fn || function(v) {return v};
	for (var i=0; i < list.length; i++) result.push(fn(list[i], i, list));
	return result;
}

function filter(list, fn) {
	if (typeof(fn)=='string') return filter(list, __strfn('item,idx,list', fn));
	var result = [];
	fn = fn || function(v) {return v};
	map(list, function(item,idx,list) { if (fn(item,idx,list)) result.push(item) } );
	return result;
}

function reduce(list, initial, fn) {
	if (undef(fn)) {
		fn = initial;
		initial = window.undefined; 
	}
	if (typeof(fn)=='string') return reduce(list, initial, __strfn('a,b', fn));
	if (isdef(initial)) list.splice(0,0,initial);
	if (list.length===0) return false;
	if (list.length===1) return list[0];
	var result = list[0];
	var i = 1;
	while(i<list.length) result = fn(result,list[i++]);
	return result;
}

// String
String.prototype.insert = function(idx,value) { return this.slice(0,idx) + value + this.slice(idx) }

// Misc
function isArray(a)	 { return isObject(a) && a.constructor == Array }
function isFunction(a)  { return typeof a == 'function' }
function isNumber(a)	{ return typeof a == 'number' && isFinite(a) }
function isObject(a)	{ return (a && typeof a == 'object') || isFunction(a) }
function isRegexp(a)	{ return a && a.constructor == RegExp }
function isString(a)	{ return typeof a == 'string' }
function isUndefined(a) { return typeof a == 'undefined' }
function isList(o) { return o && isObject(o) && (isArray(o) || o.item) }
function isElement(o, strict) {
	return o && isObject(o) && ((!strict && (o==window || o==document)) || o.nodeType == 1)
}

function undef(v) { return  isUndefined(v) }
function isdef(v) { return !isUndefined(v) }

function list(s, sep) {
	if (!isString(sep) && !isRegexp(sep))
		sep = sep? ',' : /\s*,\s*/;
	return s.split(sep);
}

// DOM
function getElem(el) {
	var ge = (document.getElementById && function(id){return document.getElementById(id)} ) ||
		(document.all && function(id){return document.all[id]} ) ||
		function(){return null};
	return isElement(el)? el : isString(el) ? ge(el) : null;
}

function getElemList(el) {
	if (isElement(el)) return [el];
	else if (isString(el) ) return getElemList(el.split(/\s+/g)); 
	else if (isList(el) ) {
		var r = map(el, getElem);
		return filter(r, isElement).length==r.length? r : null;
	}
	else return null;
}

function filterElementNodes(nodeList, tagName) {
	return filter(nodeList, function(n){
	return n.nodeType==1 && n.nodeName!='!' && 
		(undef(tagName) || tagName == '*' || n.nodeName.toUpperCase()==tagName.toUpperCase())
	})
}

function getAll(tagName, parent) {
	parent = isdef(parent)? getElem(parent) : document;
	if (undef(tagName)) tagName = '*';
	var r = parent.getElementsByTagName(tagName);
	return r.length || tagName != '*'?  map(r) :
		reduce(filterElementNodes(parent.childNodes), [], function(l,c){
			return l.merge([c], getAll(tagName, c))
		})
}

function getElementsByClass(className, tagName, parentNode) {
	var noClassTags = list('#comment,BASE,BASEFONT,HEAD,HTML,META,PARAM,SCRIPT,STYLE,TITLE');
	return filter(getAll(tagName,parentNode),
		function(elem) {
			return !noClassTags.include(elem.nodeName) && hasClass(elem, className) 
		});
}

function hasClass(elem, className) {
	return getElem(elem).className.split(' ').count(className);
}

function remClass(elem, className, all) {
	elem = getElem(elem);
	elem.className = elem.className.split(' ').remove(className,all).join(' ');
}

function addClass(elem, className, allowDuplicates) {
	elem = getElem(elem);
	if (!allowDuplicates && elem.className.split(' ').contains(className)) return;
	elem.className += (elem.className.length?' ':'') + className;
}

function swapClass(e, c) {
	if (hasClass(e,c)) remClass(e,c); else addClass(e,c);
	return !!hasClass(e,c);
}

// Events
var ALLOW_LEGACY_EVENTS = true;

function getEventModel() {
	var d = document;
	return d.addEventListener? 'DOM' : d.attachEvent ? 'IE' : 'legacy';
}

function IE_Event(currentTarget) {
	this.currentTarget   = currentTarget;
	this.preventDefault  = function() { window.event.returnValue  = false }
	this.stopPropagation = function() { window.event.cancelBubble = true }
	this.target  = window.event.srcElement;
	var self = this;
	list('type,altKey,ctrlKey,shiftKey,keyCode,clientX,clientY').map(function(p){ self[p] = event[p] });
	return this;
}

function Legacy_Event(currentTarget) {
	this.currentTarget   = currentTarget;
	return this;
}

function addEvent(els, ev, fn, capture) {
	if (!ALLOW_LEGACY_EVENTS && getEventModel()=='legacy') return false;
	if (undef(capture)) capture = true;
	function DOM_addEvent   (el, ev, fn, capture) { el.addEventListener(ev, fn, capture) }
	function legacy_addEvent(el, ev, fn) {
		var evn = 'on'+ev;
		if (!el[evn] || undef(el[evn].handlers)) {
			el[evn] = function() {
				map(el[evn].handlers, function(h){  h( new (el.attachEvent?IE_Event:Legacy_Event)(el) ) });
			}
			el[evn].handlers = [];
		}
		el[evn].handlers.push(fn);
	}
	var addEventFn = getEventModel()=='DOM'? DOM_addEvent : legacy_addEvent;
	map(getElemList(els), function(el) { addEventFn(el, ev, fn, capture) });
}

function addEventDict(els, evDict, capture) {
	for (ev in evDict) addEvent(els, ev, evDict[ev], capture);
}

function remEvent(els, ev, fn, capture) {
	if (!ALLOW_LEGACY_EVENTS && getEventModel()=='legacy') return false;
	if (undef(capture)) capture = true;
	map(getElemList(els), function(el) {
		if(getEventModel()=='DOM') el.removeEventListener(ev, fn, capture);
		else el['on'+ev].handlers.remove(fn);
	});
}

function addLoadEvent(fn) {
	var w = getEventModel()=="DOM" && !window.addEventListener ? document : window;
		return addEvent(w, 'load', fn, true)
}

// -- 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() }
	},
	'close': function(e) { e.preventDefault(); window.close() }
}

// -- Form
var Form = {
	_FORM_SENT: false,
	unlock: function() { Form._FORM_SENT = false },
	lock: function(e) { 
		if (Form._FORM_SENT) { 
			alert('O formulário já está sendo processado. Por favor, aguarde alguns instantes.'); 
			e.preventDefault() 
		} else {
			Form._FORM_SENT = true
			setTimeout("Form.unlock()", 15000)
		}
	}
}

// -- Page
var Page = {
	_currentLocation: window.location.href.toLowerCase(),
	
	getCurrent: function(url) {
		var sCurrent 
		url = url || Page._currentLocation
		sCurrent = url.replace('http://' + window.location.host, '')
		sCurrent = (sCurrent.indexOf('.asp') != -1) ? sCurrent.substring(0, sCurrent.indexOf('.asp') + 4) : (sCurrent.indexOf('?') != -1) ? sCurrent.substring(0, sCurrent.lastIndexOf('?')) : (sCurrent.indexOf('#') != -1) ? sCurrent.substring(0, sCurrent.lastIndexOf('#')) : sCurrent
		sCurrent += (sCurrent.charAt(sCurrent.length - 1) == '/') ? 'default.asp' : ''
		return sCurrent
	},
	
	isCurrent: function(page) { 
		return (Page.getCurrent().substring(Page.getCurrent().length - page.length) == page)
	}, 
	
	inCurrent: function(page) { 
		var re = new RegExp(page)
		return re.test(Page._currentLocation)
	}, 
	
	'back': function(e) { e.preventDefault(); window.history.back() }
}

// -- Custom
var _Custom = {
	
	addFakeHover: function(els, classe) {
		classe = classe || 'over'
		addEventDict(els, 
			{ 
				'mouseover' : function(e) { addClass(e.currentTarget, classe) },
				'focus' : function(e) { addClass(e.currentTarget, classe) },
				'mouseout' : function(e) { remClass(e.currentTarget, classe) },
				'blur' : function(e) { remClass(e.currentTarget, classe) }
			}
		)
	},
	
	
	fecharMenu: function(el) { if (!hasClass(el.parentNode, 'aberto')) addClass(el, 'fechado') }, 
	
	fecharTodosMenus: function() {
		oMenus = filter(getAll('ul', getElem('menu')), function(el) { return (el.parentNode.parentNode == getElem('menu') || el.parentNode.parentNode.getAttribute('id') == 'i-prod') })
		each(oMenus, _Custom.fecharMenu)
	}, 
	
	imprimir: function() {
		var oInput, oP

		each(getElementsByClass('ct-impressao'), function(elConteiner) {
															
			oInput = document.createElement('input')
			oInput.setAttribute('type', 'button')
			oInput.setAttribute('value', 'Imprimir')
			oInput.setAttribute('alt', 'Imprimir')
			oInput.setAttribute('id', 'fechar')
			
			oP = document.createElement('p')
			oP.className = 'submit'
			
			oP.appendChild(oInput)
			if (elConteiner.hasChildNodes)
				elConteiner.insertBefore(oP, elConteiner.firstChild)
			else
				elConteiner.appendChild(oP)
				
			each(getElementsByClass('legenda', 'p', elConteiner), function(el) { el.parentNode.removeChild(el) })
			
			addEvent(oInput, 'click', function() { window.print() })
			
		})
		
	},
	
	popupImagem: function(e) { 
		var sDimensoes = e.currentTarget.getAttribute('rev')
		var iWidth = (sDimensoes) ? parseInt(sDimensoes.substring(0, sDimensoes.indexOf(';'))) : 380
		var iHeight = (sDimensoes) ? parseInt(sDimensoes.substr(sDimensoes.indexOf(';') + 1)) : 254
		var iScrollbars = (iHeight <= 395) ? 0 : 1
		iWidth += (iScrollbars == 1) ? 57 : 40 /* Para a barra de rolagem */
		iHeight = (iHeight > 395) ? 395 : iHeight
		iHeight += 105
		var iTop = (screen.height - iHeight) / 2
		var iLeft = (screen.width - iWidth) / 2
		var sFeatures = 'width=' + iWidth + ',height=' + iHeight + ',top=' + iTop + ',left=' + iLeft + ',scrollbars=' + iScrollbars + ',location=0,statusbar=0,menubar=0'
		Popup.link(e.currentTarget, sFeatures); e.preventDefault() 
	}, 
	
	setSearchValue: function(oText, eventType) {
		var sTextoDefault = (window.location.href.indexOf('educacao') != -1) ? 'Pesquisar' : 'Pesquisar'
		if (eventType == 'in' && oText.value == sTextoDefault) oText.value = ''
		if (eventType == 'out' && oText.value == '') oText.value = sTextoDefault
	},
	
	show: function(el) {
		if ((o = getElem(el))) o.style.visibility = 'visible'
	},
	
	hide: function(el) {
		return function() { if ((o = getElem(el))) o.style.visibility = 'hidden' }
	},
	
	initialize: function() {
		var o
		var oMenuPrincipal, oHeadings, oSubListas, oAtivos, sShortHref
		var nTimeOut
		
		// Abre links com classe 'externo' em nova página
		addEvent(getElementsByClass('externo', 'a'), 'click', Popup.event)
	
		/* Pop-up */
		addEvent(getElementsByClass('popup', 'a'), 'click', Popup.eventFeatures('width=505, height=470, scrollbars=1, top=150, left=300'))
		
		if ((o = getElem('b-entrada'))) {
			
			// Entrada
			if (document.body.clientWidth && document.body.clientWidth <= 990) { addClass(o, 'x8') }
			_Custom.bannerPopup()
			
		} else if (!Page.inCurrent('popup_') && !Page.inCurrent('hotsite') && !Page.isCurrent('creditos.asp')) {
		
			// Menu
			oMenuPrincipal = getElem('menu')
			oItensPrincipais = filter(getAll('a', oMenuPrincipal), function(el) { return (el.parentNode.parentNode == oMenuPrincipal || el.parentNode.parentNode.getAttribute('id') == 'i-prod') })
			oMenus = getElementsByClass('submenu', 'ul', oMenuPrincipal)
			
				// efeito rollover
				addEventDict(filter(getAll('li', oMenuPrincipal), function(el) { return ((el.parentNode == oMenuPrincipal || el.parentNode.getAttribute('id') == 'i-prod') && !hasClass(el, 'aberto') && filter(getElementsByClass('principal', 'a', el), function(elem) { return hasClass(elem, 'ativo') }).length == 0) }), 
					{ 
						'mouseover': function(e) { var o; if (o = getElementsByClass('principal', 'a', e.currentTarget)) if (o.length > 0) { if (!hasClass(o[0].parentNode, 'aberto')) addClass(o[0], 'ativo') } },
						'mouseout': function(e) { var o; if (o = getElementsByClass('principal', 'a', e.currentTarget)) if (o.length > 0) remClass(o[0], 'ativo') }
					}
				)
				
				// abre/fecha submenus
				addEventDict(oItensPrincipais, 
					{ 
						'mouseover': function(e) { var o; clearTimeout(nTimeOut); _Custom.fecharTodosMenus(); o = e.currentTarget.parentNode.getElementsByTagName('ul'); if (o.length > 0) remClass(o[0], 'fechado') },
						'mouseout': function(e) { var o; o = e.currentTarget.parentNode.getElementsByTagName('ul'); if (o.length > 0) { src = o[0]; nTimeOut = setTimeout('_Custom.fecharMenu(src)', 500) } }
					}
				)
		
				// mantém submenu aberto quando o ponteiro está sobre ele
				addEventDict(oMenus, 
					{ 
						'mouseover': function(e) { clearTimeout(nTimeOut); remClass(e.currentTarget.parentNode.getElementsByTagName('ul')[0], 'fechado') },
						'mouseout': function(e) { _Custom.fecharMenu(e.currentTarget) }
					}
				)
				
				// Fátima Life
				if ((o = getElem('hotsite-life'))) addEvent(getAll('a', o), 'click', Popup.eventFeatures('width=800,height=620'))
	
				addClass(getElem('ct-menu'), 'mf'); 
				_Custom.fecharTodosMenus(); 
				_Custom.addFakeHover(getAll('li', getElementsByClass('l-planos', 'ul')[0]))
				
		}
		
		// Cria botão Imprimir
		_Custom.imprimir()
		
		// Abre a página de créditos em uma popup
		if ((o = getElem('a-creditos')))
			addEvent(o, 'click', Popup.eventFeatures('width=350,height=357,top=' + ((screen.height - 353) / 2) + ',left=' + ((screen.width - 350) / 2) + ',scrollbars=0,location=0,statusbar=0,menubar=0'))
		
		// Abre fotos da direita em popup
		if ((o = getElem('l-fotos'))) 
			addEvent(filter(getAll('a', o), function(el) { return !hasClass(el, 'interno') }), 'click', _Custom.popupImagem)
		
		// Seta valor do campo de pesquisa
		if ((o = getElem('ct-pesquisa'))) {
			addEventDict(
				filter(getAll('input', o), function(el) { return el.getAttribute('type') == 'text' }), 
				{ 
					click : function(e) { return _Custom.setSearchValue(e.currentTarget, 'in') }, 
					blur : function(e) { return _Custom.setSearchValue(e.currentTarget, 'out') } 
				}
			)
		}

		// Popup da página inicial
			if ((o = getElem('popup'))) {
				var oA = document.createElement('a')
				oA.setAttribute('href', '#')
				oA.setAttribute('title', 'Fechar')
				oA.className = 'fechar'
				oA.appendChild(document.createTextNode('Fechar'))
				o.appendChild(oA)
				addEvent(oA, 'click', function(e) { e.preventDefault(); addClass(e.currentTarget.parentNode, 'hide') })
			}

		// Ações para formulários que enviam dados para banco ou por e-mail
		if (Page.isCurrent('faleconosco.asp') || Page.isCurrent('curriculo.asp') || (Page.inCurrent('vestibular/') && getElem('resumo')) || Page.isCurrent('juventude/cadastro.asp') || Page.isCurrent('bolsas_de_estudo.asp') || Page.isCurrent('vendaonline/planosdesaude/declaracao.asp') || Page.isCurrent('vendaonline/pessoaprotegida24h/cadastro.asp')) {
			addEvent(getAll('form'), 'submit', Form.lock)
		}
			
		// Abre fotos das notícias em popup
		if (Page.isCurrent('noticias.asp') || Page.isCurrent('eventos.asp'))
			if ((o = getElem('l-imagens')))
				addEvent(getAll('a', o), 'click', _Custom.popupImagem)
				
		// Saúde
		// Inicial
		if (Page.isCurrent('educacao/default.asp') || Page.isCurrent('saude/default.asp') || (Page.inCurrent('vendaonline/planosdesaude') && !Page.inCurrent('simulador') && !Page.inCurrent('popup'))) {
			// Popup 
			_Custom.bannerPopup()
		}
		
	}
}