/*
* @desc fimplémentation de la fonction getElementByClassName 
* @param DOMElement 
* @param string tagName ou * pour tous 
* @param string className
* @return array(DOMElement)
*/
function pg_get_elements_by_class_name(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i = 0; i < arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements[arrReturnElements.length] = oElement;
		}
	}
	return (arrReturnElements)
}
/*
* @desc fourni un raccourci pour document.getElementById
* @param string id de l'élément 
* @return DOMElement 
*/
function pg_$() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string') {
			element = document.getElementById(element);
		}
		if (arguments.length == 1) {
			return element;
		}
		elements[elements.length] = element;
	}
	return elements;
}
/*
* @desc retourne une référence à la méthode d'un objet 
* @param object
* @param string nom de la méthode 
* @return function 
*/
function pg_get_method( o_, fct_) {
	return( function(){o_[ fct_]()});
}
/*
* @desc mini moteur de template 
* @param string template 
* @param object valeurs à remplacer 
* @return string 
*/
function pg_replace(s, o) {
	for (var i in o) {
		var r = new RegExp("#\{" + i + "\}", "g");
		s = s.replace(r, o[i]);
	}
	return s;
}
/*
* @desc vérification d'une adresse e-mail 
* @param string email
* @param string message d'erreur
* @param string email par défaut ds le formulaire 
* @return boolean 
*/
function pg_valid_email(s) {
	s = pg_trim(s);
	if (s.length == 0) {
		var r = false;	 
	} else if (s.search(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*[^._-]@[a-z0-9-]+(\.[a-z0-9]{2,4})$/i) == -1) {
		var r = false;
	} else {
		var r = true;
	}
	if (pg_valid_email.arguments.length > 2) {
		if (s == pg_valid_email.arguments[2]) {
			var r = false;
		}
	}
	
	if (r == false) {
		if (pg_valid_email.arguments[1].length > 0) {
			alert(pg_valid_email.arguments[1]);
		}
	}
	return r;
}
/*
* @desc nettoyage des espaces blancs droits d'une chaine
* @param string
* @return string 
*/
function pg_rtrim(s) {
	var r = /\s+$/g;
	return s.replace(r, '');
}
/*
* @desc nettoyage des espaces blancs gauches d'une chaine
* @param string
* @return string 
*/
function pg_ltrim(s) {
	var r = /^\s+/g;
	return s.replace(r, '');
}
/*
* @desc nettoyage des espaces blancs d'une chaine
* @param string
* @return string 
*/
function pg_trim(s) {
	var tmp = pg_rtrim(s);
	return pg_ltrim(tmp);
}
/*
* @desc premiere lettre d'une chaine en majuscule 
* @param string
* @return string 
*/
function pg_ucfirst(v) {
	if (v.length > 0) {
		return v.charAt(0).toUpperCase() + v.substring(1).toLowerCase();
	}
}
/**
* @args string
* @desc Posistionnement fixe d'un element 
* @return void
**/
pg_follow_scroll_elements = new Array();
var pg_follow_scroll = function() {
	this.first = true;
	this.document = new pg_document();
	if (pg_follow_scroll.arguments.length > 0) {
		for (var i = 0; i < pg_follow_scroll.arguments.length; i ++) {
			var element = pg_follow_scroll.arguments[i];
			if (document.getElementById(element)) {
				this.add_element(element);
			}
		}
		this.place_element();
	}
}
pg_follow_scroll.prototype.add_element = function(e) {
	pg_follow_scroll_elements.push(e);
	pg_$(e).pg_right = (pg_$(e).style.right)?parseInt(pg_$(e).style.right):0;
	pg_$(e).pg_left = (pg_$(e).style.left)?parseInt(pg_$(e).style.left):0;
	pg_$(e).pg_top = (pg_$(e).style.top)?parseInt(pg_$(e).style.top):0;
	pg_$(e).pg_bottom = (pg_$(e).style.bottom)?parseInt(pg_$(e).style.bottom):0;
	pg_$(e).pg_width = (pg_$(e).style.width)?parseInt(pg_$(e).style.width):0;
	pg_$(e).pg_height = (pg_$(e).style.height)?parseInt(pg_$(e).style.height):0;
}
pg_follow_scroll.prototype.place_element = function() {
	for (var i = 0; i < pg_follow_scroll_elements.length; i ++) {
		var e = pg_follow_scroll_elements[i];
		pg_$(e).style.position = 'absolute';
		if (pg_$(e).pg_left > 0) {
			pg_$(e).style.left = (this.document.scroll_left() + pg_$(e).pg_left) + 'px';
		} else {
			pg_$(e).style.left = (this.document.width() - pg_$(e).pg_width + this.document.scroll_left() - pg_$(e).pg_right) + 'px';
		}
		if (pg_$(e).pg_bottom > 0) {
			pg_$(e).style.top = (this.document.height() - pg_$(e).pg_height + this.document.scroll_top() - pg_$(e).pg_bottom) + 'px';
		} else {
			pg_$(e).style.top = this.document.scroll_top() + pg_$(e).pg_top + 'px';
		}
	}
	pg_add_event('window', 'onscroll', pg_get_method(this, 'place_element'));
}
/*
* @desc masquage d'un élément HTML 
* @param DOMelement
* @return void
*/
function pg_hide() {
	if (pg_hide.arguments.length > 0) {
		for (var i = 0; i < pg_hide.arguments.length; i ++) {
			var element = pg_hide.arguments[i];
			if (element) {
				element.style.display = 'none';
			}
		}
	}
}
/*
* @desc affichage d'un élément HTML 
* @params DOMelement
* @return void
*/
function pg_show() {
	if (pg_show.arguments.length > 0) {
		for (var i = 0; i < pg_show.arguments.length; i ++) {
			var element = pg_show.arguments[i];
			if (element) {
				element.style.display = 'block';
			}
		}
	}
}
/*
* @desc transformatyion d'un élément existant pour qu'il couvre le document 
* @params DOMelement e element
* @param string c hexcode 
* @param int o opacity ([0, 1])
* @return void
*/
function pg_overlay(e, c, o) {
	if (pg_$(e)) {
		pg_$(e).style.width = '100%';
		pg_$(e).style.height = '100%';
		pg_$(e).style.position = 'absolute';
		pg_$(e).style.backgroundColor = c;
		pg_opacity(e, o);
	}
}
/*
* @desc défini l'opacité d'un élément 
* @param DOMElement e element
* @param int o opacity
* @return void 
*/
function pg_opacity(e, o) {
	pg_$(e).style.opacity = o;
	pg_$(e).style.MozOpacity = o;
	pg_$(e).style.KhtmlOpacity = o;
	pg_$(e).style.filter = "alpha(opacity=" + (o * 100) + ")";
}

