function Website(doc)
{
//	alert('Website::Constructor');
	this._doc = doc;
	this._siteLoader = new SiteLoader("Loading", this, this._doc);
	this._objects = new Array();
	this._wndManager = new WindowManager(doc);
	
	var _this = this;
	this.funcPtrShowMenuOnJump = function() { _this.eventHandler_ShowMenuOnJump(); };
	this._menuDog = null; //Citizen that brings up the menu
}

Website.prototype.Init = function()
{
	//alert('Init');
	this.LoadImages();
}

Website.prototype.LoadImages = function()
{
	//alert('LoadImages');	
	this._siteLoader.SetImageToLoad("../images/citizens/dog_1.gif");	// 0
	this._siteLoader.SetImageToLoad("../images/citizens/dog_2.gif");	// 1
	this._siteLoader.SetImageToLoad("../images/citizens/dog_3.gif");	// 2
	this._siteLoader.SetImageToLoad("../images/citizens/dog_4.gif");			// 3	
	
	this._siteLoader.SetImageToLoad("../images/objects/pole_mid_3.jpg");		// 4
	this._siteLoader.SetImageToLoad("../images/objects/pole_top_32.gif"); 		// 5

	this._siteLoader.SetImageToLoad("../images/background/sunset_2.jpg");	// 6
	
	this._siteLoader.SetImageToLoad("../images/citizens/blimpguy_1.gif");	// 7	
	this._siteLoader.SetImageToLoad("../images/citizens/blimpguy_1_2.gif");	// 8
	
	this._siteLoader.SetImageToLoad("../images/background/sunset_1.jpg");	
	this._siteLoader.SetImageToLoad("../images/background/sunset_3.jpg");	
	
	this._siteLoader.LoadImages();
}

Website.prototype.OnSiteLoaded = function()
{
	//alert("Website::OnSiteLoaded");
	this.CreateEnvironment();
		
	this.OnResize();
	this._siteLoader.Fade(-0.2, 20);
	
	//Do this after loaded, since loading will stop if the OnResize function is called during loading
	//Why? Because the objects are not created	
	var _this = this;
	window.onresize = function() { _this.OnResize() };
}

Website.prototype.GetNextBackground = function()
{
    var imgIndices = [6, 9, 10];
    
    //if (this._currBackgroudImg == undefined)
        this._currBackgroudImg = Math.floor((Math.random() * 100) % 3);
    //else
    //    this._currBackgroudImg = (this._currBackgroudImg+1) % 3;
    //alert(this._currBackgroudImg);
    return this._siteLoader.GetImage(imgIndices[this._currBackgroudImg]);
}

