function addEventToObject(obj, evt, func) {
	var oldhandler = obj[evt];
	obj[evt] = (typeof obj[evt] != 'function') ? func : function(){oldhandler();func();};
}

function removeEventFromObject(obj, evt) {
	var oldhandler = obj[evt];
	obj[evt] = null;
}

Object.prototype.bindWithArguments = function(object) {
    var __method = this;
    var args = [];
    for (var i=0,len=arguments.length-1; i<len; i++) { args[i] = arguments[i+1]; }
    return function() { __method.apply(object, args);};
};

function ensureElementFromObject(el,again){ // a simple IE fix
	// if not IE6 return
	if(!window.attachEvent) {return;}
	if((el.getAttribute('elementFromObject') != 'true') || (again == true)){ 
		for(property in Object) { el[property] = Object[property]; }
		el.setAttribute('elementFromObject','true');
	}
}

function $c(myClass,myObject,myTag) { myObject=myObject||document;
	if (!myObject.length) { myObject = [myObject]; }
	var elements = [];
	for(var i = 0; i<myObject.length; i++) { 
		e = myObject[i];
		if(e.getElementsByTagName) {
			var children = e.getElementsByTagName(myTag || '*');
			for (var j = 0; j<children.length; j++) {
				var child = children[j];
				if(child.className&&(new RegExp('\\b'+myClass+'\\b').test(child.className))) { elements.push(child); }
			}
		}
	}
	return elements;
}

Object.prototype.addClass = function(class_name) {
	if (this.className !== '') {this.className += ' ' + class_name;}
	else {this.className = class_name;}
};
Object.prototype.removeClass = function(class_name) {
	var oldClass = this.className;
	var re = new RegExp('\\s?'+class_name+'\\b');
	if (oldClass.indexOf(class_name) != -1) {this.className = oldClass.replace(re,'');}
};
Object.prototype.hasClass = function(class_name) {
	var re = new RegExp('(^|\\s+)'+class_name+'(\\s+|$)');
	if (this.getAttributeNode("class") !== null) {
		return re.test(this.getAttributeNode("class").value);
	} else if (this.className){
		return re.test(this.className);
	} else {
		return false;
	}
};

var Browser = {
	isSafari1: function() {
		var agent = navigator.userAgent.toLowerCase();
		if(agent.indexOf('safari') != -1 && !Browser.isSafari2()) {return true;}
	},
	isSafari2: function() {
		var agent = navigator.userAgent.toLowerCase();
		if(agent.indexOf('safari') != -1 && (parseFloat(agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).substring(0,agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).indexOf(' '))) >=  300)) {return true;}
	},
	isIE7: function() {
		var agent = navigator.userAgent.toLowerCase();
		if(agent.indexOf('msie 7.0') != -1) {return true;}
	},
	isIE: function() {
		var agent = navigator.userAgent.toLowerCase();
		if(agent.indexOf('msie') != -1) {return true;}
	}
};

/***( visual effects )**********************************************/


var fade = true; // emergency toggle

Object.prototype.Fade = function(duration,startOpacity,endOpacity,interval,step,curve) {
	//if(fade) {

		this.interval = interval;
		this.duration = duration;
		this.step = step;
		
		this.setOpacity = function (o) {
		//alert(this.id+": "+o);
		    this.style.opacity = (o / 101);
		    this.style.MozOpacity = (o / 100);
		    this.style.KhtmlOpacity = (o / 100);
		    this.style.filter = "alpha(opacity=" + o + ")";
		};
		this.setOpacity(startOpacity);
 
		if(startOpacity == 0) {this.style.visibility = 'visible';}


		if(Browser.isIE()) {
			if(this.id == 'newfeatureinfo') {
				this.style.zIndex = '100';
				var movieframe = document.getElementById('movieframe');
				movieframe.style.height = this.offsetHeight + 'px';
			} else if(!(this.id == 'sharebug')&&!(this.id == 'newfeatureinfo')&&!(this.id == 'gallery')) {
				this.style.height = this.offsetHeight+'px';
			}
			this.style.zoom = '1';
			//step = step * 2;
		}
		var delta = startOpacity;
		var newOpacity = startOpacity;
		this.changeOpacity = function (newOpacity,endOpacity) {
			var changeOpacityST = null;
			
			var stepDuration = Math.round(this.duration/this.step);
			this.duration -= stepDuration;
			this.step--;
			if (newOpacity < endOpacity) {
				if (newOpacity <= endOpacity) {
					delta = (this.step > 0) ? (endOpacity - newOpacity)/this.step : 0;
					newOpacity = Math.max(startOpacity, Math.min(newOpacity+delta, endOpacity));
					this.setOpacity(newOpacity);
					changeOpacityST = window.setTimeout(this.changeOpacity.bindWithArguments(this,newOpacity,endOpacity),stepDuration);
				}
			} else if (newOpacity > endOpacity) {
				if (newOpacity >= endOpacity) {
					delta = (this.step > 0) ? (newOpacity - endOpacity)/this.step : 0;
					newOpacity = Math.min(startOpacity, Math.max(newOpacity-delta, endOpacity));
					this.setOpacity(newOpacity);
					changeOpacityST = window.setTimeout(this.changeOpacity.bindWithArguments(this,newOpacity,endOpacity),stepDuration);
				}		
			} else if (newOpacity == endOpacity) {
				this.setOpacity(newOpacity);
				clearTimeout(changeOpacityST);
			}
		};
		this.changeOpacity(newOpacity,endOpacity);

/*
	} else {
		this.style.visibility = 'visible';
		this.setOpacity = function () {
	    	this.style.opacity = (100 / 101);
	    	this.style.MozOpacity = (100 / 100);
	    	this.style.KhtmlOpacity = (100 / 100);
	    	this.style.filter = "alpha(opacity=100)";
		};
	}
*/
	return true;
};


