var RefToPopUp;

function FindFrameByName(FrameName) {
   if (FrameName == "") {
      Frame = window;
   } else {
      CurFrameSet = window;      
      Frame = null;
      while (CurFrameSet != null && Frame == null) {
         for (i=0; i < CurFrameSet.frames.length; i++) {
            CurFrame = CurFrameSet.frames[i];
            if (CurFrame.name == FrameName) {
               Frame = CurFrame;
            }
         }
         if (CurFrameSet.parent != CurFrameSet) {
            CurFrameSet = CurFrameSet.parent;
         } else {
            CurFrameSet = null;
         }
      }
   }
   return Frame;
}

function wAnchorPosition_getPageOffsetLeft (el) {
   var ol = el.offsetLeft;
   while ((el = el.offsetParent) != null) { 
   	ol += el.offsetLeft; 
	}
   return ol;
}

function wAnchorPosition_getPageOffsetTop (el) {
	var ot = el.offsetTop;
	while((el = el.offsetParent) != null) { 
		ot += el.offsetTop; 
	}
	return ot;
}

function DoCheckBoxes(FromFrame) {
   for (j=0;j<FromFrame.document.forms[0].elements.length;j++) {
      CurElem = FromFrame.document.forms[0].elements[j];
      if ((CurElem.type == "checkbox") && (!CurElem.checked)) {
         if (CurElem.value=="true") {
            //For booleans            
            FromFrame.document.forms[0].elements[1].value = FromFrame.document.forms[0].elements[1].value + "|" + CurElem.name + "_" + CurElem.checked;            
         } else {
            //for Set Type
            //¤ is used to indicate that we must substract the value from the set
            FromFrame.document.forms[0].elements[1].value = FromFrame.document.forms[0].elements[1].value + "|" + CurElem.name + "_¤"+ CurElem.value;            
         }
      } else {
         if (CurElem.type=="select-multiple") {
            //for Set Type as listbox, reset all
            FromFrame.document.forms[0].elements[1].value = FromFrame.document.forms[0].elements[1].value + "|" + CurElem.name + "_";
         }
      }
   }
}

function UpdateOtherFramesForm(FromFrame, FromQVPName) {
   for (i=0;i<window.parent.frames.length;i++) {
      var CurFrame = window.parent.frames[i];
      if (CurFrame.document.forms[0] != null) {
         if (CurFrame.name != FromQVPName) {
            //Send the content of all other frames in an hidden input of the frame where the method is called
            for (j=2; j < CurFrame.document.forms[0].elements.length; j++) {
               if (j == 2) {
                  FromFrame.document.forms[0].elements[1].value = CurFrame.document.forms[0].elements[j].name + "_" + CurFrame.document.forms[0].elements[j].value;
               } else {
                  FromFrame.document.forms[0].elements[1].value = FromFrame.document.forms[0].elements[1].value + "|" + CurFrame.document.forms[0].elements[j].name + "_" + CurFrame.document.forms[0].elements[j].value;
               }
            }
         }
      }
   }
}

function SelectFolder(ScenName, Selected, TargetQVPName, FromQVPName, IsSimpleFolder, ObjAddr, FromAgent, FromScen, TargetScen, IsButton) {
   TargetFrame = FindFrameByName(TargetQVPName);
   FromFrame = FindFrameByName(FromQVPName);
   if ((TargetFrame != null) && (FromFrame != null)){
      FromFrame.document.forms[0].elements[0].value = "SELECTFOLDER;" + ScenName + ";" + Selected + ";" + ObjAddr + ";" + FromAgent;
      UpdateOtherFramesForm(FromFrame, FromQVPName);
      if ( (TargetQVPName != null) && (TargetQVPName.length > 0) ) {
         FromFrame.document.forms[0].target = TargetQVPName;
      } else {
         FromFrame.document.forms[0].target = "";
      }
      DoCheckBoxes(FromFrame);
      FromFrame.document.forms[0].submit();
   } else {
      alert("The frame " + TargetQVPName + " was not found in script \"SelectFolder\"");
   }
}

