

var waitvisible = false;
var alt_col_save = '';
var temporary_txt = '';

if(!document.getElementById){
  	if(document.all){
    		document.getElementById=function(){
			if(typeof document.all[arguments[0]]!="undefined")
			{
				return document.all[arguments[0]]
			}
				else {return null}
    		}
  	}
	else if(document.layers){
	     document.getElementById=function(){
			if(typeof document[arguments[0]]!="undefined"){
				return document[arguments[0]]
			}
			else {
				return null
			}
	    }
  	}
}

function imageChange($obj,$image)
{
	$obj.src = $image;
}


var hiddenElements = new Array();


function showWaitPage()
{
	selects = document.getElementsByTagName("select");
	for(i = 0; i < selects.length; i++)
	{
		hiddenElements.push(new Array(selects[i], selects[i].style.display));
		if(selects[i]) selects[i].style.display = 'none';
	}
	document.getElementById("fullpagewait")?document.getElementById("fullpagewait").style.visibility = "visible":true;
	document.getElementById("fullpagewait")?document.getElementById("fullpagewait").style.zIndex = "900":true;
	document.getElementById("fullpagewait")?document.getElementById("fullpagewait").style.display = "block":true;
	if (document.getElementById("waitsplash")) {
		positionTop = Math.round(screen.availHeight/2) - document.getElementById("waitsplash").offsetHeight + document.body.scrollTop;
		document.getElementById("waitsplash").style.top = positionTop;
	}	
	document.getElementById("waitsplash")?document.getElementById("waitsplash").style.visibility = "visible":true;
	document.getElementById("waitsplash")?document.getElementById("waitsplash").style.zIndex = "1000":true;
	waitvisible = true;
	setTimeout('hiddeWaitPage()',180000);
}

function hiddeWaitPage()
{
	if(waitvisible)
	{
		waitvisible = false;
		selects = document.getElementsByTagName("select");
		while(hiddenElements.length)
		{
			var elts = hiddenElements.pop();
			//alert(hiddenElements.length+ ' ' + elts + ' ' + elts.length + ' ' + elts[0] + ' ' +elts[1]);
			//elt = document.getElementById(elts[0]);
			//elt?elt.style.display=elts[0]:'';
			//elts[0].style.display=elts[1];
		}

		for(i = 0; i < selects.length; i++)
			if(selects[i]) selects[i].style.display = '';

		/*document.getElementById("fullpagewait").style.visibility = "hidden";
		document.getElementById("fullpagewait").style.zIndex = "-1";
		document.getElementById("fullpagewait").style.display = "none";
		document.getElementById("waitsplash").style.visibility = "hidden";
		document.getElementById("waitsplash").style.zIndex = "-1";*/

		elements = document.getElementsByName("fullpagewait");
		//alert(elements.length);
		for(i = 0; i < elements.length ; i++)
		{
			elements[i].style.visibility = "hidden";
			elements[i].style.zIndex = "-1";
			elements[i].style.display = "none";
		}


		elements = document.getElementsByName("waitsplash");
		//alert(elements.length);

		for(i = 0; i < elements.length ; i++)
		{
			elements[i].style.visibility = "hidden";
			elements[i].style.zIndex = "-1";
		}
	}
}


function removeOptions(component)
{
	var midx = component.length - 1;
	for(x = midx; x>=0; x--)
	{
		component.remove(x);
	}
}

function waitOptions(component)
{
	removeOptions(component);
	var opt = document.createElement("option");
	opt.text = "Loading ...";
	try
	{
		component.add(opt); //ie
	} catch(ex)
	{
		component.add(opt,null);
	}
}

/**
 * array must be form as "id","value";
 */
function fillSelect(aSelect, anArray)
{
	component = document.getElementById(aSelect);
	removeOptions(component);
	var cjsarray = eval(anArray);


	for(x in cjsarray)
	{
		opt = document.createElement("option");
		opt.value = cjsarray[x][0];
		opt.text = cjsarray[x][1];
		try
		{
			component.add(opt);
		} catch(ex) {
			component.add(opt,null);
		}
	}
	return 0;
}

function hiddeMenuDiv(menudiv)
{
	menu = document.getElementById(menudiv);
	menu.style.display = "none";
}

function showMenuDiv(menudiv)
{
    menu = document.getElementById(menudiv);
    menu.style.display = "block";
}

function clearMenuDiv(menudiv)
{
    menu = document.getElementById(menudiv);
    menu.innerHTML = '';
}

function showDivOnTop(adiv,zorder)
{
	div = document.getElementById(adiv);
	div.style.display = "block";
	div.style.visibility = "visible";
	div.style.zIndex = zorder;
}

function hiddeDiv(adiv)
{
	div = document.getElementById(adiv);
	div.style.display = "none";
	div.style.visibility = "hidden";
	div.style.zIndex = -1;
}