Website.prototype.CreateEnvironment = function()
{
    var _this = this;
    //alert(this.GetNextBackground());
	//alert("Website: CreateEnvironment");
	var background = new Background("Background", this.GetNextBackground(), 1);
	//background.SetKeepRatio(true);
	background.Show(true);
	this._objects.push(background);

	//Poles
	var pole_1 = new Pole("pole_1", this._siteLoader.GetImage(5), this._siteLoader.GetImage(4));
	pole_1.Position(40, -170, this._doc);
	pole_1.SetZIndex(100); 
	pole_1.Show(true);
	this._objects.push(pole_1);
		
	var pole_2 = new Pole("pole_2", this._siteLoader.GetImage(5), this._siteLoader.GetImage(4));
	pole_2.Position(100, 250, document);
	pole_2.SetZIndex(100); 
	pole_2.Show(true);
	this._objects.push(pole_2);
	
	//Citizens	
	var dogImages = new Array();
	dogImages.push(new CitizenImage(this._siteLoader.GetImage(0), 24, 3));
	dogImages.push(new CitizenImage(this._siteLoader.GetImage(1), 35, -13));
	dogImages.push(new CitizenImage(this._siteLoader.GetImage(2), 24, 55));
	dogImages.push(new CitizenImage(this._siteLoader.GetImage(3), 32, 60));
	
	var dog = new Citizen("Dog", dogImages, 0);
	dog.CDSetCollidables( new Array(pole_1, pole_2) );
	if (Math.random() < 0.5)
		dog.CDSetCurrCollidable(pole_1);
	else
		dog.CDSetCurrCollidable(pole_2);
	dog.SetJumpImg(1);
	dog.SetMouseOverAction(dog.JUMP(), dog);
	dog.SetEvtJumpToPole(function() { _this.OnCitizenJumpToPole(dog, background); });
	
	if (IS_WEBMASTER)
		dog.SetMouseOverAction(dog.EXTENSION(), this.funcPtrShowMenuOnJump );
		
	this._menuDog = dog;
	dog.Show(true);
	this._objects.push(dog);

	//var snoopDog = new Citizen("snoopDog", dogImages, 0, collisionLayers, 1);
	//snoopDog.SetJumpImg(1);
	//snoopDog.SetMouseOverAction(snoopDog.JUMP(), snoopDog);
	////dog.SetMouseOverAction(dog.EXTENSION(), eventHandler_ShowMenuOnJump);
	//snoopDog.Show(true);
	//this._objects.push(snoopDog);
	
	//Hovercraft
	this.blimpguyImages = new Array();
	this.blimpguyImages.push(new CitizenImage(this._siteLoader.GetImage(7), 0, 0));
	this.blimpguyImages.push(new CitizenImage(this._siteLoader.GetImage(8), 0, 0));

	var blimpguy = new Hovercraft("Blimpguy", this.blimpguyImages, 0);
	blimpguy.SetMouseMove(true);	
	blimpguy.WhenToBeginFloating(5, 300, new Rect(0.4, 0.95, 0.1, 0.9));	//Fixme: background.GetRect()
	this._objects.push(blimpguy);
	
	var blimpguy2 = new Hovercraft("Blimpguy2", this.blimpguyImages, 0, 0.75);
	blimpguy2.SetDefaultZIndex(300);
	blimpguy2.SetMouseMove(true);	
	blimpguy2.WhenToBeginFloating(5, 500, new Rect(0.4, 0.6, 0.3, 0.7));	//Fixme: background.GetRect()
	this._objects.push(blimpguy2);
		
	blimpguy.CDSetCollidables( new Array(dog) ); 
	blimpguy2.CDSetCollidables( new Array(dog) ); 
}

Website.prototype.OnCitizenJumpToPole = function(citizen, background)
{
    background.SetImage(this.GetNextBackground());
    
    var scale, zIndex;
    
    if (Math.random() > 0.5)
    {
        scale = 0.25;
        zIndex = 10;
    }
    else
    {
        scale = 0.5;    
        zIndex = 20;
    }
        
    var speed = 500/(Math.random()*100);
    
    var top, bottom, left, right;
    
    top = Math.round(Math.random()*20)/100; //0 0.25 
    bottom = Math.round(Math.random()*20)/100 + 0.80; //0.75 1 
    left = Math.round(Math.random()*20)/100; //0 0.25 
    right = Math.round(Math.random()*20)/100 + 0.80; //0.75 1 
    
    if (this._extraBlimps == undefined)
	    this._extraBlimps = 0;
    else
        this._extraBlimps++;
        
    if (this._extraBlimps < 3)
    {
        var blimpguy2 = new Hovercraft("Blimpguy"+ this._objects.length, this.blimpguyImages, 0, scale);
        blimpguy2.FreezeZIndex(true);
	    blimpguy2.SetDefaultZIndex(zIndex);
	    blimpguy2.SetMouseMove(true);	
	    blimpguy2.WhenToBeginFloating(5, speed, new Rect(top, bottom, left, right));	//Fixme: background.GetRect()
	    this._objects.push(blimpguy2);
	}
	//blimpguy2.CDSetCollidables( [citizen] );
}

Website.prototype.OnResize = function()
{
	//alert("Website::OnResize");
	for(i=0; i <this._objects.length; i++)
		this._objects[i].OnResize();
	this._wndManager.OnResize();
}

