// 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 bNoStyleCheck = bNoStyleCheck || false;
var bInStyleCheck = false;
var abFrameFlags = new Array;

function disableStyleCheck() {
	if (iIntervalHandle != null) {
		clearInterval(iIntervalHandle);
		iIntervalHandle = null;
	}
}

function checkPageStyle() {
	if (bNoStyleCheck) {
		disableStyleCheck();
		return;
	}
	if (bInStyleCheck) {
		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