function copyToList(theform,from,to)
{
  fromList = document.getElementById(from);
  toList = document.getElementById(to);

  if (toList.options.length > 0 && toList.options[0].value == 'temp')
  {
    toList.options.length = 0;
  }
  var sel = false;
  for (i=0;i<fromList.options.length;i++)
  {
    var current = fromList.options[i];
    if (current.selected)
    {
      sel = true;
      if (current.value == 'temp')
      {
        return;
      }
      txt = current.text;
      val = current.value;
      toList.options[toList.length] = new Option(txt,val);
      fromList.options[i] = null;
      i--;
    }
  }
}

function retrieveSelectedCities(aform,alist) {
	return retrieveSelectedElements(aform,alist);
}

function retrieveSelectedElements(aform,alist)
{
	res = '';
	try
	{
		thelist = eval('document.'+aform+'.'+alist);
	} catch (e)
	{
		thelist = undefined;
	}
	
	if(thelist != undefined)
	{
		for(i=0;i<thelist.options.length;i++)
		{
			if(i>0)
				res += '|';
			res += thelist.options[i].value;
		}
	}
	else
	{
		thelist = document.getElementById(alist);
		
		nodes = thelist.childNodes;
		for (var i=0; i<nodes.length; i++) {
			if(i > 0)
				res += '|';
			id = nodes.item(i).getAttribute('id');
			//trail listname:
			id = id.substring(id.indexOf('::')+2);
			//update option value
			id = id.substring(id.indexOf('::')+2);
			res += id;
		}
	}	
	return res;
}

function putSelectedElementsInInputElement(aform,alist,anInputElement) {
	thelistContent = retrieveSelectedElements(aform, alist);
	document.getElementById(anInputElement).value = thelistContent;
	return true;
}

function isNum(str,returnnumeric) {
   while(str.indexOf(",")>=0)
        str=str.replace(",","\.");
    if(str.indexOf("\.")!=str.lastIndexOf("\.")) {
    	if(returnnumeric)
    		return 0;
    	else
        	return false;
    } else {
        pattern=/^-?[0-9.]*$/;
        if(pattern.test(str)) {
			if(str.length==0) return "0"; else return str;
		} else {
			if(returnnumeric)
				return 0;
			else
				return false;
		}
    }
}

function checkIntegerField(fieldname)
{
					var input=document.getElementById(fieldname);
					var err=document.getElementById('err_' +fieldname);
					if(input) {
						if(!(input.value=isNum(input.value))) {
							input.value='0';
							if(err) err.style.visibility='visible';
							return false;
						} else {
							if(err) err.style.visibility='hidden';
						}
					}
			return true;
}

function launchFckEditor(aDiv,aname,acontent)
{
	var div = document.getElementById(aDiv);
	oldcontent = div.innerHTML;
	var fck = new FCKeditor(aname);
	fck.BasePath = 'spider/3rdparty/fckeditor/';
	fck.Height = '400px';
	fck.Value = oldcontent;
	div.innerHTML = fck.CreateHtml();
	if(oldcontent)
	{
		temporary_txt = oldcontent;
		setTimeout('window.parent.FCKeditorAPI.GetInstance("messagecontent").SetHTML(temporary_txt)',600);
	}
}

function getDate(strDate){
	day = strDate.substring(0,2);
	month = strDate.substring(3,5);
	year = strDate.substring(6,10);
	d = new Date(0);
	d.setDate(day);
	d.setMonth(month-1);
	d.setFullYear(year);
	return d;
}

//Retourne:
//   0 si date_1=date_2
//   -1 si date_1>date_2
//   1 si date_1<date_2

function compareDate(date_1, date_2){
	diff = date_2.getTime()-date_1.getTime();
	return (diff==0?diff:diff/Math.abs(diff));
}

function switchDisplayByReference(aReference)
{
	elts = document.getElementsByName(aReference);

	for(idx=0; idx < elts.length; idx++)
	{
		if(elts[idx].style !== undefined)
		{
			if(elts[idx].style.display=='none')
				elts[idx].style.display='';
			else
			{
				elts[idx].style.display='none';
			}
		}
	}
}

/**
 * Return an array of id attribute for a given tagname with name attribute equal to aCheckBoxGroupName
 */
function getCheckedBoxesIds(aTagName, aCheckBoxGroupName)
{
	//THANKS TO IE !

     var checkedIds = new Array();

     var nodes = document.getElementsByTagName(aTagName);

     if(nodes && nodes.length != 0)
     {
     	for(idx = 0; idx < nodes.length; idx++)
     	{
			if(nodes[idx].getAttribute('id') && nodes[idx].getAttribute('type') == 'checkbox' && nodes[idx].getAttribute('name') == aCheckBoxGroupName && nodes[idx].checked)
				checkedIds.push(nodes[idx].getAttribute('id'));
   		}

   	 }

   	 return checkedIds;
}