Website.prototype.AddWindow = function(wnd)
{
	this._wndManager.AddWindow(wnd);
}

Website.prototype.ShowWindow = function(id)
{
	//alert ("Website::ShowWindow");
	if (id == "Downloads" && !IS_WEBMASTER)
	{
		alert("Im actually working on this right now");
		return;
	}
	this._wndManager.AppendWindow(id);
}

Website.prototype.HideWindow = function(wnd)
{
	//alert ("Website::HideWindow: " + wnd);
	//this._wndManager.RemoveWindow(this._wndManager.GetWindow(id));
	this._wndManager.HideWindow(wnd);
}

Website.prototype.eventHandler_ShowMenuOnJump = function()
{
	var mainMenu = this._wndManager.GetWindow("MainMenu");
	//alert (mainMenu.GetId() + " " + parseInt(this._menuDog.GetTop()));
	
	this.ShowWindow("MainMenu");	
	mainMenu.SetTop( parseInt(this._menuDog.GetTop()) - 20 );
	mainMenu.SetLeft( parseInt(this._menuDog.GetLeft()) - 85 );	
		
	//alert(this._menuDog + " " + this._menuDog.EXTENSION());
	this._menuDog.DelMouseOverAction(this._menuDog.EXTENSION(), this.funcPtrShowMenuOnJump);
}

/*var layers = new Array();
var _objects = new Array();
var currMenuItem = "Startpage";




//____________________Create Menus_______________________________________________________________________________________

//The order of function calls are important
var mainMenu = new Layer("menu");
mainMenu.SetMenu(new Menu());
mainMenu.GetMenu().AddMenuItem("Home");
mainMenu.GetMenu().AddMenuItem("Music");
mainMenu.GetMenu().AddMenuItem("Downloads");
mainMenu.GetMenu().AddMenuItem("CV");
mainMenu.GetMenu().AddMenuItem("Forum");
mainMenu.GetMenu().AddMenuItem("Contact");
mainMenu.GetMenu().SetRelPos(0,0);
mainMenu.BuildMenu(document);
mainMenu.SetZIndex(50);
mainMenu.Show(false);

var dwMenu = new Layer("dwMenu");
dwMenu.SetMenu(new Menu());
dwMenu.GetMenu().AddMenuItem("Ferm_Autotuner");
dwMenu.GetMenu().AddMenuItem("Ferm_CQ");
dwMenu.GetMenu().SetRelPos(0,85);
dwMenu.BuildMenu(document);
dwMenu.SetZIndex(50);
dwMenu.Show(false);
//AddLayer(dwMenu);

var cvMenu = new Layer("cvMenu");
cvMenu.SetMenu(new Menu());
cvMenu.GetMenu().AddMenuItem("Experience");
cvMenu.GetMenu().AddMenuItem("Education");
cvMenu.GetMenu().AddMenuItem("Courses");
cvMenu.GetMenu().AddMenuItem("Personal_Info");
cvMenu.GetMenu().AddMenuItem("Papers");
cvMenu.GetMenu().SetRelPos(0,85);
cvMenu.BuildMenu(document);
cvMenu.SetZIndex(50);
cvMenu.Show(false);
//AddLayer(cvMenu);

var uniMenu = new Layer("uniMenu");
uniMenu.SetMenu(new Menu());
uniMenu.GetMenu().AddMenuItem("Chalmers");
uniMenu.GetMenu().AddMenuItem("Karlstad");
uniMenu.GetMenu().SetRelPos(0,157);
uniMenu.BuildMenu(document);
uniMenu.SetZIndex(50);
uniMenu.Show(false);

//alert("mainMenu: " + mainMenu.GetId() + " uni: " + uniMenu.GetId() + " dw: " + dwMenu.GetId() + " CV: " + cvMenu.GetId());

//____________________Load Images_______________________________________________________________________________________
LoadImage("../images/citizens/dog_1.gif");	// 0
LoadImage("../images/citizens/dog_2.gif");	// 1
LoadImage("../images/dog_3.gif");	// 2
LoadImage("../images/dog_4.gif");	// 3	
LoadImage("../images/pole_mid_3.jpg");	// 4
LoadImage("../images/pole_top_31.gif"); 	// 5
LoadImage("../images/pole_mid_1.gif");	// 6
LoadImage("../images/pole_top_1.gif");	// 7

//LoadImage("../images/background/bg1.jpg");	// 8
LoadImage("../images/background/sunset_1.jpg");	// 8

//____________________Create Pole_______________________________________________________________________________________
var pole_1 = new Pole("pole_1", 5, 4, document, 70, 52);
pole_1.Position(270, -260);
pole_1.SetZIndex(100); 
pole_1.Show(true);
_objects.push(pole_1);

var pole_2 = new Pole("pole_2", 5, 4, document, 70, 52);
pole_2.Position(320, 200);
pole_2.SetZIndex(100);
pole_2.Show(true);
_objects.push(pole_2);

//alert(images[0].image.complete);

//____________________Create Citizens____________________________________________________________________________________
var collisionLayers = new Array();
collisionLayers.push(pole_1);
collisionLayers.push(pole_2);

var dogImages = new Array();
dogImages.push(new CitizenImage(0, 24, 3, 175, 99));
dogImages.push(new CitizenImage(1, 32, 3, 180, 160));
dogImages.push(new CitizenImage(2, 24, 3, 175, 99));
dogImages.push(new CitizenImage(3, 32, 3, 175, 99));

var dog = new Citizen("Dog", collisionLayers, dogImages, 0, 0, 175, 99, document);
dog.SetJumpImg(1);
dog.SetMouseOverAction(dog.JUMP(), dog);
dog.SetMouseOverAction(dog.EXTENSION(), eventHandler_ShowMenuOnJump);
dog.Show(true);
_objects.push(dog);


var background = new Background("Background", 8, 1, document);
//background.SetKeepRatio(true);
background.Show(true);
_objects.push(background);

//var snoopDog = new Citizen("SnoopDog", collisionLayers, dogImages, 1, 0, 175, 99, document);
//snoopDog.SetMouseOverAction(snoopDog.JUMP(), snoopDog);
//snoopDog.Show(true);
//_objects.push(snoopDog);

//dog.SetImage(1);
//alert(images[0].image.width);


//____________________Position all visible objects___________________________________________________________________
OnResize();
//OnResize();
//___________________________________________________________________________________________________________
*/

