
function ionasFrameCheckGetAbsoluteUrl(url){
	return url;
}

function ionasAddParamsToUrl(url, params) {
	var insPos = url.indexOf("#") == -1 ? url.length : url.indexOf("#");
	return url.substring(0, insPos) + (url.indexOf("?") == -1 ? "?" : "&") + params + url.substring(insPos);
}

function ionasGetUrlSearch(url) {
	if (url.indexOf("?") == -1) {
		return "";
	} else if (url.indexOf("#") == -1) {
		return url.substring(url.indexOf("?"));
	} else {
		return url.substring(url.indexOf("?"), url.indexOf("#"));
	}
}

var IONAS_FRAME_CHECK_RELAOD = false;
function ionasFrameCheckExec(myFrameName, frameName, ionasDocumentId, docUrl, framesetUrl){
	if (IONAS_FRAME_CHECK_RELAOD){
		return;
	}
	var isEditPost = /\/html_engine\.pl(\#.*|)$/;
	if (isEditPost.test(window.location.href)){
		return;
	}

	var isLiveScript = /^\/_scripts\//;
	if (isLiveScript.test(window.location.pathname)){
		return;
	}

	if (ionasFrameCheckGetParam("frameCheck") == "0"){
		return
	}
	if (parent.frames[frameName]){
		var f = parent.frames[frameName];
		var overLoadParam = ionasFrameCheckGetParam("ionasFrameCheckOverload_"+frameName);
		if (overLoadParam != ""){
			if (!ionasGetUrlSearch(overLoadParam) && ionasGetUrlSearch(docUrl)) {
				overLoadParam = ionasAddParamsToUrl(overLoadParam, ionasGetUrlSearch(docUrl).substring(1));
			}
				
			ionasFrameCheckSetHref(f.location, overLoadParam);
		} else if (ionasFrameCheckGetDocumentId(f) != ionasDocumentId){
			ionasFrameCheckSetHref(f.location, ionasFrameCheckGetAbsoluteUrl(docUrl))
		}
		return true;
	} else {
		var href = ionasAddParamsToUrl(window.location.href, "referrer=" + encodeURIComponent(document.referrer));
		
		framesetUrl = ionasAddParamsToUrl(framesetUrl, "ionasFrameCheckName=" + encodeURIComponent(myFrameName) + "&ionasFrameCheckUrl=" + encodeURIComponent(href));

		IONAS_FRAME_CHECK_RELAOD = true;
		if (ionasFrameCheckGetParam("debug") == 1){
			ionasFrameCheckSetHref(null, framesetUrl);
		} else {
			ionasFrameCheckSetHref(parent.location, ionasFrameCheckGetAbsoluteUrl(framesetUrl));
		}
		return false;
	}
}
function ionasFrameCheckGetDocumentId(win){
	var m = win.document.getElementsByTagName("meta");
	for (var k=0; k < m.length; k++){
		if (m[k].getAttribute("name").toLowerCase() == "ionasdocumentid"){
			return m[k].getAttribute("content");
		}
	}

}

function ionasFrameCheckGetParam(name) {
	var myParams = window.location.search.split("?");
	if (myParams[1]) {
		myParams = myParams[1].split("&");
	}
	for (var k=0;k<myParams.length;k++) {
		var myKeyVal = myParams[k].split("=");
		if (myKeyVal[0]==name) {
			return decodeURIComponent(myKeyVal[1]);
		}
	}
	return "";
}

var ionasFrameCheckParamCheckRetry = window.setInterval("ionasFrameCheckParamCheck();", 500);
function ionasFrameCheckParamCheck(){
	if (ionasFrameCheckGetParam("frameCheck") == "0"){
		window.clearInterval(ionasFrameCheckParamCheckRetry);
		return
	}
	var frameName = ionasFrameCheckGetParam("ionasFrameCheckName");
	var frameUrl = ionasFrameCheckGetParam("ionasFrameCheckUrl");
	if(frameUrl=="") {
		window.clearInterval(ionasFrameCheckParamCheckRetry);
		return;
	}
	if (window.frames[frameName]){
		window.clearInterval(ionasFrameCheckParamCheckRetry);
		ionasFrameCheckSetHref(window.frames[frameName].location, frameUrl);
	} else if (frameName == "") {
		window.clearInterval(ionasFrameCheckParamCheckRetry);
	}
	
}

function ionasFrameCheckSetHref(location, href) {
	var isAllowed = false;
	
	if (href.match(/^\/?[\w\.\-]+(\/|$)/)) {
		isAllowed = true;
	} else if (document.location.href.match(/(^https?:\/\/[\w\.\:\-]+\/)/)) {
		var myHost = RegExp.$1;
		isAllowed = isAllowed || href.substring(0, myHost.length) == myHost;
	}
	
	if (href.match(/^https?:\/\/([\w\.\-]+)(?:\/|$)/)) {
		var newHost = RegExp.$1;

		if (window.ionasFrameCheckTargets) {
			var targets = ionasFrameCheckTargets.split(" ");
			
			for (var i = 0; i < targets.length; i++) {
				if (targets[i].match(/^\*\./)) {
					// Postfix-Match
					if (newHost.length == targets[i].length-2 && newHost == targets[i].substring(2)
					 || newHost.length >= targets[i].length && newHost.substring(newHost.length - targets[i].length + 1) == targets[i].substring(1)) {
					 	isAllowed = true;
					}
				} else {
					// exakter Match
					if (targets[i] == newHost) {
						isAllowed = true;
					}
				}
			}
		}
	}
	
	
	if (isAllowed || confirm("Es wurde versucht, eine externe Webseite:\n\n" + href + "\n\nals Teil der aktuellen Webseite:\n\n" + document.location.href + "\n\neinzubinden. M\xF6chten Sie das zulassen?")) {
		if (location == null) {
			window.open(href);
		} else {
			location.href = href;
		}	
	}
}