/*
* @desc coordonnées de la souris 
* @return object
*/
var pg_mouse_pos = {};
function pg_get_mouse(e) {
	if (document.getElementById && document.all) {
		// Internet explorer
		pg_mouse_pos.x = event.x+document.body.scrollLeft;
		pg_mouse_pos.y = event.y+document.body.scrollTop;
	} else if (document.getElementById) {
		// Netscape 6+
		pg_mouse_pos.x = e.pageX
		pg_mouse_pos.y = e.pageY
	}
}
/*
* 
*/
function pg_get_cookie_val(offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
	endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

/*
* @desc renvoie la valeur d'un cookie 
* @param string cookie name
* @return mixed 
*/
function pg_get_cookie(name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg) {
			return pg_get_cookie_val(j);
		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) {
			break;
		}
	}
	return 0;
}
/*
* @desc fixe la valeur d'un cookie 
* @param string cookie name 
* @param mixed cookie value 
* @return void 
*/
function pg_set_cookie(name, value) {  
	var argv = pg_set_cookie.arguments;
	var argc = pg_set_cookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	
	document.cookie = name + "=" + escape (value) + 
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
	((path == null) ? "" : ("; path=" + path)) +  
	((domain == null) ? "" : ("; domain=" + domain)) +    
	((secure == true) ? "; secure" : "");
}

