// START BUILD PARAM
var forceMultipart = false;
// END BUILD PARAM

if (callBeforePostList==null)
{
	var callBeforePostList = new Array();
	var defaultFormName = null, defaultWidgetId = null, defaultWidgetParam = null;
	var ajaxCallback =
	{
		success:vdpAjaxApply,
		upload:vdpAjaxApply,
		failure:vdpShowError
	};	
}

function callBeforePost( formName, code )
{
	var formList = callBeforePostList[formName];
	if( formList==null )
	{
		formList = new Array();
		callBeforePostList[formName] = formList;
	}
	formList[formList.length] = code;
}

/**
 * Fire all form events
 * Useful when there is only one form and we don't know the name ...
 * @return
 */
function fireAllBeforePost()
{
	for (var formName in callBeforePostList)
	{
		if (document.forms[formName] != null)
			fireBeforePost( formName );
	}
}

function fireBeforePost( formName )
{
	var formList = callBeforePostList[formName];
	if( formList!=null )
	{
		for(var i=0; i<formList.length; i++)
			try{ eval( formList[i] ); } catch(e) { alert("Function call error:\n" + e.message + "\nCode:\n" + formList[i]); }
  	delete callBeforePostList[formName];
	}
}

function doFocus()
{
 try
  {
    if(typeof(zone1)=="undefined" || zone1==null)
      return;
    if(zone1.length!=null) 
      zone1[0].focus();
    else 
      zone1.focus(); 
  }
  catch(e){}
}

function vdpFireMessage( formName, widgetId, widgetParam )
{
	fireBeforePost( formName );
	showPostAction( false );
	
	try
	{
		htm();
	}
	catch(e){}
	
	var form = document.forms[formName];
	form.WID.value = widgetId;
	form.WVALUE.value = widgetParam;
	
	var multipart = ( forceMultipart || formContainsFile( formName ) );
	if( multipart )
	{
		form.enctype  = "multipart/form-data";
		form.encoding = "multipart/form-data";
	}
	
	if( typeof(canUseAjaxRequest)!="undefined" && canUseAjaxRequest() )
	{
		try
		{
			form.USEAJAX.value = "true";		
			calls = new Array(); // prepare doOnLoad
			
			if ( multipart ) YAHOO.util.Connect.setForm(form, true, true); 
			else YAHOO.util.Connect.setForm(form);
			
			YAHOO.util.Connect.asyncRequest('POST', form.action, ajaxCallback);
		}
		catch(e)
		{
			form.USEAJAX.value = "never";
			form.submit();
		}
	}
	else
	{
		// use application/x-www-form-urlencoded
		form.USEAJAX.value = "never";
		form.submit();
	}
} 


function vdpModifyDefaultWID( formName, buttonName, event )
{
	try
	{
	  var keyCode = event.keyCode || event.which || 0;
		if( keyCode == 13 )
		{
		  if( formName!=null )
		  {
			  var form = document.forms[formName];
			  if( form!=null )
			  {			  
					var defaultWid = form["DEFAULTWID"];
					if( defaultWid!=null )
					{
						defaultWid.value = buttonName;
						var defaultWvalue = form["DEFAULTWVALUE"];
						if( defaultWvalue!=null )
						  defaultWvalue.value = 1;		
					}
				}
		  }		  
		}
	}
	catch(e)
	{}		
}

function vdpDocumentOnKey( formName, event )
{
	try
	{
	  var keyCode = event.keyCode || event.which || 0;
		if( keyCode == 13 )
		{
  		if (window.event && event.preventDefault) window.event.preventDefault();
		  else if (window.event) window.event.returnValue = false;

		  if (window.event && window.event.stopPropagation) window.event.stopPropagation();
		  else if (window.event) window.event.cancelBubble = true;
		  
		  if( formName!=null )
		  {
			  var form = document.forms[formName];
			  if( form!=null )
				{
					var defaultWid = form["DEFAULTWID"];
					if( defaultWid!=null )
					  defaultWid = defaultWid.value; 
					var defaultWvalue = form["DEFAULTWVALUE"];
					if( defaultWvalue!=null )
					  defaultWvalue = defaultWvalue.value;
					 
					if( defaultWid > "" )
					{
						vdpFireMessage( formName, defaultWid, defaultWvalue );
					}
				}
			}
		  return false;
		}
	}
	catch(e)
	{}
	return true;
}

