//=============================================================================
var BBanners_Item = function() {
	var self = this;

	self.Image		= "";
	self.URL		= "";
	self.Interval	= 0;

	self.Loaded		= false;
}

//=============================================================================
var BBanners = function() {
	//private
		var self			= this;

		var ImageList		= Array();

		var TimerInterval	= 5000;

		var CurrentPos		= 0;

		var CancelLoop		= false;

	//public
		self.Element	= null;
		self.Element2	= null;

		self.Wrapper	= null;

	//=========================================================================
	self.Start = function() {
		if(self.Element == null || ImageList.length <= 1) return;

		var Count = ImageList.length - 1;
		for(var i = 0;i < ImageList.length;i++) {
			var NewElement = XElement.AddChild("Banner_Container_Number_" + i, self.Wrapper, (i + 1));

			if(i == 0) {
				NewElement.className = "Banner_Container_Number_Active";
			}else{
				NewElement.className = "Banner_Container_Number";
			}

			NewElement.value = i;
			NewElement.style.right				= (6 + (Count * (24 + 10))) + "px";
			NewElement.style.top				= "-" + (6 + 24) + "px";

			NewElement.onclick = function() {
				CancelLoop = true;

				self.SetBanner(this.value);

				CurrentPos = this.value + 1;

				if(CurrentPos >= ImageList.length) {
					CurrentPos = 0;
				}
			}

			Count--;
		}

		CurrentPos++;

		if(CurrentPos >= ImageList.length) {
			CurrentPos = 0;
		}

		self.PreloadBanner(CurrentPos);

		setTimeout(self.OnLoop, TimerInterval);
	}

	//-------------------------------------------------------------------------
	self.OnLoop = function() {
		if(CancelLoop) { 
			return;
		}

		self.SetBanner(CurrentPos);

		CurrentPos++;

		if(CurrentPos >= ImageList.length) {
			CurrentPos = 0;
		}

		self.PreloadBanner(CurrentPos);

		setTimeout(self.OnLoop, TimerInterval);
	}

	//-------------------------------------------------------------------------
	self.SetBanner = function(ID) {
		if(ID < 0 || ID >= ImageList.length)	return;
		if(self.Element == null)				return;
		if(self.Element2 == null)				return;

		TimerInterval = ImageList[ID].Interval;

		function OnDone() {
			self.Element2.style.backgroundImage = "url('./Data/Ads/" + ImageList[ID].Image + "')";

			self.Element2.onclick = function() {
				document.location.href = ImageList[ID].URL;
			}
			
			self.Element5.innerHTML = ImageList[ID].Title;
			self.Element6.innerHTML = ImageList[ID].Description;
		}

		for(var i = 0;i < ImageList.length;i++) {
			var NumElement = XElement.GetByID("Banner_Container_Number_" + i);

			if(i == ID) {
				NumElement.className = "Banner_Container_Number_Active";
				//$('#Banner_Container_Number_' + i).switchClass('Banner_Container_Number', 'Banner_Container_Number_Active', 450);
			}else{
				NumElement.className = "Banner_Container_Number";
				//$('#Banner_Container_Number_' + i).switchClass('Banner_Container_Number_Active', 'Banner_Container_Number', 450);
			}
		}

		self.Element.style.backgroundImage = "url('./Data/Ads/" + ImageList[ID].Image + "')";
		self.Element3.innerHTML = ImageList[ID].Title;
		self.Element4.innerHTML = ImageList[ID].Description;
		
		XEffect.FadeOut(self.Element2, 45, OnDone);
	}

	//-------------------------------------------------------------------------
	self.PreloadBanner = function(ID) {
		if(ImageList[ID].Loaded == false) {
			var Picture = new Image();

			Picture.onload = function() {
				ImageList[ID].Loaded = true;
			}

			Picture.src = "./Data/Ads/" + ImageList[ID].Image;
		}
	}

	//-------------------------------------------------------------------------
	self.AddImage = function(Image, URL, Interval, Title, Description) {
		var Item = new BBanners_Item();

		Item.Image			= Image;
		Item.URL			= URL;
		Item.Interval		= Interval;
		Item.Title			= Title;
		Item.Description	= Description;

		ImageList.push(Item);
	}
}

