// 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('altKey,ctrlKey,shiftKey,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 addLoadEvent(fn) {
	var w = getEventModel()=="DOM" && !window.addEventListener ? document : window;
		return addEvent(w, 'load', fn, true)
}

// -- Custom
var _Custom = {
	
	Fotos: {
		
		oFotos: null,
		iAtual: 0, 
		iProxima: 0,
		mudarFoto: function() {
			addClass(_Custom.Fotos.oFotos[_Custom.Fotos.iAtual], 'hidden')
			_Custom.Fotos.iAtual = (_Custom.Fotos.iAtual == _Custom.Fotos.oFotos.length - 1) ? 0 : _Custom.Fotos.iAtual + 1
			remClass(_Custom.Fotos.oFotos[_Custom.Fotos.iAtual], 'hidden')
		},
		init: function() {
			_Custom.Fotos.oFotos = getAll('li', 'PanelPromocoes')
			if (_Custom.Fotos.oFotos.length > 1) {
				addClass(getAll('body')[0], 'script')
				each(_Custom.Fotos.oFotos, function(el) { addClass(el, 'hidden') })
				remClass(_Custom.Fotos.oFotos[0], 'hidden')
				setInterval("_Custom.Fotos.mudarFoto()", 6000)
			}
		}
		
	}, 
	
	initialize: function() {
		
		if ((o = getElem('PanelPromocoes'))) _Custom.Fotos.init()
		
		addEventDict(getAll('object', 'CtSuperior'), { 
			'mouseover': function(e) { addClass(e.currentTarget.parentNode, 'hover') },
			'mouseout': function(e) { remClass(e.currentTarget.parentNode, 'hover') }
		}); 

	}
}