var bUseCache = true;			// Debug variable... false for debug
var b1;					// Button1
var lbl1;				// Label associated to button1
var linkButton;				// Button Link
var linkInternal;			// Internal if true, external if false
var nTransparency = 0;			// Transparency of the disappearing object
var objFadeOut;				// Ref: obj fading out
var strLastPage = null;			// Last selected page
var timerId;				// Timer of first Loading
var dyn = new Array();			// DynamicDrag array
var strCachedPage = new Array();	// Cached String
var strCategories = new Array();	// Category Strings
var bSupportSpecialButton = false;
strCategories[0] = "home";
strCategories[1] = "portfolio";
strCategories[2] = "cv";
strCategories[3] = "me";
strCategories[4] = "question";
strCategories[5] = "lookstrike";
strCategories[6] = "barcode";
strCategories[7] = "contact";

/* Gets Browser */
function tempGetBrowser() {
	var agent = navigator.userAgent.toLowerCase();
	if(agent.indexOf("firefox") != -1 || agent.indexOf("gecko") != -1)
		return 1;
	else if(agent.indexOf("opera") != -1)
		return 2;
	else if(agent.indexOf("safari") != -1)
		return 3;
	else if(agent.indexOf("msie") != -1)
		return 0;
	else
		return -1;
}

var pageLoadedVar = false;
var jsLoadedVar = false;

function pageLoaded() {
	pageLoadedVar = true;
	if(pageLoadedVar && jsLoadedVar) {
		loaded();
	}
}

function jsLoaded() {
	jsLoadedVar = true;
	if(pageLoadedVar && jsLoadedVar) {
		loaded();
	}
}

// Load immediately so copy GetBrowserFunction for now
var agent = tempGetBrowser();
if(agent == 3 || agent == 2 || agent == 1 || agent == 0) {
	ToolBox.loadJSDynamically("UIBase", jsLoaded);
	// If IE gives an error, it's because he is dumb...
} else {
	// Maybe we support modern?
	ToolBox.loadJSDynamically("PreloadModern");
}

/* Shortcut to get the object by id */
function $(id) {
	return document.getElementById(id);
}

/* Sets position of all div */
function position() {
	var bodyW = document.getElementsByTagName("body").item(0).offsetWidth;
	var bodyH = document.getElementsByTagName("body").item(0).offsetHeight;
	$("page").style.left = ((bodyW - 535) / 2) + "px";
	$("page").style.top = ((bodyH - 267) / 2) + "px";
	$("shadow").style.left = $("page").style.left;
	$("shadow").style.top = ((parseInt($("page").style.top) + 267) - 132 + 12) + "px";
	$("page_corner1").style.left = "0px";
	$("page_corner1").style.top  = "0px";
	$("page_corner2").style.left = "456px";
	$("page_corner2").style.top  = "0px";
	$("page_corner3").style.left = "456px";
	$("page_corner3").style.top  = "258px";
	$("page_corner4").style.left = "0px";
	$("page_corner4").style.top  = "258px";
	$("page_border1").style.left = "0px";
	$("page_border1").style.top = "33px";
	$("page_border2").style.right = "0px";
	$("page_border2").style.top = "228px";
	$("page_logo").style.left = "7px";
	$("page_logo").style.top = "11px";
	$("bottom_page").style.top = (parseInt($("page").style.top) + 280) + "px";
	$("bottom_page").style.left = ((bodyW - $("bottom_page").offsetWidth) / 2 - 30) + "px";

	var p = $("popup");
	p.style.left = (bodyW / 2 - p.offsetWidth / 2) + "px";
	p.style.top = (bodyH / 2 - p.offsetHeight / 2) + "px";
}

/* Receives data comming from XmlRequest */
function receiveData(obj) {
	if(obj.GetState() == 4) {
		strCachedPage[obj.GetId()] = obj.GetText()
		parseData(strCachedPage[obj.GetId()]);
	}
}

