
// ------  Browser Detection 

IE=false; IE4=false; NN=false; NN4=false; DOM=false; MAC=false;
if (navigator.platform.toLowerCase().indexOf('mac') != -1) MAC = true;
if (document.all) IE = true;
if (navigator.appVersion.toLowerCase().indexOf('msie 4') != -1) IE4 = true;
if (navigator.appName.toLowerCase().indexOf('netscape') != -1) {
	NN = true;
	if (parseInt(navigator.appVersion) == 4) NN4 = true;
}
if ((NN && !NN4) || (IE && !IE4)) DOM = true;

// ------ Environment Detection

var windowWidth; var windowHeight; var windowScrollX; var windowScrollY;
function detectEnvironmentProperties() {
	windowWidth = (NN) ? window.innerWidth : document.body.clientWidth;
	windowHeight = (NN) ? window.innerHeight : document.body.clientHeight;
	windowScrollX = (NN) ? window.pageXOffset : document.body.scrollLeft;
	windowScrollY = (NN) ? window.pageYOffset : document.body.scrollTop;
}

// ------  Url functions

function parseValueFromUrl(name) {
	var url = document.location.href;
	var value = null;
	if(url.indexOf('?') != -1) {
		var pars = url.substring(url.indexOf('?') + 1, url.length);
		if(pars.lastIndexOf('#') != -1) pars = pars.substring(0, pars.lastIndexOf('#'));
		pars = pars.split('&');
		for (i=0; i<pars.length; i++) {
			var loc = pars[i].indexOf('=');
			pName = pars[i].substring(0, loc);
			pValue = unescape(pars[i].substring(loc + 1, pars[i].length));
			if (name==pName) value = pValue;
		}
	}
	return value;
}
	
// ------  Window functions
	
function openWindow(url, name, w, h, menubar, scrollbars) {
	var x = parseInt(screen.width / 2) - parseInt(w/2);
	var y = parseInt(screen.height / 2) - parseInt(h/2);
	var parameters = 'toolbar=0, location=0, menubar=' + menubar + ', scrollbars=' + scrollbars + ', width=' + w + ', height=' + h + ', top=' + y + ', left=' + x + ', screenY=' + y + ', screenX=' + x;
	var win = window.open(url, name, parameters);
	win.focus();
}

// ------ Image functions

function replaceImage(id, oldStr, newStr) {
	element(id).src = document.getElementById(id).src.replace(oldStr, newStr);
}

function changeImage(id, loc) {
	element(id).src = loc;
}

function getImageLeft(img, ly) {
	(ly != null) ? layerloc = element(ly).offsetLeft : layerloc = 0;
	loc = element(img).offsetLeft;
	loc += layerloc;
	return parseInt(loc);
}

function getImageTop(img, ly) {
	(ly != null) ? layerloc = element(ly).offsetTop : layerloc = 0;
	loc = element(img).offsetTop;
 loc += layerloc;
	return parseInt(loc);
}

function cacheImages(imgList, path) {
	if (path == null) path = '';
	var images = new Array();
	for (var i=0; i<imgList.length; i++) {
		images[i] = new Image();
		images[i].src = path + imgList[i];
	}
}	

// ------ Layer functions

function writeToLayer(ly, str) {
	element(ly).innerHTML = str + '\n\n';
}

function moveLayer(ly, x, y) {
	element(ly).style.left = x + 'px';
	element(ly).style.top = y + 'px';
}	

function clipLayer(ly, l, r, t, b) {
	element(ly).style.clip = 'rect(' + t + 'px ' + r + 'px ' + b + 'px ' + l + 'px)';
} 

function simpleClipLayer(ly, w, h) {
	element(ly).style.clip = 'rect(0px ' + w + 'px ' + h + 'px 0px)';
} 

function scaleLayer(ly, w, h) {
	element(ly).style.width = w + 'px';
	element(ly).style.height = h + 'px';
}

function showLayer(ly) {
	element(ly).style.visibility = 'visible';
}

function hideLayer(ly) {
	element(ly).style.visibility = 'hidden';
}

function isVisible(ly) {
	return (element(ly).style.visibility == 'visible');
}

// ------ String functions

function replaceChars(str, oldChar, newChar) {
	var newStr = '';
	for (var i=0; i < str.length; i++) {
		(str.charAt(i) == oldChar) ? newStr += newChar : newStr += str.charAt(i);
	}
	return newStr;
}

function toId(s) {
	var str = s.toLowerCase();
	var badChars = '\'.-+=\\\/" &';
	var newStr = '';
	for (var i=0; i<str.length; i++) {
		if (badChars.indexOf(str.charAt(i)) == -1) newStr += str.charAt(i);
	}
	return newStr;
}

// ------ Layer Object

function Layer(id) {
	this.id = id;
	this.pos = new Point();
	this.size = new Point();
	this.init = Layer_init;
	this.hide = Layer_hide;
	this.show = Layer_show;
	this.move = Layer_move;
	this.clip = Layer_clip;
}

function Layer_init() {
	this.pos.set(element(this.id).offsetLeft, element(this.id).offsetTop);
	this.size.set(element(this.id).offsetWidth, element(this.id).offsetWidth);
}

function Layer_hide() {
	hideLayer(this.id);
}

function Layer_show() {
	showLayer(this.id);
}

function Layer_move(x, y) {
	moveLayer(this.id, x, y);
}

function Layer_clip(l, r, t, b) {
	clipLayer(this.id, l, r, t, b);
}

// ------ Point Object (or vector)

function Point() {
	this.set = Point_set;
	this.absDistance = Point_absDistance;
}

function Point_set(x, y) {
	this.x = x;
	this.y = y;
}

function Point_absDistance() {
	return Math.sqrt((this.x * this.x) + (this.y * this.y));;
}

function getPointDistance(p1, p2) {
	var hDist = p1.x - p2.x;
	var vDist = p1.y - p2.y;
	return Math.sqrt((hDist * hDist) + (vDist * vDist));
}

// ------ Cookies

function setCookie(name, value) {
	var d = new Date(); var then = exp.getTime() + (3 * 365 * 24 * 60 * 60 * 1000); d.setTime(then); d = d.toGMTString();
	document.cookie = name + "=" + escape(value) + "; expires=" + d + "; path=/";
}

function getCookie(name) {
	var value = null; var cookies = document.cookie.split('; ');
	for (var i=0; i<cookies.length; i++) {
		var loc = cookies[i].indexOf('='); var cName = cookies[i].substring(0, loc); var cValue = unescape(cookies[i].substring(loc+1, cookies[i].length));
		if (name==cName) value = cValue;
	}
	return value;
}

function deleteCookie(name) {
	var d = new Date(); var then = exp.getTime() - (24 * 60 * 60 * 1000); d.setTime(then); d = d.toGMTString();
	document.cookie = name + "=-1; expires=" + d + "; path=/";
}

// ------ Other functions

function element(id) {
	var e;
	IE4  ? e = document.all[id] : e = document.getElementById(id);
	return e; 
}

function pass(func) {
	eval(func);
}