function updateRequestParamWithArray(aQuery,aKeyword,anArray)
{
	res = '';
	for(idx = 0; idx < anArray.length; idx ++)
	{
		if(idx > 0)
			res += '|';
		res += anArray[idx];
	}
	return aQuery.replace(aKeyword,URLEncode(res));
}

function fixLittle(little,greater,replaceifzero)
{
	ltt = document.getElementById(little);
	gtt = document.getElementById(greater);
	lttval = parseInt(ltt.value);
	gttval = parseInt(gtt.value);
	if(lttval > gttval) {
		if(!replaceifzero || gttval > 0) {
			ltt.value = gtt.value;
		} else {
			gtt.value = ltt.value;
		}
	}
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}


function confirmMessage(message) {
	return confirm(message);
}

function jsListener(callBackCall,aTimeout,aVarName,forceExternal)
{

	try {

		if(forceExternal)
			callBackCall = '';

	  	callback_elt = document.getElementById('jslistener_callback');

		if(callback_elt && callback_elt != '') {

				if(callback_elt.nodeName == 'INPUT'){
					callBackCall = callback_elt.value;
				}
				else
				{
					if(callback_elt.nodeName == 'DIV') {
						callBackCall = callback_elt.innerHTML;
					}
				}
		 }

		 eval(callBackCall);
		 var tmpl_var = setTimeout('jsListener("'+callBackCall+'",'+aTimeout+',"'+aVarName+'",'+forceExternal+');',aTimeout);
		 eval(aVarName + ' = tmpl_var;');
		 if(eval(aVarName+'Stop') == 1)
		 		clearTimeout(tmpl_var);
	}
	catch(e) {
		// alert(e);
	}
}


var Utf8 = {

    // public method for url encoding
    encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // public method for url decoding
    decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}


function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
  return decodeURIComponent( escape( s ) );
}


var win = null;

function centeredWindow(mypage,myname,w,h,scroll,windowname){
	LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
	TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
	settings ='height='+h+',width='+w+',location=no, top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',resizable'
	win = window.open(mypage,myname,settings);
	return win;
}

function workflowLoadingActions(aText)
{
	zone = document.getElementById("wf_dashboard_actions");
	zone.innerHTML = aText;
}

// delete all options elements into a select list
function cleanSelectList(alist)
{
	var component = document.getElementById(alist);
	var length = component.options.length;
	if (length > 0) {
		for (var i=length-1; i>=0; i--) {
			component.options[i] = null;
		}
	}	
}


// =================================
// composant HtmlDivSelect (choix multiple)
//
// remarques:
// (1) les 2 DIV parent doivent avoir un ID
// (2) les données (d'une DivSelect) sont sauvegardées dans un input hidden (qui est est créé automatiquement)
// (3) les DIV enfants auront comme ID "nom du parent::valeur associée"(l'identifiant d'une DIV est le seul endroit où l'on peut stocker une valeur, le label étant le contenu de la DIV)
// (4) utilisation du css: spider/gui/css/divSelect.css (classes: divSelected, divUnselected, divDisabled)
// (5) par défaut, choix multiple autorisé
// =================================

var suffixDiv = '::container';

// passage d'une DIV enfant d'une DIV parent à l'autre
function addDivChild(parent, idDiv, content, multipleDivSelect) {
	var parentDiv = document.getElementById(parent+suffixDiv);
	var newDiv = document.createElement('div');
	newDiv.setAttribute('id', parent + '::options::' + idDiv);
	if (parentDiv.getAttribute('class')) {
		newDiv.setAttribute('class','divUnselected');
	} else {
		newDiv.setAttribute('className','divUnselected'); // thanks IE7
	}
	newDiv.setAttribute('style','display:block');
	newDiv.onclick = function() { selectDiv(this.id, multipleDivSelect); }; // thanks IE7, again
	newDiv.innerHTML = content;	
	parentDiv.appendChild(newDiv);
}

// suppression d'une DIV enfant dans une DIV parent
function removeDivChild(parent, idDiv) {
	var parentDiv = document.getElementById(parent);
	var oldDiv = document.getElementById(idDiv);
	parentDiv.removeChild(oldDiv);
}