function eventHandler_ShowMenuOnJump()
{
	mainMenu.Show(true);
	mainMenu.Fade(25,20);
	mainMenu.UpdateMenuPos();
	dog.DelMouseOverAction(dog.EXTENSION(), eventHandler_ShowMenuOnJump);	
}

function AddLayer(layer)
{
	layers.push(layer);

}

function GetLayer(id)
{	
	for(i=0; i<layers.length; i++)
	{
		//alert(layers[i].GetId() + ' ' + id);
		if (layers[i].GetId() == id)
			return layers[i];
	}	
	return null;
}

//___________________________________________________________________________________________________________


function OnResize()
{
	if (mainMenu.IsVisible())
		mainMenu.UpdateMenuPos();
	if (uniMenu.IsVisible())
		uniMenu.UpdateMenuPos();
	if (dwMenu.IsVisible())
		dwMenu.UpdateMenuPos();
	if (cvMenu.IsVisible())
		cvMenu.UpdateMenuPos();	
		
	for (i=0; i < _objects.length; i++)
		if (_objects[i].IsVisible())
			_objects[i].Update(document);
				
	var tmp = GetLayer(currMenuItem).Center();
	if (tmp != null && tmp.IsVisible())
		tmp.Center();
}

//___________________________________________________________________________________________________________


