// wparams

if (! window.wparams) wparams = new Object();

if (wparams.acceptsCookies == undefined) {
	wparams.acceptsCookies = false;
	if(document.cookie == '') {
		document.cookie = 'cookiesEnvTest=yes';
		wparams.acceptsCookies = (document.cookie.indexOf('cookiesEnvTest') != -1);
	} else {
		wparams.acceptsCookies = true;
	}
}

// Window

function appendEvent(el,evname,func) {
	if (el.attachEvent) { // IE
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { // Gecko / W3C
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] = func;
	}
}

function getObj(x,d) {
	if (typeof d == 'undefined') d = document;
	if (d.getElementById) {
		return d.getElementById(x) ? d.getElementById(x) : false;
	} else if (d.all) {
		return d.all(x) ? d.all(x) : false;
	} else {
		return false;
	}
}

function toggleDisplay(x) {
	var y=getObj(x);
	if ((y) && (y.style)) y.style.display = y.style.display.toString() == 'none' ? '' : 'none';
}

function setCookie(cookieName, value, hours, path, domain, secure) {
	if (wparams.acceptsCookies) {
		if (hours) {
			if ( (typeof(hours) == 'string') && Date.parse(hours) ) {
				var numHours = hours;
			} else if (typeof(hours) == 'number') {
				var numHours = (new Date((new Date()).getTime() + hours*3600000)).toGMTString();
			}
		}
		document.cookie = cookieName + '=' + escape(value) + ((numHours)?(';expires=' + numHours):'') + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:'') + ((secure && (secure == true))?'; secure':'');
	}
}

function setPermanentCookie(n,v) { document.cookie = n + '=' + v +"; path=/; expires=Wed, 21-Jan-2099 00:04:00 GMT" }

function getCookie(cookieName) {
	if(document.cookie == '') return false;
	var pairs = document.cookie.toString().replace(/;[ \r\n]+/g,';').split(';');
	var c = new Object();
	for ( var i = 0; i < pairs.length; i++ ) {
		var nv = pairs[i].split('=', 2);
		c[ nv[0] ] = nv[1];
	}
	return c[ cookieName ] ? c[ cookieName ] : false;
}

function deleteCookie(cookieName, path, domain) {
	if (geetCookie(cookieName)) document.cookie = cookieName + '=; expires=Fri, 13-Apr-1970 00:00:00 GMT' + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:'');
}

function getGetParameters() {
	var kvs = new Object(), kv = new Array();
	if (location.search.length < 2) return kvs;
	var Keys = unescape(location.search.substr(1)).replace(/&amp;/g,'&').split("&");
	for (var i=0; i<Keys.length; i++) { kv = Keys[i].split("="); kvs[kv[0]] = kv[1] }
	return kvs;
}

function getGetParameter(parName) {
	var kvs = getGetParameters();
	return (kvs[parName]) ? kvs[parName] : undefined;
}

function getSelectedText() {
	var txt = '';
	var foundIn = '';
	if (window.getSelection) return window.getSelection();
	if (document.getSelection) return document.getSelection();
	if (document.selection) return document.selection.createRange().text;
	return '';
}

function selectedInField(myField) {
	if (document.selection) { //IE support
		myField.focus();
		return document.selection.createRange();
	}
	else if (myField.selectionStart || myField.selectionStart == '0') { //MOZILLA/NETSCAPE support
		return myField.value.substring(myField.selectionStart,myField.selectionEnd);
	} else {
		return myField.value;
	}
}

function insertInField(myField, myValue) {
	if (document.selection) { //IE support
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	else if (myField.selectionStart || myField.selectionStart == '0') { //MOZILLA/NETSCAPE support
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
	} else {
		myField.value += myValue;
	}
}

function code2char(x) { return String.fromCharCode(parseInt(x)) }

// String

function string_ltrim(s) { return s.toString().replace(/^\s+/,'') }

function string_rtrim(s) { return s.toString().replace(/\s+$/,'') }

function string_trim(s) { return s.toString().replace(/^\s+/,'').replace(/\s+$/,'') }

function string_normalize(s) { return s.toString().replace(/^\s+/,'').replace(/\s+$/,'').replace(/\s+/g,' ') }

function string_limitLength(s,n) { s = s.toString(); return s.length <= n ? s : s.substr(0,n) }

function string_removeHTML(s) { this.toString().replace(/<[^>]*>/g,'') }

// Arrays

function array_contains(a,el) {
	for (var i=0; i<a.length; i++) if (a[i] == el) return true;
	return false;
}

// Objects: class attribute management

function class_getArray(o) {
	if (! (o)) return '';
	var allClasses = (o.className) ? o.className : ( (o.getAttribute) ? o.getAttribute('class') : '');
	allClasses = (allClasses) ? string_normalize(allClasses) : '';
	if (allClasses == '') return new Array();
	if (allClasses.indexOf(' ')<0) return new Array(allClasses);
	return allClasses.split(' ');
}

function class_setArray(o,a) {
	var e, c = a.join(' ');
	try {
		o.className = c;
	} catch(e) {
		o.setAttribute('class',c);
	}
}

function class_contains(o,s) { return array_contains(class_getArray(o),s) }

function class_add(o,s) {
	var a = class_getArray(o);
	if (! array_contains(a,s)) {
		a.push(s);
		class_setArray(o,a);
	}
}

function class_remove(o,s) {
	var a = class_getArray(o);
	if (array_contains(a,s)) {
		b = new Array();
		for (var i=0; i<a.length; i++) if (a[i] != s) b.push(a[i]);
		class_setArray(o,b);
	}
}

// misc

function deEntity(s) {
	s = s.toString().replace(/&nbsp;/g,' ').replace(/&eacute;/g,'é');
	s = s.replace(/&agrave;/g,'à').replace(/&egrave;/g,'è').replace(/&igrave;/g,'ì').replace(/&ograve;/g,'ò').replace(/&ugrave;/g,'ù');
	s = s.replace(/&Agrave;/g,'À').replace(/&Egrave;/g,'È').replace(/&Igrave;/g,'Ì').replace(/&Ograve;/g,'Ò').replace(/&Ugrave;/g,'Ù');
	s = s.replace(/&amp;/g,'&').replace(/ +/g,' ').replace(/&quot;/g,'"');
	s = s.replace(/&#([0-9]+);/g,code2char("$1"));
	return s;
};

// New objects: HashArray

if (! window.HashArray) HashArray = function() {
	this.pairs = new Object();
	this.getValue = function(k) { return this.pairs[k] }
	this.setValue = function(k,v) { this.pairs[k] = v }
	this.delValue = function(k) { delete  this.pairs[k] }
	this.getKeys = function() { var a=[]; for (var i in this.pairs) a[a.length]=i; return a; }
	this.getValues = function() { var a=[]; for (var i in this.pairs) a[a.length]=this.pairs[i]; return a; }
	this.count = function() { var c=0; for (var i in this.pairs) c++; return c; }
	return this;
};