//=============================================================================

/*============================================================================||
||       __  ___  _______    ___  ____  __         ___                        ||
||      /  \/  /_/__  __/_ _/ __\/_/  \/ /   _____/   \                       ||
||     / /\_/ / ___/ / __ `/ /  __/ __/  \  / ___/  `_/                       ||
||    / /  / / __// / /_/ / /__/ / / / /\ \/ __// /\ \                        ||
||   /_/  /_/____/_/\__,_/\___/_/_/ /_/ /_/____/_/ /_/                        ||
||                                                                            ||
||============================================================================||
|| XElement																	  ||
|| Copyright Tim Jones. All Rights Reserved.                                  ||
||============================================================================*/

var XElement = {};

//=============================================================================
XElement.Element = function(SrcElement) {
	var self			= this;

	// public
		self.SrcElement	= SrcElement;		//The actual element on the page

	// private
		var Visible		= true;

	//-------------------------------------------------------------------------
	// Gets the X Coordinate of the SrcElement
	//
	// Return:
	//		Integer - X Coordinate of SrcElement
	//-------------------------------------------------------------------------
	self.GetX = function() {
		var X = self.SrcElement.style.left.replace("px", "");
			X = X.replace("%", "");
	
		return parseInt(X);
	}

	//-------------------------------------------------------------------------
	// Gets the Y Coordinate of the SrcElement
	//
	// Return:
	//		Integer - Y Coordinate of SrcElement
	//-------------------------------------------------------------------------
	self.GetY = function() {
		var Y = self.SrcElement.style.top.replace("px", "");
			Y = Y.replace("%", "");

		return parseInt(Y);
	}

	//-------------------------------------------------------------------------
	// Shows the current element
	//-------------------------------------------------------------------------
	self.Show = function() {
		if(self.SrcElement) {
			self.SrcElement.style.display = "block";
		}

		Visible = true;
	}

	//-------------------------------------------------------------------------
	// Shows the current element
	//-------------------------------------------------------------------------
	self.ShowAt = function(X, Y) {
		if(self.SrcElement) {
			self.SrcElement.style.display = "block";
		}

		self.SrcElement.style.left  = X + "px";
		self.SrcElement.style.right = Y + "px";

		self.SrcElement.style.position = "absolute";

		Visible = true;
	}

	//-------------------------------------------------------------------------
	// Hides the current element
	//-------------------------------------------------------------------------
	self.Hide = function() {
		if(self.SrcElement) {
			self.SrcElement.style.display = "none";
		}

		Visible = false;
	}

	//-------------------------------------------------------------------------
	// Returns visibility of element based upon style.display
	//
	// Return:
	//		bool - Visibility of element
	//-------------------------------------------------------------------------
	self.IsVisible = function() {
		return Visible;
	}

	//=========================================================================
	self.OnCleanup = function() {
	}
}

//=============================================================================
XElement.AddElement = function(ID, Content) {
	var NewElement		= document.createElement('div');

	NewElement.setAttribute("id", ID);
	NewElement.innerHTML = Content;

	document.body.appendChild(NewElement);

	return NewElement;
}

//-----------------------------------------------------------------------------
XElement.GetByID = function(ID) {
	return document.getElementById(ID);
}

//-----------------------------------------------------------------------------
XElement.AddChild = function(ID, Parent, Content) {
	var NewElement		= document.createElement('div');

	NewElement.setAttribute("id", ID);
	NewElement.innerHTML = Content; //Content;

	Parent.appendChild(NewElement);

	return NewElement;
}

//-----------------------------------------------------------------------------
XElement.RemoveChild = function(Element, Parent) {
	XElement.Purge(Element);

	Parent.removeChild(Element);

	Element = null;
}

//-----------------------------------------------------------------------------
XElement.RemoveAllChildren = function(Element) {
	XElement.Purge(Element);

	while(Element.hasChildNodes()) {
		XElement.Purge(Element.firstChild);
		
		var T = Element.firstChild;

		Element.removeChild(Element.firstChild);

		T = null;
	}
}