/**
* Ajout d'un événement onload au document 
* Obsolète 
**/
function pg_onload(func) {
	if (window.addEventListener) {
		window.addEventListener("load", func, false);
	} else if (window.attachEvent) {
		window.attachEvent("onload", func);
	} else if (pg_$) {
		window.onload = func;
	}
}


/*
* 
*/
var pg_capping = function(session_name, max_value, expiration) {
	this.session_name = session_name;
	this.max_value = max_value;
	this.expiration = new Date();
	if (expiration > 0) {
		this.expiration.setTime(this.expiration.getTime() + (expiration * 3600 * 1000));
	} else {
		this.expiration = null;
	}
	this.value = pg_get_cookie(this.session_name);
	this.update();
}
pg_capping.prototype = {
	update: function() {
		if (this.max_value > 0) {
			this.value ++;
			pg_set_cookie(this.session_name.toString(), this.value.toString(), this.expiration);
		}
	}, 
	is_reached: function() {
		if (this.max_value == 0) {
			return false;
		} else if (this.value <= this.max_value) {
			return false;
		} else {
			return true;
		}
	}
};
/**
*
**/
var pg_blink_field = function(field, value1, value2,type) {
	if (pg_$(field)) {
		this.field = field;
		this.value1 = value1;
		this.value2 = value2;
		this.type = typeof type=="undefined"?"value":"innerHTML";
		this.do_blink = true;
		pg_add_event(this.field, 'onfocus', pg_get_method(this, 'stop'));
		pg_add_event(this.field, 'onblur', pg_get_method(this, 'start'));
		this.start();
	}
}
pg_blink_field.prototype = {
	alternate: function() {
		if (!pg_$(this.field)) {
			this.stop();
		}
		if (this.do_blink == true) {
			if(this.type=="value"){
				var v = pg_$(this.field).value
				if (v == this.value1) {
					pg_$(this.field).value = this.value2;
				} else if (v == this.value2) {
					pg_$(this.field).value = this.value1;
				}
			}else if(this.type=="innerHTML"){
				var v = pg_$(this.field).innerHTML;
				if (v == this.value1) {
					pg_$(this.field).innerHTML = this.value2;
				} else if (v == this.value2) {
					pg_$(this.field).innerHTML = this.value1;
				}
			}
			window.setTimeout(pg_get_method(this, 'alternate'), 500);
		}
	}, 
	stop: function() {
		this.do_blink = false;
		if(this.type=="value"){
			pg_$(this.field).value = "";
		}
	}, 
	start: function() {
		this.do_blink = true;
		this.alternate();
	}
};
/**
* @desc active un rollover sur une image 
* @param string id image 
* @param string url de l'image alternative 
* @return void 
**/
function pg_roll_over(img, altImgSrc) {
	if (pg_$(img)) {
		pg_$(img).onmouseover = function() {
			this.oldSrc = this.src;
			this.src = altImgSrc;
		}
		pg_$(img).onmouseout = function() {
			this.src = this.oldSrc;
		}
	}
}



/**
*
**/
var pg_events = {};
function pg_add_event(element, event, func) {
	if (element == 'window') {
		var real_element = window;
	} else if (element == 'document') {
		var real_element = window.document;
	} else if (typeof element == 'string') {
		var real_element = pg_$(element);
	} else {
		var real_element = element;
		element = real_element.id;
	}
	var key = element + '.' + event;
	
	
	if (!pg_events[key] || typeof pg_events[key] != 'object') {
		pg_events[key] = new Array();
	}
	pg_events[key][pg_events[key].length] = func;
	
	if (element == 'window') {
		pg_window_add_event(event, function() {
			pg_call_event(element, event);
		});
	} else {
		real_element[event] = function() {
			pg_call_event(element, event);
		}
	}
}
function pg_del_event(element, event, func) {
	var key = element + '.' + event;
	if (!pg_events[key] || typeof pg_events[key] != 'object') {
		return;
	}
	var new_events = new Array();
	for (var i = 0; i < pg_events[key].length; i ++) {
		if (pg_events[key][i] !== func) {
			new_events[new_events.length] = pg_events[key][i];
		}
	}
	pg_events[key] = new_events;
}
function pg_call_event(element, event) {
	var key = element + '.' + event;
	if (pg_events[key] && typeof pg_events[key] == 'object') {
		for (var i = 0; i < pg_events[key].length; i ++) {
			pg_events[key][i]();
		}
	}
}

