// mirrored from constants.asp
var RELOAD_NEVER = 0;
var RELOAD_TEMPLATE = 1;
var RELOAD_AUTO = 2;
var RELOAD_ALWAYS = 3;
var RELOAD_STYLE = 4;

function sFindFile(sPath) {
  for (var i=0; i<sPath.length; ++i)
    if (sPath.charAt(i)=='#' || sPath.charAt(i)=='?')
      break;
  for (var j=i; j>=0; --j)
    if (sPath.charAt(j)=='/' || sPath.charAt(j)=='\\')
      break;
  var sFilename = sPath.substring(j+1,i);
  if (sFilename == "") // if no filename specified, directory only
    sFilename = "default.asp"; // assume default.asp
  return sFilename;
}

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 (cmsframeset != cmsgenerator) { // current page requires frames
    if (parent != null && parent != self && parent.cms2am != null) { // currently in cms frames
      var sFilename = sFindFile(parent.location.pathname); // find current frameset page
      if (sFilename != cmsframeset) {
        parent.location.replace(cmsframeset+self.location.search);
        disableStyleCheck();
        bInStyleCheck = false;	
    	  return;
      }
		}
		else { // not currently in cms frames
      self.location.replace(cmsframeset+self.location.search);
      disableStyleCheck();
      bInStyleCheck = false;	
  	  return;
    }
	}
	else { // current page does not require frames
	  if (parent != null && parent != self && parent.cms2am != null) { // currently in cms frame
      parent.location.replace(cmsgenerator+self.location.search);
    	disableStyleCheck();
      bInStyleCheck = false;	 
    	return;
		}
	}

  // find current generator page
  sFilename = sFindFile(self.location.pathname);
  if (sFilename != cmsgenerator) {
    self.location.replace(cmsgenerator+self.location.search);
  	disableStyleCheck();
    bInStyleCheck = false;	 
  	return;
  }

  var bAllFrames = true;
  if (cmsframeset != cmsgenerator) { // frames are in use 
    for (var i=1; (oTestFrame=eval("parent.frame"+i))!=null; ++i) {
	  var iStrategy = oTestFrame.cmsreloadstrategy;
	  if (iStrategy == null) {
	    bAllFrames = false; // not all frames loaded yet
      }
	  else if (abFrameFlags.length < i || abFrameFlags[i] == null || abFrameFlags[i] == false) {
	    abFrameFlags[i] = true;
		var bReload = false;
		if (iStrategy == RELOAD_ALWAYS)
		  bReload = true;
		if ((iStrategy == RELOAD_AUTO || iStrategy == RELOAD_STYLE) && oTestFrame.cmspagestyle != cmspagestyle)
		  bReload = true;
		if ((iStrategy == RELOAD_AUTO || iStrategy == RELOAD_TEMPLATE) && oTestFrame.cmstemplate != cmstemplate)
		  bReload = true;
		if (iStrategy == RELOAD_AUTO && oTestFrame.cmsautoreload == true)
		  bReload = true;
		if (bReload == true)
          oTestFrame.location.replace(oTestFrame.location.pathname+"?id="+cmspageid+"&revision="+cmsrevision);
      }
    }
  }
  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