//_____Menu handler
function MenuPressed(menuItem)
{
//update current visitors
	
//window.location=menuItem;
	
//	window.parent.frames[0].location.reload();
	//nt = menuItem;
//_________________________________-

var newPage = GetLayer(menuItem);
var currPage = GetLayer(currMenuItem);

if (newPage == null && menuItem != 'Close')
{
	alert("Menu item does not exist.");
}
else
{
	//Close button has been clicked
	if(menuItem == 'Close')
	{
		if (currPage != null)
			currPage.Fade(-25,20);
		currMenuItem = null;
		return;
	}

	if(menuItem == currMenuItem)
		return;

	if(currMenuItem == 'Startpage')
		currPage.Show(false);

	
	if(menuItem == mainMenu.GetMenu().GetMenuItem(1) || 
		menuItem == mainMenu.GetMenu().GetMenuItem(2) ||
		menuItem == dwMenu.GetMenu().GetMenuItem(0) ||
		menuItem == dwMenu.GetMenu().GetMenuItem(1))
		newPage.SetTop(42);
	else
		newPage.SetTop(50);
	
	GetLayer('Lyrics').Show(false);

	//__________Show the item choosen

	newPage.Center();

	// Close existing
	if(currMenuItem != null && currPage.IsVisible())
	{
		//currPage.Show(false);
		currPage.Fade(-25,20);
		//GetLayer(menuItem).Fade(-25,20);
	}

	// Show chosen
	newPage.Fade(25,20);
	//	GetLayer(menuItem).SetOpacity(100);
	//GetLayer(menuItem).Show(true);

//Close menus

//_____________Update menu

	if(dwMenu.IsVisible() && 
		menuItem != dwMenu.GetMenu().GetMenuItem(0) && 
		menuItem != dwMenu.GetMenu().GetMenuItem(1) &&
		menuItem != mainMenu.GetMenu().GetMenuItem(2))
	//	dwMenu.Show(false);
		dwMenu.Fade(-25, 20);
	
	if(cvMenu.IsVisible() && 
		menuItem != mainMenu.GetMenu().GetMenuItem(3) &&
		menuItem != cvMenu.GetMenu().GetMenuItem(0) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(1) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(2) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(3) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(4) &&
		menuItem != uniMenu.GetMenu().GetMenuItem(0) &&
		menuItem != uniMenu.GetMenu().GetMenuItem(1))
		cvMenu.Fade(-25, 20);
	
	if(uniMenu.IsVisible() && 
		menuItem != uniMenu.GetMenu().GetMenuItem(0) && 
		menuItem != uniMenu.GetMenu().GetMenuItem(1))
		uniMenu.Fade(-25, 20);

//Open menues
	if(menuItem == mainMenu.GetMenu().GetMenuItem(2) &&
		currMenuItem != dwMenu.GetMenu().GetMenuItem(0) &&
		currMenuItem != dwMenu.GetMenu().GetMenuItem(1))
	{
		dwMenu.UpdateMenuPos();
		dwMenu.Fade(25,20);
	}
	else if(menuItem == mainMenu.GetMenu().GetMenuItem(3) &&
		menuItem != cvMenu.GetMenu().GetMenuItem(0) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(1) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(2) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(3) && 
		menuItem != cvMenu.GetMenu().GetMenuItem(4) &&
		menuItem != uniMenu.GetMenu().GetMenuItem(0) &&
		menuItem != uniMenu.GetMenu().GetMenuItem(1))
	{
		cvMenu.UpdateMenuPos();
		cvMenu.Fade(25,20);
	}
	else if(menuItem == cvMenu.GetMenu().GetMenuItem(2))
	{
		uniMenu.UpdateMenuPos();
		uniMenu.Fade(25,20);
	}

	currMenuItem = menuItem;  //Dont move this line
}



//update current visitors
window.currvis.location = "../scripts/currvis.php";
}

//___________________________________________________________________________________________________________

var newWin = null;

function OpenWindow(win, page, width, height)
{
	var w = screen.availWidth;
    var h = screen.availHeight;
	var leftPos = (w-width)/5, topPos = ((h-height)/5);

	if(newWin!=null)
		newWin.close();
		
	newWin = win.open(page, "subWin", "width="+width+",height="+height+",top="+topPos+",left="+leftPos+"") //Do not include spaces
	newWin.focus()
}

//___________________________________________________________________________________________________________