function pg_window_add_event(event, func) {
	if (window.addEventListener) {
		event = event.substring(2, event.length);
		window.addEventListener(event, func, false);
	} else if (window.attachEvent) {
		window.attachEvent(event, func);
	} else if (pg_$) {
		window[event] = func;
	}
}



function pg_default_style(e)  {
	e = '#' + e;
	var default_style = '<style type="text/css">';
	var tags = new Array(
		'div', 'span', 'object', 'iframe', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote', 'pre', 
		'a', 'abbr', 'em', 'font', 'img', 'strong', 'sub', 'sup', 'ol', 'ul', 'li', 'fieldset', 'form', 
		'label', 'legend', 'table', 'caption', 'tbody', 'tfoot', 'thead', 'tr', 'th', 'td'
	);
	for (var i = 0; i < tags.length; i ++) {
		default_style += e + ', ' + e + ' ' + tags[i] + ' {\
		margin: 0; padding: 0; border: 0; outline: 0; font-weight: normal; font-style: inherit;\
		font-size: 100%; font-family: inherit;\
		}';
		default_style += e + ' :focus {\
		outline: 0;\
		}';
		default_style += e + ' :focus {\
		outline: 0;\
		}';
		default_style += e + ' ol, ' + e + ' ul {\
		list-style: none;\
		}';
		default_style += e + ' img {\
		display: inline;\
		}';
		default_style += e + ' table {\
		border-collapse: collapse;\
        border-spacing: 0;\
		}';
		default_style += e + ' caption, ' + e + ' th, ' + e + ' td {\
		text-align: left;\
		font-weight: normal;\
		vertical-align: top;\
		padding: 0;\
		}';
		default_style += e + ' input {\
		font-weight: normal;\
		border: 1px solid #CCC;\
		margin: 0;\
		}';
	}
	default_style += '</style>';
	return default_style;
}

var pg_zindex = 900;
var pg_content = function(id, content, width, height, position, style) {
	this.style = '';
	this.id = id;
	this.content = new String(content);
	this.width = width;
	this.height = height;
	if (!style) {
		style = {};
	}
	if (!position) {
		position = 'center';
	}
	this.document = new pg_document();
	this.visible = false;
	style.width = this.width + 'px';
	style.height = this.height + 'px';
	for (var i in style) {
		this.style += i + ': ' + style[i] + ';';
	}
	this.style += 'z-index: ' + (pg_zindex ++) + ';'
	this.setInitialXY(position);
}
pg_content.prototype = {
	render: function() {
		document.writeln(pg_default_style(this.id));
		document.writeln('<div id="' + this.id + '" style="' + this.style + '">');
		document.writeln(this.content);
		document.writeln('</div>');
	
		this.element = pg_$(this.id);
		this.visible = true;
		this.set_position();
	}, 
	erase: function() {
		this.element.style.visibility = 'hidden';
		this.element.innerHTML = '';
		this.visible = false;
	}, 
	set_position: function(x, y) {
		if (this.visible) {
			if (!x) {
				x = this.getX();
			}
			if (!y) {
				y = this.getY();
			}
			this.setX(x);
			this.setY(y);
		}
	}, 
	setX: function(x) {
		this.element.style.left = x + 'px';
	}, 
	setY: function(y) {
		this.element.style.top = y + 'px';
	}, 
	getRealX: function() {
		return parseInt(this.element.style.left);
	}, 
	getRealY: function() {
		return parseInt(this.element.style.top);
	}, 
	setInitialXY: function(position) {
		var tmp = position.split(' ');
		if (tmp.length > 1) {
			this.position = { _y: tmp[0], _x: tmp[1] };
		} else {
			this.position = { _x: 'center', _y: 'center' };
		}
	}, 
	getX: function() {
		switch (this.position._x) {
			case 'left':
				_x = this.document.scroll_left();
			break;
			
			case 'right':
				_x = this.document.width() - this.width + this.document.scroll_left();
			break;
			
			case 'center':
				_x = (this.document.width() - this.width) / 2 + this.document.scroll_left();
			break;
			
			default:
				_x = this.document.scroll_left() + parseInt(this.position._x);
			break;
		}
		return _x;
	}, 
	getY: function() {
		switch (this.position._y) {
			case 'top':
				_y = this.document.scroll_top();
			break;
			
			case 'bottom':
				_y = this.document.height() - this.height + this.document.scroll_top();
			break;
			
			case 'center':
				_y = ((this.document.height() - this.height) / 2) + this.document.scroll_top();
			break;
			
			default:
				_y = this.document.scroll_top() + parseInt(this.position._y);
			break;
		}
		return _y;
	}
}