Object.prototype.ScaleToHeight = function(duration,startHeight,endHeight,step) {
	this.interval = 1; // initial interval
	this.duration = duration;
	this.step = step;
	this.setHeight = function(h) {this.style.height = h+"px"; };
	finishedScale = false;
	
	var delta = startHeight;
	var newHeight = startHeight;
	this.changeHeight = function (newHeight,endHeight) {
		var changeHeightST = null;
		var stepDuration = Math.round(this.duration/this.step);
		this.duration -= stepDuration;
		this.step--;
		if (newHeight < endHeight) {
			if(Browser.isSafari1()) {
				this.setHeight(endHeight);
			} else {
				delta = (this.step > 0) ? (endHeight - newHeight)/this.step : 0;
				newHeight = Math.max(startHeight, Math.min(newHeight+delta, endHeight));
				this.setHeight(newHeight);
				changeHeightST = window.setTimeout(this.changeHeight.bindWithArguments(this,newHeight,endHeight),stepDuration);
			}
		}
		else if (newHeight > endHeight) {
			if(Browser.isSafari1()) {
				this.setHeight(endHeight);
			} else {
				delta = (this.step > 0) ? (newHeight - endHeight)/this.step : 0;
				newHeight = Math.min(startHeight, Math.max(newHeight-delta, endHeight));
				this.setHeight(newHeight);
				changeHeightST = window.setTimeout(this.changeHeight.bindWithArguments(this,newHeight,endHeight),stepDuration);
			}
		} else if (newHeight == endHeight) {
			finishedScale = true;
			this.setHeight(endHeight);
			clearTimeout(changeHeightST);
		}
	};
	this.changeHeight(newHeight,endHeight);
};

var contentheaderdivs = [];
var contenttextdivs = [];
var fadeimgs = [];
var currentimg = 0;
var highestzindex = 1;
var finishedScale = false;
//var onchevron;

function InitFadeWithText() {
	var headertext = document.getElementById('headertext');
	var contentdivs = headertext.getElementsByTagName('div');
	for(i=0;i<contentdivs.length;i++) {                                                                                                                                                                                                
		if(!(contentdivs[i].id.search(/contentheader/i))) {
			contentheaderdivs.push(contentdivs[i]);
		} else {
			contenttextdivs.push(contentdivs[i]);
		}
	}
	if(InitFadeWithText.arguments) {
		//onchevron = InitFadeWithText.arguments[0];
		var fadecontainer = document.getElementById(InitFadeWithText.arguments[0]);
		for(i=1;i<InitFadeWithText.arguments.length;i++) {
			fadecontainer.innerHTML += InitFadeWithText.arguments[i];
		}
		var fade = fadecontainer.lastChild;
		var fadeclass = fade.className;
		fadedivs = $c(fadeclass,'','*');
		for(i=1;i<fadedivs.length;i++) {
			fadedivs[i].style.visibility = 'hidden';
			fadedivs[i].style.zIndex = '0';
		}
		fadedivs[0].style.zIndex = '1';
	}
	
	for(i=1;i<contenttextdivs.length;i++) {
		contenttextdivs[i].style.visibility = 'hidden';
		contenttextdivs[i].style.height = '0px';
		contenttextdivs[i].style.overflow = 'hidden';
	}
	contenttextdivs[0].style.overflow = 'hidden';
	
	addOnclick();
}

