/*
 * zlstCore.js
 *
 * Copyright (c) 2007-2009 by Zelestra, ZELESTRA.COM. All Rights Reserved.
 * Version 2.11 2009-04-27
 * Requires: prototype.js version 1.6
 */

// Public Functions

function closeWindow() {
    self.close();
}

function findPosition(oElement) {
	if(typeof(oElement.offsetParent) == null)
		return [oElement.x,oElement.y];
	for(var posX = 0,posY = 0;oElement;oElement = oElement.offsetParent) {
	  posX += oElement.offsetLeft;
	  posY += oElement.offsetTop;
	}
	return [posX,posY];
}

function getLinkEnabled(anchor) {
	if (!anchor)
        return false;
    return !$(anchor).hasClassName("disabled");
}

function openAlertWindow(url,target,width,height) {
	var popUpWinRef = window.open(url,target,'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,fullscreen=0,width=' + width +
		',height=' + height + ',top=' + ((window.screen.availHeight / 2) - (height / 2)) + ',left=' +((window.screen.availWidth / 2) - (width / 2)));
	if (!popUpWinRef)
		alert("Please disable your pop-up blocker for this site and try again.");
	else
		popUpWinRef.focus();
    return popUpWinRef;
}

function openGlobalAlerts() {
	if (document.globalAlerts) {
		for (var i = 0; i < document.globalAlerts.length; ++i) {
			var str = document.globalAlerts[i];
			if (str && (str.length > 0))
				alert(str);
		}
		document.globalAlerts = null;
	}
}

function openPopUp(url, target, width, height) {
    if (document.prevPopUpUrl) {
		if ((document.prevPopUpUrl == url) &&
			(document.prevPopUpTarget == target) &&
			(Math.abs(new Date().getTime() - document.prevPopUpTime) < 1000))
			return null;
	}
	document.prevPopUpUrl = url;
	document.prevPopUpTarget = target;
	document.prevPopUpTime = new Date().getTime();
    var count = 0;
    var popUpLink = PvtPopUpLink;
    var win = window.opener;
    while(win != null) {
		try {
			if (win.PvtPopUpLink == null)
				break;
			popUpLink = win.PvtPopUpLink;
			win = win.opener;
		} catch(err) {
			break;
		}
    }
    if (popUpLink.window == null) {
        popUpLink.top = 30;
        popUpLink.left = 30;
        popUpLink.window = new Object();
    }
    for (var item in popUpLink.window) {
        if (popUpLink.window[item].closed)
            delete popUpLink.window[item];
        else
            count = count + 1;
    }
    if (count == 0) {
        popUpLink.top = 30;
        popUpLink.left = 30;
    }
   	var popUpWinRef = window.open(url, target, "width=" + width + ", height=" + height +
        ", toolbar=0, location=0, directories=0, status=1, menubar=0, scrollbars=1, resizable=1, left=" +
        popUpLink.left + ", top=" + popUpLink.top + ", screenX=" + popUpLink.left + ", screenY=" + popUpLink.top);
	if (!popUpWinRef)
		alert("Please disable your pop-up blocker for this site and try again.");
	else {
	   if (popUpLink.window[target] == null) {
			popUpLink.top = popUpLink.top + 30;
			if (popUpLink.top >= 160) {
				popUpLink.top = 30;
				popUpLink.left = popUpLink.left + 30;
			}
			if (popUpLink.left >= 160) {
				popUpLink.top = 30;
				popUpLink.left = 30;
			}
			popUpLink.window[target] = popUpWinRef;
		}
		popUpWinRef.focus();
	}
    return popUpWinRef;
}

function openWindow(url) { // [target]
	if (arguments.length > 1)
		var target = arguments[1];
	else
		var target = "_" + url.hashCode();
    if (document.prevPopUpUrl) {
		if ((document.prevPopUpUrl == url) &&
			(document.prevPopUpTarget == target) &&
			(Math.abs(new Date().getTime() - document.prevPopUpTime) < 1000))
			return null;
	}
	document.prevPopUpUrl = url;
	document.prevPopUpTarget = target;
	document.prevPopUpTime = new Date().getTime();
	var popUpWinRef = window.open(url,target,"toolbar=1, location=1, directories=1, status=1, menubar=1, scrollbars=1, resizable=1");
	if (!popUpWinRef)
		alert("Please disable your pop-up blocker for this site and try again.");
	else
		popUpWinRef.focus();
   	return popUpWinRef;
}

function preloadImage(path) {
	if (!document.preloadedImages) {
		document.preloadedImages = new Array();
	}
	var image = new Image();
	image.src = path;
	document.preloadedImages.push(image);
}

function setLinkEnabled(anchor,enabled) {
	if (!anchor)
        return;
    anchor = $(anchor);
    if (enabled) {
   		anchor.removeClassName("disabled");
   		anchor.style.cursor = "pointer";
   	} else {
   		anchor.addClassName("disabled");
   		anchor.style.cursor = "default";
   	}
}

function setListener(element,type,fnc) {
	if (!element)
		return;
	Event.observe(element,type,fnc);
}

function setPopUpLink(anchor,width,height) { // [,target[,href]]
    if (anchor == null)
        return;
    if (arguments.length > 3)
        var target = arguments[3];
    else
        var target = anchor.target;
    if (arguments.length > 4)
        var href = arguments[4];
    else
        var href = anchor.href;
    anchor.target = "";
    new PvtPopUpLink(anchor,href,target,width,height);
}

