//ROI Systems Inc.
//MANAGE-2000
//Global javascript functions

/////////////////////////////////////////////////////////////////////////////////////////
// Pop-up Support
// Used for pop-up tools processing like CrossRef, Help, ImNoFind, Calendar, Calculator, AreYouSure...

var popUp; 

function roiOpenDialog(NavigateUrl, OpenType, Target, ExtraQS, Top, Left, Height, Width, srcname, destname, postBack, Resizable, ScrollBars, ShowBrowserControls)
{
// build querystring
var QS;
var srcvalue;

    if (srcname == '')
    {
    srcvalue = '';
    }
    else
    {
		var src = document.forms[0].elements[srcname];
		// if doing IM.NO.FIND we need the unmasked version including |fac
		if (ExtraQS.indexOf('includeFac') > -1)
		   srcvalue = src.defaultValue
		else
		{ //if there is a internal real (unmasked) value then use that
		if (src.realvalue != null)
			srcvalue = src.realvalue;
		else
			srcvalue = src.value;
			}
    }

    QS = '?formname='+ document.forms[0].name
	     + '&id=' + destname
	     + '&selected=' + srcvalue
	     + '&postBack=' + postBack
	     + '&OpenType=' + OpenType;
	     
// if ExtraQS not empty then add it to QueryString
	if (ExtraQS != '')
	{
	QS = QS + '&' + ExtraQS;
	}      

// OpenType new window
    if (OpenType == 0)
    {
      var sFeatures;
      sFeatures = 'width=' + Width + ',height=' + Height
                + ',left=' + Left + ',top=' + Top
                + ',resizable=' + Resizable + ',scrollbars=' + ScrollBars
                + ',location=' + ShowBrowserControls
                + ',menubar=' + ShowBrowserControls
                + ',status=' + ShowBrowserControls
                + ',titlebar=' + ShowBrowserControls
                + ',toolbar=' + ShowBrowserControls;
	  popUp = window.open(NavigateUrl + QS, Target, sFeatures);
	}
// OpenType modal dialog
    if (OpenType == 1)
    {
      var sFeatures;
      var sModalResult;
      var arArguments = new Array(2);
      arArguments[0] = NavigateUrl + QS;
      arArguments[1] = Target //title
      sFeatures = 'dialogWidth:' + Width + 'px;dialogHeight:' + (Height+30) + 'px;'
                + 'dialogTop:' + Top + ';dialogLeft:' + Left + ';status:0'
                + ';resizable:' + Resizable
                + ';help:0'
                + ';scroll:' + ScrollBars;

//document.forms[0].style.cursor = 'wait';
	  sModalResult = window.showModalDialog('../../mt/MTUtilitiesLib/DialogShell.htm', arArguments , sFeatures);
//document.forms[0].style.cursor = 'default';

		if (destname != '') 
		{
			var obj = document.forms[0].elements[destname];
			
            //if returning to a hidden field then return a modal result string mrCancel
			var bReturnCancel = ((obj.style.display == "none") || obj.type == "hidden");
			var bReturnOk = bReturnCancel;
			var bReturnResult = true;
			var bClearOnCancel = false;
			
			if (ExtraQS.indexOf('ClearOnCancel') > -1) bClearOnCancel = true;
		// if doing IM.NO.FIND we need the clear on cancel to avoid looping
			if (ExtraQS.indexOf('includeFac') > -1) bClearOnCancel = true;
			
			if (sModalResult == null) {bReturnResult=false};
			if (sModalResult == '') {bReturnResult=false};
			//if ((sModalResult == "mrCancel") && !bReturnCancel) {sModalResult=''};
			if ((sModalResult == "mrOk") && !bReturnOk) {bReturnResult=false};
			//if cancelling from optional supercede then null out field to prevent looping
			if (sModalResult == "mrCancel")
			     {
			      if (bClearOnCancel == true)
			          { bReturnResult=true; sModalResult='';}
		          else
		          	if (!bReturnCancel) {bReturnResult=false;}
			     }

			if (bReturnResult)
			{
			  obj.value = sModalResult;
			  if (obj.realvalue != null)
			  {
			    if (sModalResult.indexOf('*') != -1){ obj.focus();} //set focus so that OnFocusOut masking will fire
			    obj.realvalue = sModalResult;
			  }
			}
		}
	    if (postBack == 'True')	__doPostBack(destname,'');
    		
   		if (postBack.indexOf('_PopUpDefaultScript') > -1)
    	{  
    	    if (sModalResult != "mrCancel") eval(postBack);
    	    if (sModalResult == "mrCancel") document.forms[0].elements[destname].focus();
    	}
    }
// OpenType modeless dialog
    if (OpenType == 2)
    {
      var sFeatures;
      var arArguments = new Array(3);
      arArguments[0] = NavigateUrl + QS;
      arArguments[1] = Target //title
      arArguments[2] = window;
      sFeatures = 'dialogWidth:' + Width + 'px;dialogHeight:' + Height + 'px;'
                + 'dialogTop:' + Top + ';dialogLeft:' + Left + ';status:0'
                + ';resizable:' + Resizable
                + ';help:0'
                + ';scroll:' + ScrollBars;

	  popUp = window.showModelessDialog('../../mt/MTUtilitiesLib/DialogShell.htm', arArguments , sFeatures);
    }
    if (OpenType == 3)
    { // OpenType PopUp
// for OpenType PopUp the client page must also include a download behavior element
// with its Body element
//        <DOWNLOAD ID=dwn STYLE="BEHAVIOR:url(#default#download)" />
        function onDone(src)
        {
            oPopUp.document.write(src);
            var oPopupBody = oPopUp.document.body;
            oPopUp.show(Top, Left, Width, Height, oPopupBody);
        }
        var oPopUp = window.createPopup(null);
        dwn.startDownload(NavigateUrl + QS,onDone);
    }
}