/* Parses data to display it */
function parseData(strData) {
	hideButton();
	var nPosHead = strData.indexOf("###HEAD###");
	var nPosBody = strData.indexOf("###BODY###");
	var nPosFoot = strData.indexOf("###FOOT###");
	$("page_head").innerHTML = strData.substring(nPosHead + 10, nPosBody);
	$("page_body").innerHTML = strData.substring(nPosBody + 10, nPosFoot);
	var page_foot = strData.substring(nPosFoot + 10, strData.length);
	if(page_foot.substring(0, 12) == "***BUTTON***") {
		var nPosLink = page_foot.indexOf("***LINK***");
		$("page_foot").innerHTML = "";
		if(page_foot.substring(nPosLink + 10, nPosLink + 11) == 'I') { // str[index] not supported by opera
			linkInternal = true;
		} else {
			linkInternal = false;
		}
		linkButton = page_foot.substring(nPosLink + 11, page_foot.length);
		showButton(page_foot.substring(12, nPosLink));
	} else {
		$("page_foot").innerHTML = page_foot;
	}
	$("page_body").scrollTop = 0;
}

/* Ask for a webpage on the internet or use the cache */
function askFor(strPage, obj) {
	if(staticDynamicDrag != null) { // Something is already moving
		return false;
	}

	window.clearTimeout(timerId);
	// WOOOO slow down my friend
	if(nTransparency == 0) {
		if(strLastPage != strPage) {
			move(strPage, obj);
			strLastPage = strPage;
			// If we have it in cache, load it...otherwise, make a connection
			if(strCachedPage[strPage] != null && bUseCache) {
				parseData(strCachedPage[strPage]);
			} else {
				try {
					var xml = new XMLRequest();
					xml.SetId(strPage);
					xml.SetCallback(receiveData);
					xml.Connect("GET", "page.php?p=" + strPage, true);
					xml.Send(null);
				} catch(e) {/* OUPS, TODO do something here*/}
			}
		}
	}
}

/* Fade out timer function */
function fadeOut() {
	nTransparency -= 10;
	ToolBox.specific().SetTransparency( objFadeOut, nTransparency );
	if( nTransparency > 0 ) {
		window.setTimeout("fadeOut()", 40);
	} else {
		objFadeOut.style.visibility = "hidden";
	}
}

/* Moves an object to the title position */
function move(strPage, obj) {
	if(strLastPage != null && ToolBox.specific().GetBrowser() == ToolBox.specific().BROWSER_OPERA) {
		dyn[strLastPage].objSpan1.style.visibility = "hidden";
	}
	ToolBox.specific().SetTransparency( dyn[strPage].objSpan1, 100 );
	dyn[strPage].objSpan1.style.left = obj.style.left;
	dyn[strPage].objSpan1.style.top = obj.style.top;
	dyn[strPage].objSpan1.style.visibility = "visible";
	dyn[strPage].checkReturnToStart();

	if(strLastPage != null) {
		nTransparency = 100;
		objFadeOut = dyn[strLastPage].objSpan1;
		fadeOut();
	}
}

function toCenter() {
	$("button").style.textAlign="center";
}