function setSimpleLink(anchor) { // [,fnc|href]
    if (!anchor)
        return;
    anchor = $(anchor);
    if (arguments.length > 1) {
        var fncOrHref = arguments[1];
	} else
    	var fncOrHref = anchor.href;
   	if ($(anchor).hasClassName("mouseUp")) {
    	Event.observe(anchor,"mouseover",pvtOnMouseOverHandler.bindAsEventListener(anchor));
    	Event.observe(anchor,"mouseout",pvtOnMouseOutHandler.bindAsEventListener(anchor));
    	Event.observe(anchor,"mousedown",pvtOnMouseDownHandler.bindAsEventListener(anchor));
    	Event.observe(anchor,"mouseup",pvtOnMouseUpHandler.bindAsEventListener(anchor,fncOrHref));
    } else {
	   	Event.observe(anchor,"click",pvtOnClickHandler.bindAsEventListener(anchor,fncOrHref));
    }
	if (!anchor.hasClassName("disabled"))
   		anchor.style.cursor = "pointer";
   	else
   		anchor.style.cursor = "default";
	anchor.onclick = function() { return false; }; // hack for Safari
}

function setWindowLink(anchor) { // [,target[,href]]
    if (anchor == null)
        return;
    if (arguments.length > 1)
        var target = arguments[1];
    else
        var target = anchor.target;
    if (arguments.length > 2)
        var href = arguments[2];
    else
        var href = anchor.href;
    anchor.target = "";
    new PvtWindowLink(anchor,href,target);
}

function setTextFocusById(elementName) {
    var element = $(elementName);
    if (element) {
    	element.focus();
   		element.select();
	}
}

function trimInnerHTML(element,maxWidth) {
	if (maxWidth < 0)
		return;
    if (!element)
    	return;
	if (element.offsetWidth <= maxWidth)
    	return;
    var len = element.innerHTML.length;
    element.innerHTML = element.innerHTML + "...";
    while(len > 0) {
    	--len;
    	element.innerHTML = element.innerHTML.substring(0,len) + "...";
		if (element.offsetWidth <= maxWidth)
    		return;
	}
}

// Private Classes

function PvtPopUpLink(anchor,url,target,width,height) {
    this.url = url;
    this.target = target;
    this.width = width;
    this.height = height;
    setSimpleLink(anchor,this.pop.bindAsEventListener(this));
}

PvtPopUpLink.prototype.pop = function(event) {
    openPopUp(this.url,this.target + "_" + this.url.hashCode(),this.width,this.height);
    Event.stop(event);
}

function PvtWindowLink(anchor,url,target) {
    this.url = url;
    this.target = target;
    setSimpleLink(anchor,this.pop.bindAsEventListener(this));
}

PvtWindowLink.prototype.pop = function(event) {
    openWindow(this.url,this.target + "_" + this.url.hashCode());
    Event.stop(event);
}

String.prototype.hashCode = function() {
    var h = 0;
    for (var i = this.length-1; i >= 0; --i) {
        h ^= this.charCodeAt(i);
        for (var n = 0; n < 3; ++n) {
            var m = (h = h<<7 | h>>>25) & 150994944;
            h ^= m ? (m == 150994944 ? 1 : 0) : 1;
        }
    }
    h = Math.abs(h);
    if (h > 999999999)
        h = h - 1000000000;
    return h;
}

// Private Functions

function pvtOnClickHandler(event,fncOrHref) {
	if (!this.hasClassName("disabled")) {
		if (typeof fncOrHref == "function")
			fncOrHref(event);
		else
			window.location.href = fncOrHref;
	}
	Event.stop(event);
    return false;
}

function pvtOnMouseOverHandler(event) {
	this.addClassName("mouseOver");
	this.removeClassName("mouseDown");
	this.removeClassName("mouseUp");
    return false;
}

function pvtOnMouseOutHandler(event) {
	this.addClassName("mouseUp");
	this.removeClassName("mouseDown");
	this.removeClassName("mouseOver");
    return false;
}

function pvtOnMouseDownHandler(event) {
	this.addClassName("mouseDown");
	this.removeClassName("mouseOver");
	this.removeClassName("mouseUp");
	Event.stop(event);
    return false;
}

function pvtOnMouseUpHandler(event,fncOrHref) {
	var isDown = this.hasClassName("mouseDown");
	this.addClassName("mouseOver");
	this.removeClassName("mouseDown");
	this.removeClassName("mouseUp");
	if (isDown) {
		if (!this.hasClassName("disabled")) {
			if (typeof fncOrHref == "function")
				fncOrHref(event);
			else
				window.location.href = fncOrHref;
		}
	}
	Event.stop(event);
    return false;
}

// Load Scripts

// get document parameters
document.parameters = new Object();
if (window.document.URL.indexOf("?") > 0) {
	var params = document.URL.substr(document.URL.indexOf("?")+1).split("&");
	for(var i=0; i < params.length; ++i) {
		var param =  params[i].split("=");
		document.parameters[param[0]]=param[1];
	}
}

// perform load
Event.observe(window,"load",openGlobalAlerts);