function vdpAjaxApply( xmlDoc, errorCallback )
{
	showPostAction( true );
	ajaxApply( xmlDoc, errorCallback );
	setTimeout("vdpDoOnLoad()",0);
}

function vdpDoOnLoad()
{
	if( calls!=null && calls.length!=null )
	{
		for(var i=0; i<calls.length; i++)
        	try{ eval( calls[i] ); } catch(e) { alert("Function call error:\n" + e.message + "\nCode:\n" + calls[i]); }
	}
	calls = new Array();
}

function vdpAjaxError( o )
{
  vdpShowError(o.statusText);
}

function vdpShowError( msg )
{
  showPostAction( true );
  alert("Error:\n"+msg);
  canUseAjaxRequest = new Function("","return false;");
}

function formContainsFile( formName )
{
  var form = document.forms[formName];
  if( form!=null )
  {
		for( var i=0; i<form.elements.length; i++)
		{
			var elem = form.elements[i];
		  try
		  {
			  if( elem.name!=null && elem.name.length>0 && elem.tagName.toUpperCase()=="INPUT" )
			  {
			  	if( elem.type.toLowerCase()=="file" && elem.value!=null && elem.value.length>0 )
			  	  return true;
	      }
		  }
		  catch( ignore )
		  {}
		}
	}
	return false;
}

function beforeSelector( messageFormName, adminFormName, id , sendselecteditems ) 
{
	var messageForm = document.forms[messageFormName];
	var adminForm   = document.forms[adminFormName];
  adminForm.WID.value = id ;
  if ( sendselecteditems )
  {
	  if ( messageForm.elements[id + '_selected_keys'])
	  {
		  adminForm.selectedkeys.value=getStringValues( messageForm, id + '_selected_keys' );
		  adminForm.selectedvalues.value=getStringValues( messageForm, id + '_selected_values' );
		  adminForm.selectedclasses.value=getStringValues( messageForm, id + '_selected_classes' );
		  adminForm.selectedlabels.value=getStringValues( messageForm, id + '_selected_labels' );
		  adminForm.addedparams.value=getStringValues( messageForm, id + '_added_params' );	  	  	  	  	  	  	  	  				  	  	  	  
	  }	
  }
}

function getStringValues( messageForm, eltName )
{
	var arr = new Array();
	var elements = messageForm.elements[eltName];
	if ( elements !=null)
	{
		var size =  elements.length;
		if ( size != null && size > 0)
		{
			for ( i=0;i<size;i++)
			{
				arr[i] = elements.item(i).value;
			}
		}
		// Only one value
		else arr[0] = elements.value;
	}
	return arr.join(';');
}

function refresh( messageFormName )
{
	// this function is exclusively called by the selectors (directory and others...)
	vdpFireMessage(messageFormName,document.forms[messageFormName].WID,'') ;
}

function vdpShowHide( obj, show  )
{
	if ( typeof(obj)=="string" )
	{
		obj = document.getElementById(obj);
	}

  if ( obj!=null )
  {
  	try
		{
  		if ( show==true || ( show==null  && obj.style.display=="none" ) )
			{
				obj.style.display = "inline";
			}
			else if ( show==false || ( show==null  && obj.style.display!="none" ) )
			{
				obj.style.display = "none";
			}
  	}
  	catch( e )
  	{}
  }
}

function showPostAction( show )
{
  try
  {
    /*
	  var style = getStyleFromRules(".postaction");
	  if( style!=null )
	  {
	    if( show )
	    {
	      style.opacity = "1.0";
	      style.filter = "none";
	    }
	    else
	    {
	      style.opacity = "0.5";
	      style.filter  = "alpha(opacity=50)";
	    }
	  }
	  */
    if( show )
    {
      document.body.style.opacity = "1.0";
      document.body.style.filter = "none";
    }
    else
    {
      document.body.style.opacity = "0.8";
      document.body.style.filter  = "alpha(opacity=80)";
    }
  }
  catch(e) {}
  return null;
}