function CallWEDMotor(MethodName, ObjAddr, FromQVPFrameName, TargetQVPFrameName, TargetFrameName, NewWindow, WinParams, OwnerScen, FrameAddr, BrowserTarget, FromAgent, PageID, RefreshFrameName, ThenRefresh) {

   FromFrame= FindFrameByName(FromQVPFrameName);
   if (FromFrame != null) {
      var GoodPageID = PageID;
      if (NewWindow || TargetQVPFrameName == "_blank" || BrowserTarget == "_blank") {
         GoodPageID = -1;
      }
      FromFrame.document.forms[0].elements[0].value = "CALLMETHOD;" + MethodName +";" + ObjAddr + ";" + FromAgent + ";" + GoodPageID + ";" + ThenRefresh;
      if (FromFrame != window) {
         UpdateOtherFramesForm(FromFrame, FromQVPFrameName);
         if ((!NewWindow) && (TargetQVPFrameName != "_top") && (TargetQVPFrameName != "_parent") && (TargetQVPFrameName != "_blank") && (BrowserTarget != "_top") && (BrowserTarget != "_parent") && (BrowserTarget != "_blank")) {
            FromFrame.document.forms[0].elements[0].value = FromFrame.document.forms[0].elements[0].value + ";" + OwnerScen + ";" + TargetQVPFrameName + ";" +  TargetFrameName + ";" + FrameAddr;
         } else {
            //when result page will be opened in an other window do not pass the name of the target frame
            FromFrame.document.forms[0].elements[0].value = FromFrame.document.forms[0].elements[0].value + ";" + OwnerScen + ";"                      + ";" +  TargetFrameName + ";" + FrameAddr;
         }
      }
      if (RefreshFrameName.length>0) {
         FromFrame.document.forms[0].elements[0].value = FromFrame.document.forms[0].elements[0].value + ";" + RefreshFrameName; 
      }
      if (NewWindow) {
         OtherWin = FromFrame.open("", "NewWin", WinParams, false);
         FromFrame.document.forms[0].target = "NewWin";
      } else {
         if ((BrowserTarget != null) && (BrowserTarget.length > 0) && (BrowserTarget != "Default")) {
            FromFrame.document.forms[0].target = BrowserTarget;
         } else {
            FromFrame.document.forms[0].target = TargetQVPFrameName;
         }
      }
      DoCheckBoxes(FromFrame);	
      FromFrame.document.forms[0].submit();
   } else {
      alert(" Script \"CallWEDMotor\" cannot find the frame " + FromQVPFrameName);
   }
}
         
function GetNextList(ListName, GoBack, FrameName, FromScenName, ForQVPName, Start, NbElem, ObjAddr, ListVarAddr, ListTypeAddr, PageID, FromAgent) {
   GoodFrame = FindFrameByName(FrameName);
   if (GoodFrame != null) {
      UpdateOtherFramesForm(GoodFrame, FrameName);
      GoodFrame.document.forms[0].elements[0].value = "GETNEXTLIST;" + ObjAddr + ";" + ListVarAddr + ";"+ ListTypeAddr + ";" + Start + ";" +  NbElem + ";" + GoBack + ";" + ListName + ";" + FromScenName + ";" + ForQVPName + ";" + PageID + ";" + FromAgent;
      DoCheckBoxes(GoodFrame);
      GoodFrame.document.forms[0].submit();
   } else {
      alert("Frame not found in script \"GetNextList\" : " + FrameName);
   }
}

function WEDRefTo(RefScenName, FromScenName, FromQVPFrameName, TargetQVPFrameName, TargetFrameName, NewWindow, WinParams, ObjAddr, RefVarAddr, TypeAddr, BrowserTarget, FromAgent, IsList, PageID) {
   //When accessing a refto or a ListOf thru a HTML link
   FromFrame = FindFrameByName(FromQVPFrameName);
   if (FromFrame != null) {
      if ( (TargetQVPFrameName.length > 0) && (!NewWindow) && (TargetQVPFrameName != "_top") && (TargetQVPFrameName != "_parent") && (TargetQVPFrameName != "_blank") && (BrowserTarget != "_top") && (BrowserTarget != "_parent") && (BrowserTarget != "_blank")) {
         FromFrame.document.forms[0].elements[0].value = "GETSREFTO;" + ObjAddr + ";" + RefVarAddr +";" + TypeAddr + ";" + RefScenName + ";" + FromScenName + ";" + FromAgent + ";" + IsList + ";" + PageID + ";" + TargetQVPFrameName + ";" + TargetFrameName;
      } else {
         FromFrame.document.forms[0].elements[0].value = "GETSREFTO;" + ObjAddr + ";" + RefVarAddr +";" + TypeAddr + ";" + RefScenName + ";" + FromScenName + ";" + FromAgent + ";" + IsList + ";" + PageID;
      }
      if (NewWindow) {
         OtherWin = FromFrame.open("", "NewWin", WinParams, false);
         FromFrame.document.forms[0].target = "NewWin";
      } else {
         if ((BrowserTarget != null) && (BrowserTarget.length > 0) && (BrowserTarget != "_self")) {
            FromFrame.document.forms[0].target = BrowserTarget;
         } else {
            FromFrame.document.forms[0].target = TargetQVPFrameName;
         }
      }
      FromFrame.document.forms[0].submit();
   } else {
      alert("Cannot find the frame " + FromQVPFrameName);
   }
}