pg_infopop_default = {
	vx: 10, vy: 10, update: 5
};
var pg_infopop = function(id, content, width, height, position, from) {
	this.pg_content = new pg_content(id, content, width, height, position, { position: 'absolute' });
	this.from = from;
	this.destX = this.pg_content.getX();
	this.destY = this.pg_content.getY();
	this.vx = pg_infopop_default.vx;
	this.vy = pg_infopop_default.vy;
	this.update = pg_infopop_default.update;
	
	this.open();
	
	switch (this.from) {
		case 'top':
			this.pg_content.setY(-height);
		break;
		
		case 'left':
			this.pg_content.setX(-width);
		break;
		
		case 'right':
			this.pg_content.setX(this.pg_content.document.width() + this.pg_content.document.scroll_left());
		break;
		
		case 'bottom':
		default:
			this.from = 'bottom';
			this.pg_content.setY(this.pg_content.document.height() + this.pg_content.document.scroll_top());
		break;
	}
	this.moveTo();
}
pg_infopop.prototype = {
	autoCloseAfter: function(t) {
		setTimeout(pg_get_method(this, 'close'), t);
	}, 
	moveTo: function() {
		if (this.from == 'bottom') {
			if (this.pg_content.getRealY() - this.vy > this.getDestY()) {
				this.pg_content.setY(this.pg_content.getRealY() - this.vy);
				needMove = true;
			} else {
				this.pg_content.setY(this.getDestY());
			}
		} else if (this.from == 'top') {
			if (this.pg_content.getRealY() + this.vy < this.getDestY()) {
				this.pg_content.setY(this.pg_content.getRealY() + this.vy);
				needMove = true;
			} else {
				this.pg_content.setY(this.getDestY());
			}
		} else if (this.from == 'left') {
			if (this.pg_content.getRealX() + this.vx < this.getDestX()) {
				this.pg_content.setX(this.pg_content.getRealX() + this.vx);
				needMove = true;
			} else {
				this.pg_content.setX(this.getDestX());
			}
		} else if (this.from == 'right') {
			if (this.pg_content.getRealX() - this.vx > this.getDestX()) {
				this.pg_content.setX(this.pg_content.getRealX() - this.vx);
				needMove = true;
			} else {
				this.pg_content.setX(this.getDestX());
			}
		}
		if (needMove) {
			window.setTimeout(pg_get_method(this, 'moveTo'), this.update);
		}
	}, 
	getDestX: function() {
		return this.destX + this.pg_content.document.scroll_left();
	}, 
	getDestY: function() {
		return this.destY + this.pg_content.document.scroll_top();
	}, 
	open: function() {
		this.pg_content.render();
		var link_close = pg_get_elements_by_class_name(this.pg_content.element, 'img', 'pg_pop_close');
		for (var i = 0; i < link_close.length; i ++) {
			link_close[i].onclick = pg_get_method(this, 'close');
			link_close[i].style.cursor = 'pointer';
		}
		pg_add_event('window', 'onscroll', pg_get_method(this.pg_content, 'set_position'));
		pg_add_event('window', 'onresize', pg_get_method(this.pg_content, 'set_position'));
	}, 
	close: function() {
		this.pg_content.erase();
		pg_del_event('window', 'onscroll', pg_get_method(this.pg_content, 'set_position'));
		pg_del_event('window', 'onresize', pg_get_method(this.pg_content, 'set_position'));
	}
};
/**
* @desc gestion pop dhtml 
* @include pg_document, pg_get_method, pg_add_event
**/
var pg_pop = function(id, content, width, height, position) {
	this.pg_content = new pg_content(id, content, width, height, position, { position: 'absolute' });
}
pg_pop.prototype = {
	autoCloseAfter: function(t) {
		setTimeout(pg_get_method(this, 'close'), t);
	}, 
	open: function() {
		this.pg_content.render();
		var link_close = pg_get_elements_by_class_name(this.pg_content.element, "img", "pg_pop_close");
		for (var i = 0; i < link_close.length; i ++) {
			link_close[i].onclick = pg_get_method(this, 'close');
			link_close[i].style.cursor = 'pointer';
		}
		pg_add_event('window', 'onscroll', pg_get_method(this.pg_content, 'set_position'));
		pg_add_event('window', 'onresize', pg_get_method(this.pg_content, 'set_position'));
	}, 
	close: function() {
		this.pg_content.erase();
		pg_del_event('window', 'onscroll', pg_get_method(this.pg_content, 'set_position'));
		pg_del_event('window', 'onresize', pg_get_method(this.pg_content, 'set_position'));
	}
};


