/*  margins.js  -  margin control code
 *  (C) Copyright 2004  Kars Meyboom <kars@kde.nl>
 *
 *  LICENSE:
 *
 *  This code is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This code is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

// --
// -- GLOBAL VARIABLES
// --

var defaultLeftMargin = 100;
var defaultRightMargin = 100;

// --
// -- INITIALISATION CODE
// --

function set_margins () {
	var margins = get_margins_from_cookie();
	var leftMargin = margins[0];
	var rightMargin = margins[1];

	document.write(
		'<style type="text/css">\n'+
		'#bodydiv { padding: 0px '+rightMargin+'px 0px '+leftMargin+'px; }\n'+
		'</style>');
}
set_margins();

// --
// -- FUNCTIONS
// --

// Parses the cookie, and ensures that the returned margins
// are within valid range.
function get_margins_from_cookie () {
	var margins = getCookie('zhl_margins');

	if (margins == null) {
		// no cookie set yet
		var leftMargin = defaultLeftMargin;
		var rightMargin = defaultRightMargin;
		setCookie('zhl_margins', leftMargin+','+rightMargin);
	} else {
		// retrieve values from cookie
		var parsed = margins.match(/(\d+), *(\d+)/);
		var leftMargin = parseInt(parsed[1]);
		var rightMargin = parseInt(parsed[2]);
	}

	return [leftMargin, rightMargin];
}

// Initialises the page's margins from the cookie.
// Is called by init_page on the onLoad event.
function init_page_margins () {
	var margins = get_margins_from_cookie();
	var leftMargin = margins[0];
	var rightMargin = margins[1];
	var clientWidth = document.body.clientWidth;

	var pageWidth = (isIE) ? clientWidth : (clientWidth - leftMargin - rightMargin);
	var bodydiv = document.getElementById('bodydiv');
	bodydiv.style.width = pageWidth+'px';
	bodydiv.style.paddingLeft = leftMargin+'px';
	bodydiv.style.paddingRight = rightMargin+'px';

	//save_page_margins();
}

// Called from update_page() on the onResize event.
// Adjusts the page's width and margins.
function update_page_margins () {
	var margins = get_margins_from_cookie();
	var leftMargin = margins[0];
	var rightMargin = margins[1];

	var bodydiv = document.getElementById('bodydiv');

	var panel = document.getElementById('navPanel').firstChild;
	var img = document.getElementById('navPanelOpen');
	if (parseInt(getCookie('zhl_panel'))) {
		var panelWidth = panel.offsetWidth + 5;
	} else {
		var panelWidth = img.offsetLeft + img.offsetWidth + 5;
	}

	leftMargin = (leftMargin > panelWidth) ? leftMargin : panelWidth;
	var clientWidth = document.body.clientWidth;
	var pageWidth = (isIE) ? clientWidth : (clientWidth - leftMargin - rightMargin);

	bodydiv.style.width = pageWidth+'px';
	bodydiv.style.paddingLeft = leftMargin+'px';
	bodydiv.style.paddingRight = rightMargin+'px';
}

var mouseX = -1;
var whichMargin = '';

function move_page_margins (event) {
	var img = document.getElementById('marginslider');
	var delta = event.clientX - mouseX;
	var newLeft = imgX(img) + delta;
	var maxLeft = document.body.clientWidth - img.width;
	newLeft = (maxLeft > newLeft) ? newLeft : maxLeft;
	newLeft = (newLeft > 0) ? newLeft : 0;
	img.style.left = newLeft + 'px';
	mouseX = event.clientX;

	var bodydiv = document.getElementById('bodydiv');
	var paddingLeft = parseInt(bodydiv.style.paddingLeft.match(/(\d+)/)[1]);
	var paddingRight = parseInt(bodydiv.style.paddingRight.match(/(\d+)/)[1]);
	if (whichMargin == 'left') {
		paddingLeft += delta;
	} else {
		paddingRight -= delta;
	}
	bodydiv.style.width = ((isIE) ? document.body.clientWidth : (document.body.clientWidth - (paddingLeft + paddingRight))) + 'px';
	bodydiv.style.paddingLeft = paddingLeft + 'px';
	bodydiv.style.paddingRight = paddingRight + 'px';

	var leftMargin = document.getElementById('leftmargin');
	leftMargin.style.left = paddingLeft + 'px';

	var rightMargin = document.getElementById('rightmargin');
	rightMargin.style.left = (document.body.clientWidth - paddingRight) + 'px';
}

// saves the page margins in a cookie
function save_page_margins () {
	var bodydiv = document.getElementById('bodydiv');
	var paddingLeft = bodydiv.style.paddingLeft;
	var paddingRight = bodydiv.style.paddingRight;
	paddingLeft = paddingLeft.match(/(\d+)/)[1];
	paddingRight = paddingRight.match(/(\d+)/)[1];

	setCookie('zhl_margins', paddingLeft+','+paddingRight);
	update_arrow(); // update the back-to-top arrow
}

function set_margin_preset (left, right) {
	var bodydiv = document.getElementById('bodydiv');

	if (left == 'smal') {
		left = 100;
		right = 250;
		openNavPanel();
	} else if (left == 'normaal') {
		left = 100;
		right = 100;
		openNavPanel();
	} else if (left == 'breed') {
		left = 100;
		right = 42;
		openNavPanel();
	} else if (left == 'volledig') {
		left = 17;
		right = 5;
		closeNavPanel();
	}

	bodydiv.style.paddingLeft = left + 'px';
	bodydiv.style.paddingRight = right + 'px';

	if (!isIE) {
		bodydiv.style.width =
			(document.body.clientWidth - left - right) + 'px';
	}

	save_page_margins();

	destroyAll();
	onupdate_handler();
}

function place_margin_controls () {
}

function show_margin_controls (side) {
	destroyAll();

	var bodydiv = document.getElementById('bodydiv');
	var paddingLeft = parseInt(bodydiv.style.paddingLeft.match(/(\d+)/)[1]);
	var paddingRight = parseInt(bodydiv.style.paddingRight.match(/(\d+)/)[1]);

	var topbar = document.getElementById('topbar');
	var koptabel = document.getElementById('koptabel');
	var top = topbar.offsetHeight + koptabel.offsetHeight;

	var leftMargin = document.getElementById('leftmargin');
	leftMargin.style.height = (document.body.clientHeight - top) + 'px';
	leftMargin.style.left = paddingLeft + 'px';
	leftMargin.style.top = top + 'px';
	leftMargin.style.visibility = 'visible';

	var rightMargin = document.getElementById('rightmargin');
	rightMargin.style.height = leftMargin.style.height;
	rightMargin.style.left = (document.body.clientWidth - paddingRight) + 'px';
	rightMargin.style.top = leftMargin.style.top;
	rightMargin.style.visibility = 'visible';

	var slider = document.getElementById('marginslider');
	slider.style.top = Math.floor(document.body.clientHeight/2) + 'px';
	if (side == 'left') {
		slider.style.left = (leftMargin.offsetLeft + leftMargin.offsetWidth) + 'px';
	} else {
		slider.style.left = (rightMargin.offsetLeft - slider.width) + 'px';
	}
	slider.style.visibility = 'visible';
	whichMargin = side;
}

function hide_margin_controls () {
	document.getElementById('leftmargin').style.visibility = 'hidden';
	document.getElementById('rightmargin').style.visibility = 'hidden';
	document.getElementById('marginslider').style.visibility = 'hidden';
}


