function setCookie( name, value, expires, path, domain, secure )
{
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );
	
	if ( expires )
	{
		// Expires for days goes here.
		expires = expires * 1000 * 60 * 60 * 24;
		// This will be minutes for now.
		//expires = expires * 1000 * 60;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	
	document.cookie = name + "=" +escape(value) +
		((expires) ? ";expires=" + expires_date.toGMTString() : "" ) +
		((path) ? ";path=" + path : "" ) +
		((domain) ? ";domain=" + domain : "" ) +
		((secure) ? ";secure" : "" );
}
function getCookie(name)
{
	if (document.cookie.length>0)
	  {
	  c_start=document.cookie.indexOf(name + "=");
	  if (c_start!=-1)
	    {
	    c_start=c_start + name.length+1;
	    c_end=document.cookie.indexOf(";",c_start);
	    if (c_end==-1) c_end=document.cookie.length;
	    return unescape(document.cookie.substring(c_start,c_end));
	    }
	  }
	return "";
}
function evtObserve(element, name, observer, useCapture) {
	if (typeof element == 'string')
		element = document.getElementById(element);
	if (element.addEventListener) {
		element.addEventListener(name, observer, useCapture);
	} else if (element.attachEvent) {
		element.attachEvent('on' + name, observer);
	}
}
function evtRemove(element, name, observer) {
	if (typeof element == 'string')
		element = document.getElementById(element);
	if (element.removeEventListener) {
		element.removeEventListener(name, observer, false);
	} else if (element.attachEvent) {
		element.detachEvent('on' + name, observer);
	}
}

var PopUpClass = function() {this.init.apply(this, arguments);}
PopUpClass.prototype = {
	measurement: function(size, fit) {
		this.size = 	parseFloat(size);
		this.units = 	size.substr(this.size.toString().length);
		this.fit = 		(fit == "undefined" || this.units == "%") ? false : fit;
		this.mode = 	false;
		
		this.getIE = function(clientSize, scrollOffset) {
			params = {apply:true, margin:"", size:null, offset:null};
			var percentage = -1;
			var changeSize = this.size * 1.2;
			if (this.units == "%") percentage = this.size;
			if (percentage == -1 && this.fit && clientSize < changeSize) percentage = 80;
			if (percentage >= 0) {
				params.margin = "";
				params.size = parseInt((clientSize * (percentage / 100))) + "px";
				params.offset = parseInt(scrollOffset + (clientSize * ((100 - percentage) / 200))) + "px";
			} else {
				params.margin = "";
				params.size = this.size + this.units;
				params.offset = scrollOffset + ((clientSize - this.size) / 2) + this.units;
			}
			return params;
		}

		// This is more powerful than the ie version and only resets when a resize crosses the client window size.
		this.get = function(clientSize) {
			params = {apply:false, margin:null, size:null, offset:null};
			var percentage = -1;
			//var changeSize = this.size * (1 + ((100 - this.size) / 100)));
			var changeSize = this.size * 1.2;
			if (!this.mode) params.apply = true;
			if (this.units == "%") percentage = this.size;
			if (percentage == -1 && this.fit) {
				if (clientSize < changeSize) percentage = 80;
				if (clientSize < changeSize && this.mode != "narrow") {
					this.mode = "narrow";
					params.apply = true;
				}
				if (clientSize >= changeSize && this.mode != "wide") {
					this.mode = "wide";
					params.apply = true;
				}
			}
			if (params.apply) {
				if (percentage >= 0) {
					params.margin = "";
					params.size = percentage + "%";
					params.offset = ((100 - percentage) / 2) + "%";
				} else {
					params.margin = "-" + (this.size / 2) + this.units;
					params.size = this.size + this.units;
					params.offset = "50%";
				}
			}
			return params;
		}
	},
	isoldie:false,
	hideDiv:null,
	popupDiv:null,
	w:null,
	h:null,
	init: function(hide, popup, width, height, widthFit, heightFit) {
		this.h = new this.measurement(height, heightFit);
		this.w = new this.measurement(width, widthFit);
		this.hideDiv = document.getElementById(hide);
		this.popupDiv = document.getElementById(popup);
		// we will handle ie 6 different from everything else.
		ietest = navigator.userAgent.indexOf("MSIE");
		if (ietest > 0) {
			iever = parseFloat(navigator.userAgent.substring(ietest+5));
			if (iever < 7) this.isoldie = true;
		}
		this.hideDiv.style.display = "none";
		this.popupDiv.style.display = "none";
		if (this.isoldie) {
			this.hideDiv.style.position = "absolute";
			this.popupDiv.style.position = "absolute";
			var sh = document.documentElement ? document.documentElement.scrollHeight : document.body.scrollHeight;
			if(document.body.scrollHeight) sh = Math.max(sh,document.body.scrollHeight)
			var sw = document.documentElement.scrollWidth ? document.documentElement.scrollWidth : document.body.scrollWidth;
			this.hideDiv.style.top = 0;
			this.hideDiv.style.left = 0;
			//alert("height: " + sh + "\nwidth: " + sw);
			this.hideDiv.style.height = sh + "px";
			this.hideDiv.style.width = sw + "px";
		} else {
			this.hideDiv.style.position = "fixed";
			this.hideDiv.style.width = "100%";
			this.hideDiv.style.height = "100%";
			this.hideDiv.style.top = 0;
			this.hideDiv.style.left = 0;
			this.popupDiv.style.position = "fixed";
		}
		this.hideDiv.style.overflow = "hidden";
		//this.display();
	},
	hide:function() {
		this.hideDiv.style.display = "none";
		this.popupDiv.style.display = "none";
		//evtRemove(window, "resize", this.adjust.bind(this));
		//evtRemove(this.hideDiv, "click", this.hide.bind(this));
		fnHide = this.hide;
		fnAdjust = this.adjust;
		obj = this;
		evtRemove(this.hideDiv, "click", function() {
			return fnHide.apply(obj);
		});
		evtRemove(window, "resize", function() {
			return fnAdjust.apply(obj);
		});
	},
	display:function () {
		this.adjust();
		this.hideDiv.style.display = "block";
		this.popupDiv.style.display = "block";
		// Event handlers
		fnHide = this.hide;
		fnAdjust = this.adjust;
		obj = this;
		evtObserve(this.hideDiv, "click", function() {
			return fnHide.apply(obj);
		});
		evtObserve(window, "resize", function() {
			return fnAdjust.apply(obj);
		});
		//evtObserve(this.hideDiv, "click", this.hide.bindEvent(this));
		//evtObserve(window, "resize", this.adjust.bind(this));
	},
	adjust:function () {
		var cw = document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth;
		var ch = document.documentElement ? document.documentElement.clientHeight : document.body.clientHeight;
		var st = document.documentElement ? document.documentElement.scrollTop : pageYOffset;
		var sl = document.documentElement ? document.documentElement.scrollLeft : pageXOffset;
		if (this.isoldie) {
			paramsW = this.w.getIE(cw, sl);
			paramsH = this.h.getIE(ch, st);
		} else {
			paramsW = this.w.get(cw);
			paramsH = this.h.get(ch);
		}
		if (paramsW.apply) {
			this.popupDiv.style.marginLeft = paramsW.margin;
			this.popupDiv.style.left = paramsW.offset;
			this.popupDiv.style.width = paramsW.size;
		}
		if (paramsH.apply) {
			this.popupDiv.style.marginTop = paramsH.margin;
			this.popupDiv.style.top = paramsH.offset;
			this.popupDiv.style.height = paramsH.size;
		}
	}
}