/* Called on page loaded */
function loaded() {
	ToolBox._Events.register(window, 'resize', position, false);

	var browser = ToolBox.specific().GetBrowser();
	bSupportSpecialButton = (browser == ToolBox.specific().BROWSER_MSIE
				|| browser == ToolBox.specific().BROWSER_FIREFOX
				|| browser == ToolBox.specific().BROWSER_OPERA
				|| browser == ToolBox.specific().BROWSER_SAFARI);

	position();
	$("page_body").scrollTop = 0;
	var c = strCategories.length;
	if(bSupportSpecialButton) {
		var customButton;
		for(var i = 0; i < c; i++) {
			customButton = new UICButton("b" + i);
			customButton.init(strCategories[i]);
		}
		b1 = new UIButton("button1");
		b1.nRightWidth = 200;
		b1.init("aqua");
		b1.setCallback(linkButtonGoto);

		lbl1 = new UILabel("label1");
		lbl1.init("aqua");
	} else {
		var e = document.createElement("link");
		e.href = "style_modern.css";
		e.rel = "stylesheet";
		e.type = "text/CSS";
		document.getElementsByTagName("head").item(0).appendChild(e);
	}

	// Drag icon
	var objDrag;
	for(var i = 0; i < c; i++) {
		objDrag = document.createElement("span");
		objDrag.id = "drag_" + strCategories[i];
		objDrag.style.position = "absolute";
		objDrag.style.visibility = "hidden";
		document.getElementById("page").appendChild(objDrag);

		dyn[strCategories[i]] = new DynamicDrag(objDrag, 'images/icon/separated/h-'+strCategories[i]+'.gif');
		dyn[strCategories[i]].zIndexBase(100);
		dyn[strCategories[i]].returnToStart( true, 4, 25 );
		dyn[strCategories[i]].setTransparent( 50, true );
		dyn[strCategories[i]].returnX = 66;
		dyn[strCategories[i]].returnY = 6;
	}

	document.getElementById("outer").style.visibility = "visible";
	timerId = window.setTimeout('askFor("home", document.getElementById("b0"))', 2000);

	// Check Browser:
	var browserVer = ToolBox.specific().GetBrowserVersion();
	if(browser == ToolBox.specific().BROWSER_FIREFOX && cmpVersion(browserVer, "1.5") == -1) {
		showPopup();
	} else if (browser == ToolBox.specific().BROWSER_MSIE && cmpVersion(browserVer, "6") == -1) {
		showPopup();
	} else if (browser == ToolBox.specific().BROWSER_OPERA && cmpVersion(browserVer, "8.50") == -1) {
		showPopup();
	} else if (browser == ToolBox.specific().BROWSER_SAFARI && cmpVersion(browserVer, "623.15") == -1) {
		showPopup();
	} else if (browser == ToolBox.specific().BROWSER_UNKNOWN) {
		showPopup();
	}
}

function cmpVersion(strVer1, strVer2) {
	// We don't use "0" at the end
	var arrVer1 = strVer1.split(".");
	var arrVer2 = strVer2.split(".");
	var nLength1 = arrVer1.length;
	var i;
	for(i = nLength1 - 1; i >= 0; i--) {
		if(parseInt(arrVer1[i]) != 0)
			break;
	}
	nLenght1 = i;

	// Compare each one
	for(i = 0; i < nLength1; i++) {
		if(!arrVer2[i]) { // Found version number not in strVer2
			return 1;
		}

		if(parseInt(arrVer1[i]) < parseInt(arrVer2[i])) {
			return -1;
		} else if (parseInt(arrVer1[i]) > parseInt(arrVer2[i])) {
			return 1;
		}
	}
	if(arrVer2[i]) // Found version number not in strVer1
		return -1;
	return 0;
}

function linkButtonGoto() {
	if(linkInternal == true) {
		askFor(linkButton, $("b"+ToolBox.findInArray(strCategories, linkButton)));
	} else {
		window.open(linkButton);
	}
}

function showButton(strText) {
	if(!bSupportSpecialButton) {
		$("page_foot").innerHTML = createInputButton(strText);
	} else {
		$("page_foot").appendChild($("button"));
		$("label1").innerHTML = strText;
		lbl1.associateTo(b1);
		b1.eventMouseOver();
	}
}

function createInputButton(strText) {
	var strData = '<form action="javascript:;">'
	+'<input type="button" value="'+ strText +'" onclick="javascript:linkButtonGoto();"/>'
	+'</form>';

	return strData;
}

function hideButton() {
	$("hiddenfield").appendChild($("button"));
}

function closePopup() {
	$("popup").style.visibility = "hidden";
}

function showPopup() {
	$("popup").style.visibility = "visible";
	var xml = new XMLRequest();
	xml.SetId("error");
	xml.SetCallback(showPopupReceive);
	xml.Connect("GET", "page.php?p=error", true);
	xml.Send(null);

	function showPopupReceive(obj) {
		if(obj.GetState() == 4) {
			$("popup").innerHTML = obj.GetText();
		}
	}
}