// For a popup page coding example see /mt/Calendar

// Javascript function AcceptResult
// Used for OpenType 0 = NewWindow and OpenType 2 = ModelessDialog
// Not used for OpenType 1= ModalDialog
//
// gets a pointer to the desired form and html control
// It then assigns the new value.
// Then if postback has been set to true it requests a postback on target form,
// whereupon the server side code // for textchanged is fired.

function AcceptResult(formName, id, result, postBack, opentype)
{
    if (opentype = '0')
    {//window.open returning from out of form
	eval('var theform = document.' + formName + ';');
	popUp.close();
	if (id != '') theform.elements[id].value = result;
	}
	if (opentype = '2')
	{//window.showModelessDialog accepting result in form
	eval('var theform = document.' + formName + ';');
	if (id != '') theform.elements[id].value = result;
	}
	if (postBack == 'True')
		__doPostBack(id,'');
    		if (postBack.indexOf('_PopUpDefaultScript') > -1)
    		  eval(postBack);
}		

function CloseWindow()
{
	self.close();
}
//
///////////////////////////////////////////////////////////////////////////////////////
// F1 Help request handler

function roiHelpHandler(id)
{
 var bFound;
 bFound = false;
// check for element with explicit help attributes
 var sFile;
 var sField;
 try
 {
    sFile = window.event.srcElement.attributes["file"].value;
    sField = window.event.srcElement.attributes["field"].value;
 }
 catch(ex)
 {
 sFile = ""
 sField = ""
 }
 finally {}
 
//If this element isn't marked then check one node up in the html tree  
if ((sFile == "") && (sField == ""))
{
try
{
    sFile = window.event.srcElement.parentElement.attributes["file"].value;
    sField = window.event.srcElement.parentElement.attributes["field"].value;
}
catch(ex){}
finally {}
}

//if the file and field have been identified then open help window
if ((sFile != "") && (sField != ""))
{
roiOpenDialog('../../mt/help/fieldhelp.aspx',2,'help','FileName=' + sFile + '&FieldName=' + sField,100,100,400,700,'','','false', 'yes', 'yes', 'no');
window.event.returnValue = false;
//roiOpenDialog("../../mt/help/help.aspx",1,"help","file="+sFile+"&field="+sField, 100, 100, 400, 600, "", "", "false", "yes", "yes", "no");
bFound = true;
}

//if nothing found yet post back and let the server try to determine help source
if (bFound == false)
{
// post back to server to have the page check its metadata bindings
__doPostBack(id,'help='+window.event.srcElement.id);
window.event.returnValue = false;
bFound == true;
}
}
//
///////////////////////////////////////////////////////////////////////////////////////
// Page Scroll Position Functions
function roiPageScroller_SaveScrollPos()
 {
  var scrollX, scrollY;
   if (document.all)
    {
      if (!document.documentElement.scrollLeft)
        scrollX = document.body.scrollLeft;
      else scrollX = document.documentElement.scrollLeft;
      if (!document.documentElement.scrollTop)
        scrollY = document.body.scrollTop;
      else scrollY = document.documentElement.scrollTop;
    }
  else
    { 
      scrollX = window.pageXOffset;
      scrollY = window.pageYOffset;
    }
  try
    {
      document.forms[0].hScrollPosition.value = scrollX + "," + scrollY;
    }
  catch(ex){}
  finally {}
 }
     