function FindHTMLElement(InFrame, FromName, Before) {
   for (j=0;j<InFrame.document.forms[0].elements.length;j++) {
      if (InFrame.document.forms[0].elements[j].name == FromName) {
         if (Before) {
            return InFrame.document.forms[0].elements[j - 1];
         } else {
            return InFrame.document.forms[0].elements[j];
         }
      }
   }
}

function GetReferenceActions(ObjAddr, TypeAddr, VarAddr, FrameName, FromAgent, ForQVP, ListQVP, PageID) {
   var GoodFrame = FindFrameByName(FrameName);
   if (GoodFrame != null) {
      var Index = -2;
      if (ListQVP.length > 0) {
         var List = FindHTMLElement(GoodFrame, ListQVP, false);
         if (List != null) {
            Index = List.selectedIndex;
         }
      }
      GoodFrame.document.forms[0].elements[0].value = "GETREFTOPOPUP;" + ObjAddr + ";" + TypeAddr +";" + VarAddr + ";" + FromAgent + ";" + Index + ";" + FrameName + ";" + PageID;
      var x = 0;
      var y = 0;
	   var width = 100;
	   var height = 100;
      if (ListQVP.length > 0) {
         //for a listof
	      width = 120;
	      height = 220;
      }
      var theRef = FindHTMLElement(GoodFrame, ForQVP, false);
      if (theRef != null) {
	      x = wAnchorPosition_getPageOffsetLeft(theRef);
	      y = wAnchorPosition_getPageOffsetTop(theRef);
         x = x + GoodFrame.screenLeft + 20;
         y = y + GoodFrame.screenTop - height;
	   }
      var Params = "";
	   if (navigator.appName == 'Netscape') {
	   	Params="menubar=no,resizable=no,screenX=" + x + ",screenY=" + y+ ",innerHeight=" + height + ",innerWidth=" + width;
	   } else {
         Params = "alwaysRaised, dependent, height=" + height + ", width=" + width + ", screenX=" + x +", screenY=" + y + ", left=" + x +", top=" + y +"";
      }
      RefToPopUp = window.open("", "RefToPopUp", Params, false);
      GoodFrame.document.forms[0].target = "RefToPopUp";
      GoodFrame.document.forms[0].submit();
   }
}

function SelectRefToCombo(Agent, ObjAddr, Rank, FromAgent, FromQVPFrameName, PageID) {
   var GoodFrame = FindFrameByName(FromQVPFrameName);
   if (GoodFrame != null) {
      GoodFrame.document.forms[0].elements[0].value = "SELECTREFTOCOMBO;" + Agent + ";" + ObjAddr +";" + Rank + ";" + FromAgent + ";" + PageID;
      GoodFrame.document.forms[0].target = "";
      UpdateOtherFramesForm(GoodFrame, FromQVPFrameName);
      DoCheckBoxes(GoodFrame);
      GoodFrame.document.forms[0].submit();
   }
}

function ListCtrlEvent(Agent, ScenName, ObjAddr, RefVarAddr, TypeAddr, Rank, FromAgent, IsForSelect, CodeOwner, IsChecked, PageID, FromQVPFrameName) {
   var GoodFrame = FindFrameByName(FromQVPFrameName);
   if (GoodFrame != null) {
      GoodFrame.document.forms[0].elements[0].value = "LISTCTRLEVENT;" + Agent + ";" + ScenName +";" + ObjAddr + ";" + RefVarAddr + ";" + TypeAddr + ";" + Rank + ";" + FromAgent + ";" + IsForSelect + ";" + CodeOwner + ";" + PageID + ";";
      if (IsChecked) {
         GoodFrame.document.forms[0].elements[0].value = GoodFrame.document.forms[0].elements[0].value + 1; 
      } else {
         GoodFrame.document.forms[0].elements[0].value = GoodFrame.document.forms[0].elements[0].value + 0; 
      }
      GoodFrame.document.forms[0].target = "";
      GoodFrame.document.forms[0].submit();
   }
}