//-----------------------------------------------------------------------------
// Function by: Douglas Crockford
//-----------------------------------------------------------------------------
// http://www.crockford.com/javascript/memory/leak.html
//-----------------------------------------------------------------------------
XElement.Purge = function(d) {
	if(d == null) return;

    var a = d.attributes, i, l, n;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') {
                d[n] = null;
            }
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            XElement.Purge(d.childNodes[i]);
        }
    }
}

//-----------------------------------------------------------------------------
XElement.SetDimension = function(NewValue, Value) {
	var Post = "px";

	if(NewValue[Value.length - 1] == "%" || NewValue[Value.length - 1] == "x") {
		return NewValue;
	}

	if(Value) {
		if(Value[Value.length - 1] == "%") {
			Post = "%";
		}
	}

	return NewValue + Post;
}

//-----------------------------------------------------------------------------
XElement.SetX = function(Element, X) {
	Element.style.left = XElement.SetDimension(X, Element.style.left);
}

//-----------------------------------------------------------------------------
XElement.SetY = function(Element, Y) {
	Element.style.top = XElement.SetDimension(Y, Element.style.top);
}

//-----------------------------------------------------------------------------
XElement.GetX = function(Element) {
	if(Element.style && Element.style.left) {
		var X = Element.style.left.replace("px", "");
			X = X.replace("%", "");

		return parseInt(X);
	}else
	if(Element.offsetLeft) {
		return Element.offsetLeft;
	}

	return 0;
}

//-----------------------------------------------------------------------------
XElement.GetY = function(Element) {
	if(Element.style && Element.style.top) {
		var Y = Element.style.top.replace("px", "");
			Y = Y.replace("%", "");

		return parseInt(Y);
	}else
	if(Element.offsetTop) {
		return Element.offsetTop;
	}

	return 0;
}

//-----------------------------------------------------------------------------
XElement.GetPosX = function(Element) {
	var X = 0;

	if(Element.offsetParent) {
		while(Element.offsetParent) {
			X += Element.offsetLeft;
			Element = Element.offsetParent;
		}
	}else if(Element.x) {
		X += Element.x;
	}else if(Element.offsetLeft) {
		X += Element.offsetLeft;
	}

	return X;
}

//-----------------------------------------------------------------------------
XElement.GetPosY = function(Element) {
	var Y = 0;

	if(Element.offsetParent) {
		while(Element.offsetParent) {
			Y += Element.offsetTop;
			Element = Element.offsetParent;
		}
	}else if(Element.y) {
		Y += Element.y;
	}else if(Element.offsetTop) {
		Y += Element.offsetTop;
	}

	return Y;
}

//-----------------------------------------------------------------------------
XElement.SetWidth = function(Element, Width) {
	Element.style.width = XElement.SetDimension(Width, Element.style.width);
}

//-----------------------------------------------------------------------------
XElement.SetHeight = function(Element, Height) {
	Element.style.height = XElement.SetDimension(Height, Element.style.height);
}

//-----------------------------------------------------------------------------
XElement.GetWidth = function(Element) {
	if(Element.style && Element.style.width) {
		var Width = Element.style.width.replace("px", "");
			Width = Width.replace("%", "");

		return parseInt(Width);
	}else
	if(Element.offsetWidth) {
		return Element.offsetWidth;
	}else
	if(Element.innerWidth) {
		return Element.innerWidth;
	}

	return 0;
}

//-----------------------------------------------------------------------------
XElement.GetHeight = function(Element) {
	if(Element.style && Element.style.height) {
		var Height = Element.style.height.replace("px", "");
			Height = Height.replace("%", "");

		if(Height > 0) {	
			return parseInt(Height);
		}
	}

	if(Element.offsetHeight) {
		return Element.offsetHeight;
	}else
	if(Element.innerHeight) {
		return Element.innerHeight;
	}

	return 0;
}

//=============================================================================

