// reframe if displayed without frameset
// reframe if not loaded into correct frameset
// check if correct generator is being used
// reload frames which are not showing correct template
// reload frames which have page-specific content

function sFindFile(sPath) {
  var i,j;
  for (i=0; i<sPath.length; ++i)
    if (sPath.charAt(i)=='#' || sPath.charAt(i)=='?')
      break;
  for (j=i; j>=0; --j)
    if (sPath.charAt(j)=='/' || sPath.charAt(j)=='\\')
      break;
  return sPath.substring(j+1,i);
}

var bInStyleCheck = false;
var abFrameFlags = new Array;

function disableStyleCheck() {
  if (iIntervalHandle != null) {
    clearInterval(iIntervalHandle);
	iIntervalHandle = null;
  }
}

function checkPageStyle() {

  if (bInStyleCheck == true)
    return;
  bInStyleCheck = true;
  
  if (!top.cms2am) {
    window.open(cmsframeset+self.location.search);
    disableStyleCheck();
    bInStyleCheck = false;	
	return;
  }

  var sFilename = sFindFile(top.location.pathname);
  
  if (sFilename == "") // if no filename specified, directory only
    sFilename = "default.asp"; // assume default.asp

  if (sFilename != cmsframeset || (self==top && cmsframeset != cmsgenerator)) {
    top.location.replace(cmsframeset+self.location.search);
    disableStyleCheck();
    bInStyleCheck = false;	
	return;
  }

  sFilename = sFindFile(self.location.pathname);
  if (sFilename == "") // if no filename specified, directory only
    sFilename = "default.asp"; // assume default.asp
  
  if (sFilename != cmsgenerator) {
    self.location.replace(cmsgenerator+self.location.search);
	disableStyleCheck();
    bInStyleCheck = false;	 
	return;
  }

  var bAllFrames = true;
  if (cmsframeset != cmsgenerator) { // frameset(s) are in use 
    for (var i=1; (oTestFrame=eval("top.frame"+i))!=null; ++i) {
	  if (oTestFrame.cmsreloadstrategy == null) {
	    bAllFrames = false; // not all frames loaded yet
      }
	  else if (abFrameFlags.length < i || abFrameFlags[i] == null || abFrameFlags[i] == false) {
	    abFrameFlags[i] = true;
        if (oTestFrame.cmsreloadstrategy == RELOAD_ALWAYS ||
        (oTestFrame.cmsreloadstrategy == RELOAD_STYLE && oTestFrame.cmspagestyle != cmspagestyle) ||
        (oTestFrame.cmsreloadstrategy == RELOAD_TEMPLATE && oTestFrame.cmstemplate != cmstemplate) ||
        (oTestFrame.cmsreloadstrategy == RELOAD_AUTO && oTestFrame.cmsautoreload == true)) {
          oTestFrame.location.replace(oTestFrame.location.pathname+"?id="+cmspageid);
        }
      }
    }
  }
  if (bAllFrames == true) {
    disableStyleCheck();
	if (self.fnSubFramesLoaded)
	  fnSubFramesLoaded();
  }
  bInStyleCheck = false;
}

// repeatedly check each frame until all correct for this style
// compensates for possible slow loading of subframes
var iIntervalHandle = setInterval("checkPageStyle()",100);
setTimeout("checkPageStyle()",25); // ensure a 2nd call, covers fast-loading browsers
checkPageStyle(); // don't wait for first interval to start