function getStyleFromRules( selector )
{
  try
  {
    selector = selector.toLowerCase();
    var sheets = null;
    if( typeof(document.styleSheets)!="undefined" && typeof(document.styleSheets.length)!="undefined" )
      sheets = document.styleSheets;
    else if( typeof(document.styleSheet)!="undefined" && typeof(document.styleSheet.length)!="undefined" )
      sheets = document.styleSheet;
    if( sheets != null )
    {
      for(var i1=0; i1<sheets.length; i1++)
      {
        var sheet = sheets[i1];
        var rules = null;
        if( typeof(sheet.rules)!="undefined" && typeof(sheet.rules.length)!="undefined" )
          rules = sheet.rules;
        else if( typeof(sheet.cssRules)!="undefined" && typeof(sheet.cssRules.length)!="undefined" )
          rules = sheet.cssRules;

        if( rules !=null )
        {
          for(var i2=0; i2<rules.length; i2++)
          {
            if( typeof(rules[i2].selectorText)!="undefined" &&
                selector == rules[i2].selectorText.toLowerCase()  )
            {
              return rules[i2].style;
            }
          }
        }
      }
    }
  }
  catch(e) {}
  return null;
}

function displayVML( diagramId, vmlGroupId )
{
  try
  {
    var vmlGroup = document.getElementById( vmlGroupId );
    if( vmlGroup==null || vmlGroup.rotation!=0 )
    {
      var htmlTag = document.body;
      while( htmlTag!=null && htmlTag.tagName.toUpperCase()!="HTML" )
        htmlTag = htmlTag.parentElement;
        
      if( htmlTag!=null )
      {
        htmlTag.setAttribute("xmlns:v","urn:schemas-microsoft-com:vml");
        htmlTag.setAttribute("xmlns:v","urn:schemas-microsoft-com:vml");
      }
      
      var diagram = document.getElementById( diagramId );
      if( diagram!=null )
        diagram.innerHTML = diagram.innerHTML;
    }
  }
  catch(e)
  {
  	return false;
  }
  return true;
}

function vdpSaveScroll( target, formName, fieldName )
{
	try{ 
		if(typeof(target)=="string") target=document.getElementById(target);
  	document.forms[formName][fieldName].value = target.scrollLeft + ";" + target.scrollTop;
	}catch(e){ alert( e );}
}

function vdpRestoreScroll( target, formName, fieldName )
{
	try
	{
		if(typeof(target)=="string") target=document.getElementById(target);
		var val = document.forms[formName][fieldName].value;
		target.scrollLeft = parseInt(val.substring(0,val.indexOf(";")));
		target.scrollTop  = parseInt(val.substring(val.indexOf(";")+1));
	}
  catch(e)
  {
  }
}