function SelectRefToListCtrl(Agent, ObjAddr, Rank, FromQVPFrameName, IsChecked, PageID) {
   var GoodFrame = FindFrameByName(FromQVPFrameName);
   if (GoodFrame != null) {
      GoodFrame.document.forms[0].elements[0].value = "SELECTREFTOLISTCTRL;" + Agent + ";" + ObjAddr +";" + Rank + ";" + PageID + ";";
      if (IsChecked) {
         GoodFrame.document.forms[0].elements[0].value = GoodFrame.document.forms[0].elements[0].value + 1; 
      } else {
         GoodFrame.document.forms[0].elements[0].value = GoodFrame.document.forms[0].elements[0].value + 0; 
      }
      GoodFrame.document.forms[0].target = "";
      GoodFrame.document.forms[0].submit();
   }
}

function ShowNewPopUp(ObjAddr, TypeAddr, VarAddr, ControlAgent, FrameName, FromAgent, ForQVP, Params, PageID) {
   var GoodFrame = FindFrameByName(FrameName);
   if (GoodFrame != null) {
      var InfoElem = FindHTMLElement(GoodFrame, ForQVP, true);
      var Info = InfoElem.value;
      GoodFrame.document.forms[0].elements[0].value = "NEWPOPUP;" + ObjAddr +";" + TypeAddr + ";" + VarAddr + ";" + FromAgent + ";" + Info + ";" + ControlAgent + ";" + PageID + ";" + FrameName;
      var x = 0;
      var y = 0;
      var theRef = FindHTMLElement(GoodFrame, ForQVP, false);
      if (theRef != null) {
	      x = wAnchorPosition_getPageOffsetLeft(theRef);
	      y = wAnchorPosition_getPageOffsetTop(theRef);
         x = x  + GoodFrame.screenLeft + 20;
         y = y  + GoodFrame.screenTop;
	   }
      var cParams = Params + "screenX=" + x +", screenY=" + y + ", left=" + x +", top=" + y +"";
      RefToPopUp = window.open("", "RefToPopUp", cParams, false);
      GoodFrame.document.forms[0].target = "RefToPopUp";
      GoodFrame.document.forms[0].submit();
   } else {
      alert("\"ShowNewPopUp\" cannot find frame: " + FrameName);
   }
}

function GetPressedcode(e, ForFrame) {
	var PressCode = -1;
	if (navigator.appName == "Netscape") {
		PressCode = e.which;
	} else {
		if (ForFrame.event.type == "keypress") {
			PressCode = ForFrame.event.keyCode;
		}
	}
	return PressCode;
}

function IsEnterPressedFor(e, ForFrame) {
	var whichCode = GetPressedcode(e, ForFrame);
	return (whichCode == 13);
}

function IsEscPressedFor(e, ForFrame) {
	var whichCode = GetPressedcode(e, ForFrame);
	return (whichCode == 27);
}

var SelectSelection;
function SetSelectSelection(objTarget) {
	for (rank=0; rank<objTarget.options.length; rank++) {
		if (objTarget.options[rank].selected) {
			SelectSelection=rank;
			return;
		}
	}
}

function RestoreSelectSelection(objTarget) {
	for (rank=0; rank<objTarget.options.length; rank++) {
		if (rank == SelectSelection) {
			objTarget.options[rank].selected = 1;
		} else {
			objTarget.options[rank].selected = 0;
		}
	}
}

function autoTab(input, len, e) {
 var keyCode = e.keyCode;
 var filter = [0,8,9,16,17,18,37,38,39,40,46];
 if(input.value.length >= len && !containsElement(filter, keyCode)) {
  input.value = input.value.slice(0, len);
  input.form[(getIndex(input)+1) % input.form.length].focus();
 }
}

function containsElement(arr, ele) {
 var found = false, index = 0;
 while(!found && index < arr.length)
  if(arr[index] == ele)
   found = true;
  else
   index++;
 return found;
}

function getIndex(input) {
 var index = -1, i = 0, found = false;
 while (i < input.form.length && index == -1)
  if (input.form[i] == input)index = i;
   else i++;
 return index;
}