var pg_dhtml_clic = function(id, content, width, height) {
	this.pg_background = new pg_content('b_' + id, '', 1, 1, 'top left', { position: 'absolute', display: 'none' });
	this.pg_background.render();
	this.pg_content = new pg_content(id, content, width, height, 'center center', { position: 'absolute', display: 'none' });
	this.pg_content.render();
	this.register_link();
}

pg_dhtml_clic.prototype = {
	register_link: function() {
		if (pg_$('pg_dhtml_clic_link')) {
			pg_add_event(pg_$('pg_dhtml_clic_link'), 'onclick', pg_get_method(this, 'open'));
		}
	}, 
	open: function() {
		pg_overlay(this.pg_background.element, '#000000', 0.6);
		pg_show(this.pg_background.element, this.pg_content.element);
		pg_add_event('window', 'onscroll', pg_get_method(this.pg_content, 'set_position'));
		pg_add_event('window', 'onresize', pg_get_method(this.pg_content, 'set_position'));
		pg_add_event('window', 'onscroll', pg_get_method(this.pg_background, 'set_position'));
		pg_add_event('window', 'onresize', pg_get_method(this.pg_background, 'set_position'));
		
		var link_close = pg_get_elements_by_class_name(this.pg_content.element, "img", "pg_pop_close");
		for (var i = 0; i < link_close.length; i ++) {
			link_close[i].onclick = pg_get_method(this, 'close');
			link_close[i].style.cursor = 'pointer';
		}
	}, 
	close: function() {
		pg_hide(this.pg_background.element, this.pg_content.element);
		pg_del_event('window', 'onscroll', pg_get_method(this.pg_content, 'set_position'));
		pg_del_event('window', 'onresize', pg_get_method(this.pg_content, 'set_position'));
		pg_del_event('window', 'onscroll', pg_get_method(this.pg_background, 'set_position'));
		pg_del_event('window', 'onresize', pg_get_method(this.pg_background, 'set_position'));
	}
};


var vmin = 2;
var vmax = 2;
var vr = 1;

