/*

moo.fx, simple effects library built with prototype.js (http://prototype.conio.net).

by Valerio Proietti (http://mad4milk.net) MIT-style LICENSE.

for more info (http://moofx.mad4milk.net).

Sunday, March 05, 2006

v 1.2.3

*/



var fx = new Object();

//base

fx.Base = function(){};

fx.Base.prototype = {

	setOptions: function(options) {

	this.options = {

		duration: 500,

		onComplete: '',

		transition: fx.sinoidal

	}

	Object.extend(this.options, options || {});

	},



	step: function() {

		var time  = (new Date).getTime();

		if (time >= this.options.duration+this.startTime) {

			this.now = this.to;

			clearInterval (this.timer);

			this.timer = null;

			if (this.options.onComplete) setTimeout(this.options.onComplete.bind(this), 10);

		}

		else {

			var Tpos = (time - this.startTime) / (this.options.duration);

			this.now = this.options.transition(Tpos) * (this.to-this.from) + this.from;

		}

		this.increase();

	},



	custom: function(from, to) {

		if (this.timer != null) return;

		this.from = from;

		this.to = to;

		this.startTime = (new Date).getTime();

		this.timer = setInterval (this.step.bind(this), 13);

	},



	hide: function() {

		this.now = 0;

		this.increase();

	},



	clearTimer: function() {

		clearInterval(this.timer);

		this.timer = null;

	}

}



//stretchers

fx.Layout = Class.create();

fx.Layout.prototype = Object.extend(new fx.Base(), {

	initialize: function(el, options) {

		this.el = $(el);

		this.el.style.overflow = "hidden";

		this.iniWidth = this.el.offsetWidth;

		this.iniHeight = this.el.offsetHeight;

		this.setOptions(options);

	}

});



fx.Height = Class.create();

Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), {	

	increase: function() {

		this.el.style.height = this.now + "px";

	},



	toggle: function() {

		if (this.el.offsetHeight > 0) this.custom(this.el.offsetHeight, 0);

		else this.custom(0, this.el.scrollHeight);

	}

});



fx.Width = Class.create();

Object.extend(Object.extend(fx.Width.prototype, fx.Layout.prototype), {	

	increase: function() {

		this.el.style.width = this.now + "px";

	},



	toggle: function(){

		if (this.el.offsetWidth > 0) this.custom(this.el.offsetWidth, 0);

		else this.custom(0, this.iniWidth);

	}

});



//fader

fx.Opacity = Class.create();

fx.Opacity.prototype = Object.extend(new fx.Base(), {

	initialize: function(el, options) {

		this.el = $(el);

		this.now = 1;

		this.increase();

		this.setOptions(options);

	},



	increase: function() {

		if (this.now == 1 && (/Firefox/.test(navigator.userAgent))) this.now = 0.9999;

		this.setOpacity(this.now);

	},

	

	setOpacity: function(opacity) {

		if (opacity == 0 && this.el.style.visibility != "hidden") this.el.style.visibility = "hidden";

		else if (this.el.style.visibility != "visible") this.el.style.visibility = "visible";

		if (window.ActiveXObject) this.el.style.filter = "alpha(opacity=" + opacity*100 + ")";

		this.el.style.opacity = opacity;

	},



	toggle: function() {

		if (this.now > 0) this.custom(1, 0);

		else this.custom(0, 1);

	}

});



//transitions

fx.sinoidal = function(pos){

	return ((-Math.cos(pos*Math.PI)/2) + 0.5);

	//this transition is from script.aculo.us

}

fx.linear = function(pos){

	return pos;

}

fx.cubic = function(pos){

	return Math.pow(pos, 3);

}

fx.circ = function(pos){

	return Math.sqrt(pos);

}





//content

var bustcachevar=0 //bust potential caching of external pages after initial request? (1=yes, 0=no)

var loadstatustext="<div id='loading'><img src='http://www.monfx.com/wp-content/themes/grass/images/loading.gif' /></div>"



////NO NEED TO EDIT BELOW////////////////////////

var loadedobjects=""

