// archiflow.js
// (c) 2003 ArchiTECH Information Designs, Inc
// http://architech.com/
// All rights reserved
// You may NOT use this script for any non-personal sites, either commercial or non-profit
// You may use this script for personal use if you keep this header and the entire script intact
//
// handles DHTML repositioning and resizing of objects 

// must pre-define objs array in <head></head> as objs[0] = '...' as:
// 	name [x=xpos] [y=ypos] [w=width] [h=height] [xfs=fix|scale] [yfs=fix|scale] [wfs=fix|scale] [hfs=fix|scale] [lr=left|right]
// where:
//		name :: objname
// 	xpos & ypos :: x, y placement (defaults: 0, 0)
// 	width & height :: size of obj (defaults: browser width & height)
// 	xfs, yfs, wfs, hfs :: x, y, w, h fixed ('fix') or scaled ('scale') (defaults: 'fix')
// 	lr :: left ('left') or right ('right') alignment (default: 'left')


// these values are reset by checking actual browser values
var bw = 780;				// default browser width
var bh = 430;				// default browser height

// minimums: does not resize browser, but won't scale smaller than these values
// can be used to prevent overlaps
// these values are reset with initPage call
var minbw = 600;				// default minimum allowed browser width
var minbh = 350;				// default minimum allowed browser height

var x=0; 
var y=0; 
var w=bw; 
var h=bh; 
var xfs='fix'; 
var yfs='fix'; 
var wfs='fix'; 
var hfs='fix'; 
var lr='left';	

var NN4 = 0;				// not Netscape 4x

// set up default parameters
var objdefaults = new Array()
objdefaults[0] = '';
objdefaults[1] = 0;
objdefaults[2] = 0;
objdefaults[3] = bw;
objdefaults[4] = bh;
objdefaults[5] = 'fix';
objdefaults[6] = 'fix';
objdefaults[7] = 'fix';
objdefaults[8] = 'fix';
objdefaults[9] = 'left';

function getBrowseWH() {
	if (self.innerWidth) {
		bw = self.innerWidth - 18;	// NN7 scrollbar adjustment - ugh!
		bh = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientWidth) {
		bw = document.documentElement.clientWidth;
		bh = document.documentElement.clientHeight;
	} else if (document.body) {
		bw = document.body.clientWidth;
		bh = document.body.clientHeight;
	}
	bw = (bw<minbw) ? minbw : bw;
	bh = (bh<minbh) ? minbh : bh;
}

function getObj(name) {
	if (document.getElementById) {
		this.obj = document.getElementById(name);
		this.style = document.getElementById(name).style;
	} else if (document.all) {
		this.obj = document.all[name];
		this.style = document.all[name].style;
	} else if (document.layers) {
		this.obj = getObjNN4(document,name);
		this.style = this.obj;
		NN4 = 1;
  }
}

function getObjNN4(obj,name) {
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++) {
		if (x[i].id == name)
			foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}

function setupObj(objname) {
	var obj = new getObj(objname);
	if (NN4) return; // use HTML defaults for NN4 due to render bug
	if (lr=='right') { 
		if (wfs!='fix') {	
			w = Math.floor(bw*w/800);	// scale the width
			wfs='fix';		// width is now scaled so set flag to 'fix' so it is not scaled again
		}
		x = bw-w-x;			// this is the new x from the left
	}
	obj.style.left = (xfs=='fix') ? x : Math.floor(bw*x/800);
	obj.style.top = (yfs=='fix') ? y : Math.floor(bh*y/600);
	obj.style.width = (wfs=='fix') ? w : Math.floor(bw*w/800);
	obj.style.height = (hfs=='fix') ? h : Math.floor(bh*h/600);
}

function setupPage(refresh) { // refresh: onLoad=0, onResize=1
	var args;
	var parts;
	var objname = '';

	getBrowseWH();
		// setupObj as:
		// 	objname: name of object
		// 	x, y, w, h : positioning -- if using 'right' x is from right margin
		// 	xfs, yfs, wfs, hfs : 'fix' || 'scale'
		// 	lr : 'left' || 'right' -- from left or right margin
	for (objndx=0; objndx<objs.length; objndx++) {
		x=0; y=0; w=bw; h=bh; xfs='fix'; yfs='fix'; wfs='fix'; hfs='fix'; lr='left';	
		args = objs[objndx].split(' ');
		objname=args[0];
		for (argndx=1; argndx<args.length; argndx++) {
			parts = args[argndx].split('=');
			switch(parts[0]) {
				case 'x': x = Number(parts[1]); break;
				case 'y': y = Number(parts[1]); break;
				case 'w': w = Number(parts[1]); break;
				case 'h': h = Number(parts[1]); break;
				case 'xfs': xfs = parts[1]; break;
				case 'yfs': yfs = parts[1]; break;
				case 'wfs': wfs = parts[1]; break;
				case 'hfs': hfs = parts[1]; break;
				case 'lr': lr = parts[1]; break;
				default: alert('oops');
			}
		}
		setupObj(objname);
	}
}

function initPage(minw, minh) {
	minbw = minw;
	minbh = minh;
	setupPage(0);
}

function refreshPage() {
	if (NN4) { // must reload NN4 if refresh due to render bugs.
		window.location.href = window.location.href;
		return;
	}
	setupPage(1);
}