// sélection d'une DIV enfant	
function selectDiv(idDiv, multipleDivSelect) {
	if (typeof multipleDivSelect == "undefined") multipleDivSelect=true;
	var myDiv = document.getElementById(idDiv);
	if (!multipleDivSelect) {
		var divList = myDiv.parentNode.getElementsByTagName('div');
		for (var i=0; i<divList.length; i++) {
			className = divList[i].attributes['class'].value;
			if ((idDiv != divList[i].getAttribute('id')) && (className == 'divSelected')) {
				if (divList[i].getAttribute('class')) {
					divList[i].setAttribute('class','divUnselected');
				} else {
					divList[i].setAttribute('className','divUnselected'); // thanks IE7, again
				}
			}	
		}
	}
	myDiv.className = (myDiv.className == 'divSelected') ? 'divUnselected' : 'divSelected';
}

// procédure de passage d'une DIV parent à l'autre pour les DIV enfants sélectionnées (class="selected")	
function copyDivToDiv(fromDiv, toDiv, multipleDivSelect) {
	if (typeof multipleDivSelect == "undefined") multipleDivSelect=true;	
	var parent = document.getElementById(fromDiv+suffixDiv);
	var divList = parent.getElementsByTagName('div');
	var remove = new Array();
	for (var i=0; i<divList.length; i++) {
		id = divList[i].getAttribute('id');
		if (divList[i].getAttribute('class')) {
			className = divList[i].getAttribute('class');
		} else {
			if(divList[i].attributes['class'])
				className = divList[i].attributes['class'].value; // thanks IE7, again
			else
				className = "undefined";
		}
		if (className == 'divSelected') {
			reg = new RegExp(":{2}", "g");
			temp = id.split(reg);
			uniqid = temp[temp.length-1];
			addDivChild(toDiv, uniqid, divList[i].innerHTML, multipleDivSelect);
			remove.push(id);
		}
	}
	for (i=0; i<remove.length; i++) {
		removeDivChild(fromDiv+suffixDiv, remove[i]);
	}
}

// sauvegarde des références des éléments d'une DIV parent dans un input hidden (appel de la fonction à placer en PreJavascript sur le bouton submit du formulaire)
// possibilité de sauver les éléments d'une classe particulière (divSelected, divUnselected, divDisabled). Par défaut, si aucun mode défini, sauvegarde de tous les éléments (all)
function saveDivSelect(parentDiv, mode) {
	if (typeof mode == "undefined") mode = 'all';
	var parent = document.getElementById(parentDiv+suffixDiv);
	var values = document.getElementById(parentDiv);
	var divList = parent.getElementsByTagName('div');
	for (var i=0; i<divList.length; i++) {
		id = divList[i].getAttribute('id');
		classe = (divList[i].getAttribute('class')) ? divList[i].getAttribute('class') : divList[i].attributes['class'];
		save = (mode=='all') ? true : (mode == classe ? true : false);
		if (save) {
			reg = new RegExp(":{2}", "g");
			temp = id.split(reg);
			uniqid = temp[temp.length-1];
			if (values.value != '') values.value += ';';
			values.value += uniqid;
		}	
	}
}

// ======================================
// composant combobox (select à choix unique)
// ======================================
var saved=0;
var imgCurrent=1;

// affiche/masque la liste des options
function viewChildren(idDiv, img) {
	var child = document.getElementById(idDiv);
	child.style.display = (child.style.display=='none') ? 'block' : 'none';
	changeImage(img);
}

// change l'image associée à la combobox
function changeImage(idImg) {
	var img = document.getElementById(idImg);
	if (imgCurrent==1) {
		imgCurrent=2;
		img.src='./spider/gui/images/arrow_up.png';
		img.title='close list';
	} else {
		imgCurrent=1;
		img.src='./spider/gui/images/arrow_down.png';
		img.title='open list';
	}
}

// sauvegarde l'option sélectionnée (input hidden généré par le composant! ne pas le créer manuellement)
// + affiche le choix effectué dans la "div selected"
// + si nécessaire exécute l'événement onclick assimilé à un widget (simuler un onchange d'un select classique)
// + masque la liste des options
function saveSelectedCombo(idOption, idSaveValue, idOptionSelected, idDivSelected, idImage) {
	var child = document.getElementById(idOption);
	var selectedOption = document.getElementById(idOptionSelected);
	var saveValue = document.getElementById(idSaveValue);
	id = child.getAttribute('id');
	reg = new RegExp(":{2}", "g");
	temp = id.split(reg);
	uniqid = temp[temp.length-1];
	selectedOption.innerHTML = child.innerHTML;
	saveValue.value = uniqid;
	// si nécessaire, exécute l'événement onclick d'un widget placé sur la "div selected" (ex: action de type "onchange" sur un select classique)
	if (document.getElementById(idDivSelected).onclick) {
		saved = 1;
		document.getElementById(idDivSelected).onclick();
	}
	viewChildren(child.parentNode.id, idImage);
}


function minimizeOrMaximizeBox(aBoxId)
{
	box = document.getElementById(aBoxId);
	if(box.style.display == 'none')
		box.style.display = 'block';
	else
		box.style.display = 'none';
}