var defaultcontentarray=new Object()

var bustcacheparameter=""



function ajaxpage(url, containerid, targetobj){

var page_request = false

if (window.XMLHttpRequest) // if Mozilla, Safari etc

page_request = new XMLHttpRequest()

else if (window.ActiveXObject){ // if IE

try {

page_request = new ActiveXObject("Msxml2.XMLHTTP")

} 

catch (e){

try{

page_request = new ActiveXObject("Microsoft.XMLHTTP")

}

catch (e){}

}

}

else

return false

var ullist=targetobj.parentNode.parentNode.getElementsByTagName("li")

for (var i=0; i<ullist.length; i++)

ullist[i].className=""  //deselect all tabs

targetobj.parentNode.className="selected"  //highlight currently clicked on tab

if (url.indexOf("#default")!=-1){ //if simply show default content within container (verus fetch it via ajax)

document.getElementById(containerid).innerHTML=defaultcontentarray[containerid]

return

}

document.getElementById(containerid).innerHTML=loadstatustext

page_request.onreadystatechange=function(){

loadpage(page_request, containerid)

}

if (bustcachevar) //if bust caching of external page

bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()

page_request.open('GET', url+bustcacheparameter, true)

page_request.send(null)

}



function loadpage(page_request, containerid){

if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))

document.getElementById(containerid).innerHTML=page_request.responseText

}



function loadobjs(revattribute){

if (revattribute!=null && revattribute!=""){ //if "rev" attribute is defined (load external .js or .css files)

var objectlist=revattribute.split(/\s*,\s*/) //split the files and store as array

for (var i=0; i<objectlist.length; i++){

var file=objectlist[i]

var fileref=""

if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding

if (file.indexOf(".js")!=-1){ //If object is a js file

fileref=document.createElement('script')

fileref.setAttribute("type","text/javascript");

fileref.setAttribute("src", file);

}

else if (file.indexOf(".css")!=-1){ //If object is a css file

fileref=document.createElement("link")

fileref.setAttribute("rel", "stylesheet");

fileref.setAttribute("type", "text/css");

fileref.setAttribute("href", file);

}

}

if (fileref!=""){

document.getElementsByTagName("head").item(0).appendChild(fileref)

loadedobjects+=file+" " //Remember this object as being already added to page

}

}

}

}



function savedefaultcontent(contentid){// save default ajax tab content

if (typeof defaultcontentarray[contentid]=="undefined") //if default content hasn't already been saved

defaultcontentarray[contentid]=document.getElementById(contentid).innerHTML

}



function startajaxtabs(){

for (var i=0; i<arguments.length; i++){ //loop through passed UL ids

var ulobj=document.getElementById(arguments[i])

var ulist=ulobj.getElementsByTagName("li") //array containing the LI elements within UL

for (var x=0; x<ulist.length; x++){ //loop through each LI element

var ulistlink=ulist[x].getElementsByTagName("a")[0]

if (ulistlink.getAttribute("rel")){

var modifiedurl=ulistlink.getAttribute("href").replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")

ulistlink.setAttribute("href", modifiedurl) //replace URL's root domain with dynamic root domain, for ajax security sake

savedefaultcontent(ulistlink.getAttribute("rel")) //save default ajax tab content

ulistlink.onclick=function(){

ajaxpage(this.getAttribute("href"), this.getAttribute("rel"), this)

loadobjs(this.getAttribute("rev"))

return false

}

if (ulist[x].className=="selected"){

ajaxpage(ulistlink.getAttribute("href"), ulistlink.getAttribute("rel"), ulistlink) //auto load currenly selected tab content

loadobjs(ulistlink.getAttribute("rev")) //auto load any accompanying .js and .css files

}

}

}

}

}



// Initialise the effects

		var stretch;

		

		window.onload = function() {

			stretch = new fx.Combo('stretch', {height: true, opacity: false, duration: 500});

			

			// Hide them to begin with

			stretch.hide();

		}

		logo= new Image(132,34); 

		logo.src="http://www.monfx.com/wp-content/themes/grass/images/logotype_h.gif";