function addOnclick() {
	for(j=0;j<contentheaderdivs.length;j++) {
		addEventToObject(contentheaderdivs[j],'onclick',processTextAndFade);
	}
}

function processTextAndFade(ev) {
	if (!ev) { ev = window.event; }
	if (ev.stopPropagation) { ev.stopPropagation(); } else { ev.cancelBubble = true; }
	if (ev.preventDefault) { ev.preventDefault(); } else { ev.returnValue = false; }
	
	for(j=0;j<contentheaderdivs.length;j++) {
		removeEventFromObject(contentheaderdivs[j],'onclick');
	}
	
	var clickedLink = (window.event) ? window.event.srcElement : ev.target;
	while (!clickedLink.tagName || clickedLink.tagName.toLowerCase() != "a") {
		clickedLink = clickedLink.parentNode;
	}
	var clickeddiv = clickedLink.parentNode;
	var section = clickeddiv.id.split('_')[1];

	var contenttext = document.getElementById('contenttext_'+section);
	var currentheight = contenttext.offsetHeight;
	for(i=0;i<contenttextdivs.length;i++) {
		var contenttextdown = document.getElementById('contenttext_'+i);
		var contenttextdownheight = contenttextdown.offsetHeight;
		//alert('contenttextdownheight: '+contenttextdownheight+'\nfor: '+i);
		if(contenttextdownheight > 0) {
			ensureElementFromObject(contenttextdown);
			contenttextdown.ScaleToHeight(500,contenttextdownheight,0,10);
		}
	}

	contenttext.style.visibility = 'visible';
	var contentheight = 0;
	//= contenttext.offsetHeight;
	var contenttextchildren = contenttext.childNodes;
	
	for(i=0;i<contenttextchildren.length;i++) {
		if(isFinite(contenttextchildren[i].offsetHeight))
			contentheight += contenttextchildren[i].offsetHeight;
	}

	var newimg;
	var oldimg;
	var oldimgnum = currentimg;
	
	oldimg = document.getElementById('headerimg_'+currentimg);
	
	var oldheaderdiv = document.getElementById('contentheader_'+oldimgnum);
	var currentheaderdiv = document.getElementById('contentheader_'+section);
	var oldheader = oldheaderdiv.getElementsByTagName('a')[0];
	var currentheader = currentheaderdiv.getElementsByTagName('a')[0];
	ensureElementFromObject(oldheader);
	ensureElementFromObject(currentheader);
	//alert('contenttext.offsetHeight: '+currentheight+'\ncontentheight: '+contentheight);
	
	if (currentheight == contentheight) {
		ensureElementFromObject(contenttext);
		//contenttext.ScaleToHeight(500,contentheight,0,10);
		newimg = document.getElementById('headerimg_0');
		currentimg = 0;
		if(currentheader.hasClass('hi')) {currentheader.removeClass('hi');}
	} else {
		ensureElementFromObject(contenttext);
		contenttext.ScaleToHeight(500,0,contentheight,10);
		newimg = document.getElementById('headerimg_'+section);
		currentimg = section;
		if(oldheader.hasClass('hi')) {oldheader.removeClass('hi');}
		currentheader.addClass('hi');
	}

	if(oldimgnum == 0 && currentimg == 0) {}
	else{
		highestzindex += 1;
		newimg.style.zIndex = highestzindex;
		ensureElementFromObject(oldimg);
		ensureElementFromObject(newimg);
		oldimg.Fade(600,100,0,1,10);
		newimg.Fade(600,0,100,1,10);
	}
	
	atScaleFinish();
	//window.setTimeout('addOnclick()',1000);

	
	return false;
}

function atScaleFinish() {
	var scaleFinishST = null;
	if(finishedScale) {addOnclick(); clearTimeout(scaleFinishST);}
	else {scaleFinishST = window.setTimeout('atScaleFinish()',500);}
}

var grillfadeimg;

function initGrillFade() {
	grillfadeimg = document.getElementById('grillfadeimg');
	addEventToObject(grillfadeimg,'onmouseover',processGrillFadeOff);
	addEventToObject(grillfadeimg,'onmouseout',processGrillFadeOn);
}

function processGrillFadeOff(ev) {
	grillfadeimg.setAttribute('src','http://images.apple.com/br/ipodhifi/images/indexfamilyoff20060228.jpg');	
}

function processGrillFadeOn(ev) {
	grillfadeimg.setAttribute('src','http://images.apple.com/br/ipodhifi/images/indexfamilyon20060228.jpg');
}