/*============================================================================||
||       __  ___  _______    ___  ____  __         ___                        ||
||      /  \/  /_/__  __/_ _/ __\/_/  \/ /   _____/   \                       ||
||     / /\_/ / ___/ / __ `/ /  __/ __/  \  / ___/  `_/                       ||
||    / /  / / __// / /_/ / /__/ / / / /\ \/ __// /\ \                        ||
||   /_/  /_/____/_/\__,_/\___/_/_/ /_/ /_/____/_/ /_/                        ||
||                                                                            ||
||============================================================================||
|| XEffect																	  ||
|| Copyright Tim Jones. All Rights Reserved.                                  ||
||============================================================================*/

var XEffect = {};

//=============================================================================
XEffect.Slide = function(Element, X, Y, X2, Y2, Steps, Callback) {
	if(Steps < 1) {
		return;
	}

	var Count = 0;

	var XInterval = (X2 - X) / Steps;
	var YInterval = (Y2 - Y) / Steps;

	var NewX = X;
	var NewY = Y;

	function OnMove() {
		NewX += XInterval;
		NewY += YInterval;

		Element.style.left = NewX + "px";
		Element.style.top  = NewY + "px";

		Count++;

		if(Count < Steps) {
			setTimeout(OnMove, 5);
		}else{
			if(Callback) {
				Callback();
			}
		}
	}

	OnMove();
}

//-----------------------------------------------------------------------------
XEffect.FadeIn = function(Element, Steps, Callback) {
	if(Steps < 1) {
		return;
	}
 
	var Count = 0;
 
	var AlphaStep = 1.0 / Steps;
 
	function OnFade() {
		Element.style.filter		= "alpha(opacity=" + ((Count * AlphaStep) * 100) + ")";
		Element.style.MozOpacity	= Count * AlphaStep;
		Element.style.opacity		= Count * AlphaStep;
 
		Count++;
 
		if(Count < Steps) {
			setTimeout(OnFade, 10);
		}else{
			Element.style.filter		= "alpha(opacity=100)";
			Element.style.MozOpacity	= 1.0;
			Element.style.opacity		= 1.0;
 
			if(Callback) {
				Callback();
			}
		}
	}
 
	OnFade();
}

//-----------------------------------------------------------------------------
XEffect.FadeOut = function(Element, Steps, Callback) {
	if(Steps < 1) {
		return;
	}
 
	var Count = Steps;
 
	var AlphaStep = 1.0 / Steps;
 
	function OnFade() {
		Element.style.filter		= "alpha(opacity=" + ((Count * AlphaStep) * 100) + ")";
		Element.style.MozOpacity	= Count * AlphaStep;
		Element.style.opacity		= Count * AlphaStep;
 
		Count--;
 
		if(Count >= 0) {
			setTimeout(OnFade, 10);
		}else{
			Element.style.filter		= "alpha(opacity=0)";
			Element.style.MozOpacity	= 0.0;
			Element.style.opacity		= 0.0;
 
			if(Callback) {
				Callback();
			}
		}
	}
 
	OnFade();
}

//-----------------------------------------------------------------------------
XEffect.Grow = function(Element, Steps, StartWidth, StartHeight, GrowX, GrowY, Shrink, Callback) {
	if(Steps < 1) {
		return;
	}

	var Count = 0;

	var XInterval = GrowX / Steps;
	var YInterval = GrowY / Steps;

	var NewWidth	= StartWidth;
	var NewHeight	= StartHeight;

	if(Shrink) {
		XInterval = -XInterval;
		YInterval = -YInterval;
	}

	function OnMove() {
		NewWidth  += XInterval;
		NewHeight += YInterval;

		if(GrowX && NewWidth >= 0) {
			XElement.SetWidth(Element, NewWidth);
		}

		if(GrowY && NewHeight >= 0) {
			XElement.SetHeight(Element, NewHeight);
		}

		Count++;

		if(Count < Steps) {
			setTimeout(OnMove, 5);
		}else if(Callback) {
			Callback();
		}
	}

	OnMove();
}

//=============================================================================

