// 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,w) {
  if (w == undefined) w = window;
  if (w.document.getElementById) {
    return w.document.getElementById(x) ? document.getElementById(x) : false;
  } else if (document.all) {
    return w.document.all(x) ? document.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 firstChar, lastChar;
  var theBigCookie = document.cookie;
  firstChar = theBigCookie.indexOf(cookieName);
  var NN2Hack = firstChar + cookieName.length;
  if((firstChar != -1) && (theBigCookie.charAt(NN2Hack) == '=')) {
    firstChar += cookieName.length + 1;
    lastChar = theBigCookie.indexOf(';', firstChar);
    if(lastChar == -1) lastChar = theBigCookie.length;
    return unescape(theBigCookie.substring(firstChar, lastChar));
  }
  return 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)).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;
};