//************************************************************************
// fonctions javascript utilisées par le treeview de délégation
//
// auteur : fsalque
//------------------------------------------------------------------------
// delegableClicked
// fonction appelée au clic sur une checkbox de selection d'élément
// délégable.
// Si la checkbox est cochée --> cochage de tous les fils
// Si la checkbox est décochée --> décochage de tous les parents
// Paramètres:
//	checkBox : la checkbox cliquée par l'utilisateur
// 
// Valeur retournée: aucune
//------------------------------------------------------------------------
function delegableClicked(checkBox)
{
	if(checkBox.checked)
	{
		checkDlgChildren(checkBox,true);
	}
	else
	{
		checkDlgChildren(checkBox,false);
		checkDlgParent(checkBox,false);
	}
}
//------------------------------------------------------------------------
// checkDlgChildren
// coche ou décoche toutes les checkboxes filles de checkBox
//
// Paramètres:
//	checkBox : la checkbox
//  checked : booléen true pour cocher, false pour décocher
// 
// Valeur retournée: aucune
//------------------------------------------------------------------------
function checkDlgChildren(checkBox,checked)
{
	var tableNode=checkBox.parentNode;
	for(var i=0;i<3 && tableNode!=null ;i++)
	{
		tableNode=tableNode.parentNode;
	}
	if(tableNode!=null && tableNode.tagName=="TABLE")
	{
		var childrenCheckBox=tableNode.getElementsByTagName("INPUT");
		var length=childrenCheckBox.length;
		for(var i=0;i<length;i++)
		{
			childrenCheckBox[i].checked=checked;
		}
	}
}
//------------------------------------------------------------------------
// checkDlgParent
// coche ou décoche toutes les checkboxes parents de checkBox
//
// Paramètres:
//	checkBox : la checkbox
//  checked : booléen true pour cocher, false pour décocher
// 
// Valeur retournée: aucune
//------------------------------------------------------------------------
function checkDlgParent(checkBox,checked)
{
	var tableNode=checkBox.parentNode;
	for(var i=0;i<7 && tableNode!=null ;i++)
	{
		tableNode=tableNode.parentNode;
	}
	if(tableNode!=null && tableNode.tagName=="TABLE")
	{
		var parentTr=tableNode.rows[0];
		var contentTd=parentTr.cells[1];
		var parentCheckBox=contentTd.getElementsByTagName("INPUT")[0];
		parentCheckBox.checked=checked;
		checkDlgParent(parentCheckBox,checked);
	}
}
//------------------------------------------------------------------------
// delegationExpandCollapse
// plie/déplie un noeud de treeview, spécifique au fonctionnel délégation
// --> quand on déplie un noeud, si un de ses fils est séléctionné, ses fils sont
// dépliés jusqu'au premier fils selectionné
//
// Paramètres:
//	node : le noeud de treeview à plier/déplier
// 
// Valeur retournée: aucune
//------------------------------------------------------------------------
function delegationExpandCollapse(node)
{
	//mise à jour de l'icone du noeud
	if(node.className == 'treeNodeExpanded') 
	{
		node.className = 'treeNodeCollapsed';
	} 
	else 
	{
		node.className = 'treeNodeExpanded';
	}
	//expand/collapse
	var tableNode=node.parentNode;
	for(var i=0;i<2 && tableNode!=null ;i++)
	{
		tableNode=tableNode.parentNode;
	}
	
	if(tableNode!=null && tableNode.rows!=null)
	{
		if(tableNode.rows[1].style.display=="none")
		{
			//expand
			delegationExpandNode(tableNode.rows[0].cells[0])
		}
		else
		{
			//collapse
			tableNode.rows[1].style.display="none";
		}
	}	
}
//------------------------------------------------------------------------
// delegationExpandNode
// déplie un noeud de treeview, spécifique au fonctionnel délégation
// --> quand on déplie un noeud, si un de ses fils est séléctionné, ses fils sont
// dépliés jusqu'au premier fils selectionné
//
// Paramètres:
//	node : le noeud de treeview à déplier
// 
// Valeur retournée: aucune
//------------------------------------------------------------------------
function delegationExpandNode(node)
{
	if(node.className != 'treeNodeExpanded' && node.className != 'treeNodeCollapsed')  
	{			
		return;
	}	
	//mise à jour de l'icone du noeud
	node.className = 'treeNodeExpanded';
	//expand
	var tableNode=node.parentNode;
	for(var i=0;i<2 && tableNode!=null ;i++)
	{
		tableNode=tableNode.parentNode;
	}
	if(tableNode!=null && tableNode.rows!=null)
	{
		tableNode.rows[1].style.display="";
		
		var childContainer=tableNode.rows[1].cells[1];
		
		var childrenList=childContainer.childNodes;
	
		if(childrenList!=null)
		{
			var childrenLength=childrenList.length;
			for(var i=0;i<childrenLength;i++)
			{
				if(childrenList[i].tagName=="TABLE")
				{
					var nodeCheckBox=childrenList[i].rows[0].cells[1].firstChild;
					if(!nodeCheckBox.checked)
					{
						var childCheckBoxes=childrenList[i].getElementsByTagName("INPUT");
						var checkBoxesCount=childCheckBoxes.length;
						var expandChild=false;
						for(var j=0;j<checkBoxesCount && !expandChild;j++)
						{
							expandChild=(childCheckBoxes[j].checked);
						}
						if(expandChild)
						{
							delegationExpandNode(childrenList[i].rows[0].cells[0]);
						}
					}
				}
			}
		}
	}
}
// Fin des fonctions délégations
//************************************************************************
// Fonctions javascript utilisées par les treeview
//------------------------------------------------------------------------
// tvExpandCollapse
// plie/déplie un noeud de treeview
//
// Paramètres:
//	node : le noeud de treeview à plier/déplier
// 
// Valeur retournée: aucune
// auteur : fsalque
//------------------------------------------------------------------------
function tvExpandCollapse(node)
{
	//mise à jour de l'icone du noeud
	if(node.className == 'treeNodeExpanded') 
	{
		node.className = 'treeNodeCollapsed';
	} 
	else 
	{
		node.className = 'treeNodeExpanded';
	}
	//expand/collapse
	var tableNode=node.parentNode;
	for(var i=0;i<2 && tableNode!=null ;i++)
	{
		tableNode=tableNode.parentNode;
	}
	if(tableNode!=null && tableNode.rows!=null)
	{
		if(tableNode.rows[1].style.display=="none")
		{
			tableNode.rows[1].style.display="";
		}
		else
		{
			tableNode.rows[1].style.display="none";
		}
	}
}
//------------------------------------------------------------------------
//tvExpandAllnode
//déplie tous les noeuds de treeview
//
//Paramètres:
//	
//
//Valeur retournée: aucune
//------------------------------------------------------------------------
function tvExpandAllNode()
{	
	var treeView = document.getElementById("treeView");	
	
	if (treeView!=null)
	{
		var tableNode;
		// problème du moteur GECKO espace insécable dans FireFox
		if(treeView.firstChild!= null && treeView.firstChild.nodeType != 3)
		{
			tableNode = treeView.firstChild;
		}
		else
		{
			tableNode = treeView.firstChild;
			while (tableNode.nodeType == 3) {
				tableNode = tableNode.nextSibling;
			}
		}				
		if(tableNode!=null && tableNode.rows!=null)
		{			
			//expand
			tvExpandAllNodes(tableNode.rows[0].cells[0]);			
		}		
	}	
}
//------------------------------------------------------------------------
//tvExpandAllNodes
//déplie tous les noeuds de treeview
//
//Paramètres:
//	node : le noeud de treeview à déplier
//
//Valeur retournée: aucune
//------------------------------------------------------------------------
function tvExpandAllNodes(node)
{
	if(node.className != 'treeNodeExpanded' && node.className != 'treeNodeCollapsed')  
	{			
		return;
	}	
	//mise à jour de l'icone du noeud
	node.className = 'treeNodeExpanded';
	//expand
	var tableNode=node.parentNode;
	for(var i=0;i<2 && tableNode!=null ;i++)
	{
		tableNode=tableNode.parentNode;
	}
	if(tableNode!=null && tableNode.rows!=null)
	{
		tableNode.rows[1].style.display="";
		
		var childContainer=tableNode.rows[1].cells[1];
		
		var childrenList=childContainer.childNodes;
	
		if(childrenList!=null)
		{
			var childrenLength=childrenList.length;
			for(var i=0;i<childrenLength;i++)
			{
				if(childrenList[i].tagName=="TABLE")
				{					
					tvExpandAllNodes(childrenList[i].rows[0].cells[0]);					
				}
			}
		}
	}
}
//------------------------------------------------------------------------
//tvExpandAllnode
//plie tous les noeuds de treeview
//
//Paramètres:
//	
//
//Valeur retournée: aucune
//------------------------------------------------------------------------
function tvCollapseAllNode()
{		
	var treeView = document.getElementById("treeView");
	if (treeView!=null)
	{
		var tableNode;
		// problème du moteur GECKO espace insécable dans FireFox
		if(treeView.firstChild!= null && treeView.firstChild.nodeType != 3)
		{
			tableNode = treeView.firstChild;
		}
		else
		{
			tableNode = treeView.firstChild;
			while (tableNode.nodeType == 3) {
				tableNode = tableNode.nextSibling;
			}
		}						
		if(tableNode!=null && tableNode.rows!=null)
		{
			//collapse
			tvCollapseAllNodes(tableNode.rows[0].cells[0]);			
		}	
	}
}
//------------------------------------------------------------------------
//tvCollapseAllNodes
//plie tous les noeuds de treeview
//
//Paramètres:
//	node : le noeud de treeview à déplier
//
//Valeur retournée: aucune
//------------------------------------------------------------------------
function tvCollapseAllNodes(node)
{
	if(node.className != 'treeNodeExpanded' && node.className != 'treeNodeCollapsed')  
	{			
		return;
	}	
	//mise à jour de l'icone du noeud
	node.className = 'treeNodeCollapsed';
	//collapse
	var tableNode=node.parentNode;
	for(var i=0;i<2 && tableNode!=null ;i++)
	{
		tableNode=tableNode.parentNode;
	}
	if(tableNode!=null && tableNode.rows!=null)
	{		
		tableNode.rows[1].style.display="none";
		
		var childContainer=tableNode.rows[1].cells[1];
		
		var childrenList=childContainer.childNodes;
	
		if(childrenList!=null)
		{
			var childrenLength=childrenList.length;
			for(var i=0;i<childrenLength;i++)
			{
				if(childrenList[i].tagName=="TABLE")
				{					
					tvCollapseAllNodes(childrenList[i].rows[0].cells[0]);					
				}
			}
		}
	}
}
//Fin des fonctions de treeview
// Same as portal one, without the parentID
function vdpExpandCollapse(caller,objID)
{
	var obj = document.getElementById(objID);
	if (obj)
	{
		(obj.style.display=="none") ? obj.style.display="" : obj.style.display="none";
	}
	if (!typeof caller=='object') caller = document.getElementById(caller);
	if(caller && (typeof caller=='object'))
	{						
		if(caller.className.indexOf("-collapsed") > 0)
			caller.className = caller.className.replace("-collapsed","-expanded");
		else if(caller.className.indexOf("-expanded") > 0)
			caller.className = caller.className.replace("-expanded","-collapsed");
	}
	return true;
}