var pg_float = function(id, content, width, height) {
	this.pg_content = new pg_content(id, content, width, height, 'top left', { position: 'absolute' });
	this.vx = vmin + vmax * Math.random();
	this.vy = vmin + vmax * Math.random();
	this.w = width;
	this.h = height;
	this.xx = 0;
	this.yy = 0;
	this.timer1 = null;
	this.flyspeed = 1;
	this.fly_enabled = true;
}
pg_float.prototype = {
	flystop: function() {
		this.flyspeed = 0;
	}, 
	flyrestart: function() {
		this.flyspeed = 1;
	}, 
	flydisable: function() {
		this.fly_enabled = false;
	}, 
	flyenable: function() {
		this.fly_enabled = true;
	}, 
	open: function() {
		this.pg_content.render();
		this.pg_content.element.onmouseover = pg_get_method(this, 'flystop');
		this.pg_content.element.onmouseout = this.pg_content.element.onmouseleave = pg_get_method(this, 'flyrestart');
		
		var ls_email = pg_get_elements_by_class_name(this.pg_content.element, 'input', 'pg_mail');
		for (var i = 0; i < ls_email.length; i ++) {
			pg_add_event(ls_email[i], 'onfocus', pg_get_method(this, 'flydisable'));
			pg_add_event(ls_email[i], 'onblur', pg_get_method(this, 'flyenable'));
		}
		this.move();
	}, 
	close: function() {
		this.pg_content.erase();
	}, 
	move: function() {
		if ( (this.flyspeed == 1) && (this.fly_enabled == true) ) {
			pageX = this.pg_content.document.scroll_left();
			pageW = this.pg_content.document.width();
			pageY = this.pg_content.document.scroll_top();
			pageH = this.pg_content.document.height();
			
			this.xx += this.vx;
			this.yy += this.vy;
			this.vx += vr * (Math.random() - 0.5);
			this.vy += vr * (Math.random() - 0.5);
			if (this.vx > vmax + vmin) {
				 this.vx = (vmax + vmin) * 2 - this.vx;
			} else if (this.vx < - (vmax + vmin)) {
				this.vx = -(vmax + vmin) * 2 - this.vx;
			}
			if (this.vy > vmax+vmin) {
				this.vy = (vmax + vmin) * 2 - this.vy;
			} else if (this.vy < - (vmax + vmin)) {
				this.vy = - (vmax + vmin) * 2 - this.vy;
			}
			if (this.xx <= pageX){
				this.xx = pageX;
				this.vx = vmin + vmax * Math.random();
			} else if (this.xx >= pageX + pageW - this.w){
				this.xx = pageX + pageW - this.w;
				this.vx = - vmin - vmax * Math.random();
			}
			if (this.yy <= pageY) {
				this.yy = pageY;
				this.vy = vmin + vmax * Math.random();
			} else if (this.yy >= pageY + pageH - this.h) {
				this.yy = pageY + pageH - this.h;
				this.vy = - vmin - vmax * Math.random();
			}
			this.pg_content.set_position(this.xx, this.yy);
		}
		setTimeout(pg_get_method(this, 'move'), 100);
	}
};

var pg_document = function() {
	this.isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') != -1;
	this.isNetscape = navigator.appName.toLowerCase().indexOf("netscape")!= -1 && !this.isChrome;
	this.isBody = document.body;
}
pg_document.prototype = {
	height: function() {
		if( typeof window.innerHeight == 'number' ) {
			var winH = window.innerHeight;
			if( window.scrollMaxX > 0 ) {
				winH -= 17;
			}
			return winH;
		} else if ( document.documentElement.clientHeight) {
			return document.documentElement.clientHeight;
		} else if( typeof document.body.clientHeight == 'number' ) {
			return document.body.clientHeight;
		}
	}, 
	width: function() {
		if( typeof window.innerWidth == 'number' ) {
			var winW = window.innerWidth;
			if( window.scrollMaxY > 0 ) {
				winW -= 17;
			}
			return winW;
		} else if ( document.documentElement.clientWidth ) {
			return document.documentElement.clientWidth;
		} else if( document.body && document.body.clientWidth ) {
			return document.body.clientWidth;
		}
	}, 
	scroll_left: function() {
		var posLeft = false;
		if(this.isNetscape) {
			posLeft = window.pageXOffset;
		} else {
			posLeft = document.documentElement.scrollLeft;
		}
		return typeof posLeft == 'number' ? posLeft : 0;
	}, 
	scroll_top: function() {
		var posTop = false;
		if (window.innerHeight)	{
			posTop = window.pageYOffset;
		} else if( document.documentElement && document.documentElement.scrollTop )	{
			posTop = document.documentElement.scrollTop;
		} else if(this.isBody) {
			posTop = document.body.scrollTop;
		}
		return typeof posTop == 'number' ? posTop : 0;
	}
};