function roiPageScroller_SetScrollPos(x,y)
 {
   window.scrollTo(x, y);
 }

function roiPageScroller_Enable()
{
window.onclick = roiPageScroller_SaveScrollPos;
window.onkeypress = roiPageScroller_SaveScrollPos;
window.onscroll = roiPageScroller_SaveScrollPos;
}


///////////////////////////////////////////////////////////////////////////////////////
//igGrid Functions

  function m2kIgGridToggleExpansion(gridId){
    // Loop thru the rows of Band 0 and toggle each one
    var oGrid = igtbl_getGridById(gridId);
    if (oGrid) { 
      var oBand = oGrid.Rows.getRow(0).Band;
      if (oBand) {
        var arExpandImage = oBand.ExpandImage.split("/");
        var sExpandImage = arExpandImage[arExpandImage.length -1];
        var arCollapseImage = oBand.CollapseImage.split("/");
        var sCollapseImage = arCollapseImage[arCollapseImage.length - 1];
        srcCornerImage = event.srcElement.src;
        if (srcCornerImage) {
          arCornerImage = srcCornerImage.split("/");
          sCornerImage = arCornerImage[arCornerImage.length - 1];
    
          var oRows = oGrid.Rows;
          for(i=0; i<oRows.length; i++){
            oRow = oRows.getRow(i);
            oRow.setExpanded(sCornerImage == sExpandImage);
          }
       
          if (sCornerImage == sExpandImage){
            arCornerImage[arCornerImage.length - 1] = sCollapseImage; 
          } else {
            arCornerImage[arCornerImage.length - 1] = sExpandImage;
          }        
          event.srcElement.src = arCornerImage.join("/"); 
        }
      }  
    }  
  }
    
///////////////////////////////////////////////////////////////////////////////////////
//AJAX Functions

   function m2kGetAJAXCommand() {
	  var xmlhttp;
	  /*@cc_on
	  @if (@_jscript_version >= 5)
	    try {
	      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	    } catch (e) {
	      try {
	        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	      } catch (E) {
	        xmlhttp = false;
	      }
	    }
	  @else
	  xmlhttp = false;
	  @end @*/
	  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
	    try {
	      xmlhttp = new XMLHttpRequest();
	    } catch (e) {
	      xmlhttp = false;
	    }
	  }
	  return xmlhttp;
	}

	function m2kAJAXLoadXMLDoc(url) {
	    // branch for native XMLHttpRequest object
	    if (window.XMLHttpRequest) {
	        m2kAJAXCommand .onreadystatechange = m2kProcessAJAXReqChange;
	        m2kAJAXCommand .open("GET", url, true);
	        m2kAJAXCommand .send(null);
	    // branch for IE/Windows ActiveX version
	    } else if (window.ActiveXObject) {
	        if (m2kAJAXCommand ) {
	            m2kAJAXCommand .onreadystatechange = m2kProcessAJAXReqChange;
	            m2kAJAXCommand .open("GET", url, true);
	            m2kAJAXCommand .send();
	        }
	    }
	}

	function m2kProcessAJAXReqChange() {
	    // only if req shows "loaded"
	    //ajaxCommand, ResultHandler, AsXML
	    if (m2kAJAXCommand.readyState == 4) {
	        // only if "OK"
	        if (m2kAJAXCommand.status == 200) {
	            //m2kAJAXCommand.ResponseText contains the result in text form	
	            //m2kAJAXCommand.responseXML contains the result in xml form DOM-compatible document object 	
                m2kAJAXResultHandler();
	        } else {
	            alert("There was a problem retrieving the XML data:\n" +
	                m2kAJAXCommand.statusText);
	        }
	    }
	}