// Resize iframe if possible (works on distant server, but a distant js must be called)
function resizeIframe(frameId, contentId)
{
	try
	{ 
		if(navigator.userAgent.indexOf("MSIE") > 0)
		{
			window.resizeTo(document.body.scrollWidth,document.body.scrollHeight);
		}
		else
		{
			// Send iframe info on top container
			parent.window.location.hash = "frameId="+ frameId + "&frameHeight=" + document.getElementById(contentId).scrollHeight;
		}
	}
	catch (e) { 
	}
}

// This function will close a popup and reload parent page
function closeAndRefresh()
{
	try
	{
		window.opener.parent.window.location.reload();
	}
	catch(e) {} // Probably no permission to reload parent (cross domain)
	window.close();
}

//------------------------------------------------------------------------
// switchClass
// modifie la classe pour un element donne
//
// Paramètres:
//	l'object dont la classe doit être modifié
//	les deux classes à inverser
// 
// Valeur retournée: aucune
// auteur : omenuel
//------------------------------------------------------------------------
function switchClass( elem, class1, class2 )
{
	if (elem != null)
	{
	  if (elem.className == class1)
	  {
	    elem.className = class2;
	  }
	  else
	  {
	    elem.className = class1;
	  }
	}
}
//************************************************************************
//fonctions javascript utilisées par les treeviews d'administration EasySite
//
//auteur : fsalque
//------------------------------------------------------------------------
//ezsAdminExpandCollapse
//plie/déplie un noeud de treeview, spécifique au fonctionnel délégation
//--> quand on déplie un noeud, si un de ses fils est séléctionné, ses fils sont
//dépliés jusqu'au premier fils selectionné
//
// Remarque : même fonctionnement que la délégation : appel de delegationExpandCollapse 
//
//Paramètres:
//	node : le noeud de treeview à plier/déplier
//
//Valeur retournée: aucune
//------------------------------------------------------------------------
function ezsAdminExpandCollapse(node)
{
	delegationExpandCollapse(node);
}
//ezsAdminTvClicked
//fonction appelée au clic sur une checkbox de selection dans les
//treeview de l'administration EasySite
//Si la checkbox est cochée --> cochage de tous les fils
//Si la checkbox est décochée --> décochage de tous les parents
//
// Remarque : même fonctionnement que la délégation : appel de delegableClicked 
//
//Paramètres:
//	checkBox : la checkbox cliquée par l'utilisateur
//
//Valeur retournée: aucune
//------------------------------------------------------------------------
function ezsAdminTvClicked(checkBox)
{
	delegableClicked(checkBox);
}
