/*
	REDy! Pro AJAX Plugin
	Copyright © 2009 Jurek Raben / Virtual Creations
	All rights reserved.
*/
var browserOpera = (navigator.userAgent.toLowerCase().indexOf("opera") >= 0);
var browserIE = (navigator.appName == "Microsoft Internet Explorer" && !browserOpera);
var browserSafari = (navigator.userAgent.toLowerCase().indexOf("safari") >= 0);
var browserMozilla = (navigator.userAgent.toLowerCase().indexOf("mozilla") >= 0);
var browserFirefox = (browserMozilla && !browserSafari && !browserIE && !browserOpera);
var command;
var ro = new Array(layout_cells.length);
var roTimeouts = new Array(layout_cells.length);
var roTemp = new Object();
roTemp["last"] = new Array(layout_cells.length);
roTemp["now"] = new Array(layout_cells.length);
var loadedState = false;
var loadStates = new Object();
var numFlashPlugins = 0;
var dynStarted = 0;
var lasturl = "";
var urlcall = 0;
var realurl = "";
var actual_layout = start_layout;
var treeContent;
var jsReady = false;
var historyObj = new Object();
var historyTimer;
var lastWindowLocation;
var cookieTimeoutDate = new Date();
var cookieTimeout = cookieTimeoutDate.getTime() + (30 * 24 * 60 * 60 * 1000);
var breakUpExecution = false;
var flashFinishesLoading = true;
var browserTitle = document.title;

function viewpage_now(purl) {
	breakUpExecution = true;
	viewpage(purl);
}

function stopPending() {
	if (historyTimer) clearInterval(historyTimer);

	for (var f = 0; f < layout_cells.length; f++) {
		if (ro[f]) {
			if (ro[f].readyState) ro[f].abort();
			ro[f] = null;
		}
	}
}

function viewpage(purl) {
	stopPending();
	
	// make realurl
	var indexOfRealurl = purl.indexOf("realurl=");
	realurl = null;
	if (indexOfRealurl > 0) {
		var indexOfNextPar = purl.substr(indexOfRealurl + 8).indexOf("&");
		if (indexOfNextPar != -1) realurl = String(purl.substr(indexOfRealurl + 8, indexOfNextPar));
		else realurl = String(purl.substr(indexOfRealurl + 8));
	}


	// ajax
	this.buildAreas = function buildAreas() {
		var loadedStateTemp = true;
		for (var f = 0; f < layout_cells.length; f++) {
			if (!ro[f] || ro[f].readyState != 4) {
				loadedStateTemp = false;
				break;
			}
		}

		if (loadedStateTemp == true) {
			var sameLayout = true;
			for (var f = 0; f < layout_cells.length; f++) {
				var result = ro[f].responseText;
				// insert sid
				if (typeof sid != "undefined") {
					result = result.replace(/%%%SID%%%/gi, "sid=" + sid);
				}
				// eval js
				var searchPattern = /<script type="text\/javascript" id="new_script"[^>]*>([^<]*)<\/script>/gi;
				var searchResult = searchPattern.exec(result);
				if (searchResult) eval(removeSpecialChars(searchResult[1]));
				
				// für redirects etc
				if (breakUpExecution) {
					breakUpExecution = false;
					return;
				}
				
				if (start_layout != actual_layout) {
					sameLayout = false;
					if (realurl != null) location.href = url_path + realurl;
					else location.href = purl;
					break;
				}
				roTemp["now"][f] = result.replace(searchPattern,"");
			}
			if (sameLayout == true) {
				
				var subNum = 0;
				
				for (var f = 0; f < layout_cells.length; f++) {
					
					var isSame = false;
					if (roTemp["last"][f]) {
						isSame = (strCmp(roTemp["now"][f],roTemp["last"][f]));
						
					}
					if (!urlcall) {
						if (!isSame) {
							getTag("response_content" + layout_cells[f]).innerHTML = roTemp["now"][f];
							//=ro[f].responseText
							
						}
						//else { //  if (browserIE)
						var searchContent = roTemp["now"][f];
						while (searchContent.indexOf("\"flashmod\"") != -1) {
							var searchContent = String(searchContent.substr(searchContent.indexOf("\"flashmod\"") + 8));
							subNum++;
						}
						//}
					}
					roTemp["last"][f] = roTemp["now"][f];
				}
							
				if (getTag("response_crumb") && treeContent) {
					getTag("response_crumb").innerHTML = treeContent;
				}
				
				if (flashComm) {
					var flashCommUrl = url_path+'modules/includes/flash_comm.swf?idcat='+idcat+'&idart='+idart+'&url_path='+url_path+'&sid='+sid;
					var flashCommW = 10;
					var flashCommH = 10;
					if (window.location.search.get('doDebug')) {
						flashCommUrl += "&debug=1";
						flashCommW = 150;
						flashCommH = 300;
					}
					var flashCommContent = '<object id="flash_comm" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+flashCommW+'" height="'+flashCommH+'"><param name="allowScriptAccess" value="sameDomain" /><param name="menu" value="false" /><param name="movie" value="'+flashCommUrl+'&isIE=1" /><param name="quality" value="low" /><param name="wmode" value="opaque" /><param name="salign" value="lt" /><embed src="'+flashCommUrl+'" quality="low" menu="false" width="'+flashCommW+'" height="'+flashCommH+'" wmode="opaque" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" salign="lt" /></object>';
					getTag("response_flashcomm").innerHTML = flashCommContent;	
				}

				urlcall = 0;
				
				numFlashPlugins = countFlashPlugins() - subNum;
				if (!flashFinishesLoading) {
					if (numFlashPlugins <= 0) hideLoading();
					else checkFlashLoadStates();
				}

				document.title = browserTitle;
				if (typeof loadFinishedFunction == "function") {
					loadFinishedFunction();
				}

			}
		}
	}
	showLoading();

	// ajax reload
	for (var f = 0; f < layout_cells.length; f++) {
		ro[f] = getXMLRequest(ro[f]);
		if (!ro[f]) {
			location.href = purl;
			break;
		}
		var ajaxUrl = purl + "&plain_field=" + layout_cells[f];
		if (window.location.search.get('doDebug')) {
			ajaxUrl += "&doDebug=1";
		}
		
		ro[f].open('GET', ajaxUrl, true);
		ro[f].onreadystatechange = buildAreas;
		ro[f].send(null);
	}
	
	// add to history
	if (historyEnabled && realurl != null) {
		historyObj[realurl] = purl;
		if (browserIE) {
			var iFrame = getTag('historyIframe').contentWindow.document;
			if (!iFrame.body || (iFrame.body.innerText != realurl)) {
				iFrame.open();
				iFrame.write('<html><body>'+realurl+'</body></html>');
				iFrame.close();
			}
		}
		window.location.hash = realurl;
		window.location.replace(window.location.href.split("#")[0] + "#" + urlEncode(realurl));
		historyTimer = setInterval('historyChange();', 1000);
	}
}

function historyChange() {
	var historyPageName = historyGetPageName();
	if (realurl != historyPageName) {
		clearInterval(historyTimer);
		if (!historyPageName) viewpage(url_path + "view.php?idart=" + idart + "&idcat=" + idcat);
		else viewpage(historyObj[historyPageName]);
	}
}

function historyGetPageName() {
	var n = null;
	if (browserIE) {
		var iFrame = getTag('historyIframe').contentWindow.document;
		if (iFrame.body) n = iFrame.body.innerText;
	}
	else {
    	n = window.location.href.split("#")[1];
    	if (typeof(n) == 'undefined') n = '';
	}
    return n;
}

function getXMLRequest(ro) {
	if (typeof(XMLHttpRequest) != 'undefined') ro = new XMLHttpRequest();
	else {
		try { ro = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch(e) {
			try { ro = new ActiveXObject("Microsoft.XMLHTTP"); }
			catch(e) { ro = false; }
		}
	}
	return ro;
}

function strCmp(string1,string2) {
	var strLen1 = String(string1).length;
	var strLen2 = String(string2).length;
	if (strLen1 != strLen2) {
		return false;
	}
	
	var compareLen = 40000;
	if (strLen1 < compareLen) compareLen = strLen1;
	if (strLen2 < strLen1) compareLen = strLen2;
	if (string1.substr(0,compareLen) != string2.substr(0,compareLen)) {
		return false;
	}
	else return true;
}

function countFlashPlugins() {
	var found = document.getElementsByName("flashmod").length;
	return found;
}

function setFlashSize(fieldid,hsize) {
	flashSetState(fieldid);
	getTag(fieldid + "ie").name = "checkedflash";
	if (browserIE) {
		fieldid += 'ie';
	}
	getTag(fieldid).style.height = hsize;
	if (hsize) getTag(fieldid).height = hsize;
}

function getTag(fieldid) {
	if (document.getElementById && !browserIE) return document.getElementById(fieldid);
	else if (document.all) return document.all[fieldid];
	else if (document.layers) return document.layers[fieldid];
	return false;
}

function setCookie(name, val) {
	document.cookie = name + "=" + val + "; expires=" + cookieTimeoutDate.toGMTString() + "; path=" + url_path;
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function trackEvent(action,filename) {
	if (typeof trackEventFunction == "function") {
		trackEventFunction(action,filename);
	}
}

function trackDownload(filename) {
	document.title = browserTitle;
	if (typeof trackDownloadFunction == "function") {
		trackDownloadFunction(filename);
	}
	setTimeout('self.location="'+filename+'";',1500);
}

function trackExternalUrl(url) {
	if (typeof trackExternalUrlFunction == "function") {
		trackExternalUrlFunction(url);
	}
}

function trackExternalShopUrl(url) {
	if (typeof trackExternalShopUrlFunction == "function") {
		trackExternalShopUrlFunction(url);
	}
}

function unloadIEFix() {
	stopPending();
	for (var f = 0; f < layout_cells.length; f++) {
		getTag("response_content" + layout_cells[f]).innerHTML = "";
	}
}

function docLoaded() {
	cookieTimeoutDate.setTime(cookieTimeout);

	urlcall = !dynamicStart;
	jsReady = true;
	
	window.onunload = unloadIEFix;

	if (flashComm && browserFirefox) {
		getTag('response_flashcomm').style.position = "fixed";
	}

	// history add
	var historyPageName = window.location.href.split("#")[1];
	if (!(historyEnabled && typeof(historyPageName) != 'undefined')) {
		//numFlashPlugins = countFlashPlugins();
		//if (!numFlashPlugins) hideLoading();
		var viewUrl = url_path + "view.php?idart=" + idart + "&idcat=" + idcat;
		
		// add start parameters
		if (typeof(addStartParams) != 'undefined') {
			for (var c in addStartParams) {
				eval('if (typeof('+addStartParams[c]+') != "undefined") viewUrl += "&'+addStartParams[c]+'="+'+addStartParams[c]+';');
			}
		}
		
		viewpage(viewUrl);
		
		if (typeof docLoadedFunction == "function") {
			docLoadedFunction();
		}
	}
}

function checkRedirectHistory() {
	var historyPageName = window.location.href.split("#")[1];
	if (historyEnabled && typeof(historyPageName) != 'undefined') {
		location.href = url_path + historyPageName;
	}
}

function flashLoadingFinished() {
	if (flashFinishesLoading) {
		hideLoading();
	}
}

function docUnloaded() {
	showLoading();
}

function sendToJavaScript(value) {
	eval(value);
}

function sendToActionScript(value) {
}

function isReady() {
	return jsReady;
}

function showLoading() {
	loadedState = false;
	if (typeof showLoadingFunction == "function") {
		showLoadingFunction();
	}
	else {
		getTag("loading").style.display = "inline";
	}
}

function hideLoading() {
	if (typeof hideLoadingFunction == "function") {
		hideLoadingFunction();
	}
	else {
		getTag("loading").style.display = "none";
	}
	loadedState = true;
}

function flashInitState(fieldid,val) {
	loadStates[fieldid] = val;
}
function flashSetState(fieldid) {
	loadStates[fieldid] = 1;
	checkFlashLoadStates();
}

function checkFlashLoadStates() {
	if (numFlashPlugins) {
		var tempNumFlashPlugins = numFlashPlugins;
		for (var lstatus in loadStates) {
			//alert(lstatus);
			if (loadStates[lstatus] == 1) {
				tempNumFlashPlugins--;
			}
		}
			//alert(tempNumFlashPlugins);
		if (tempNumFlashPlugins <= 0) {
			numFlashPlugins = tempNumFlashPlugins;
			hideLoading();
		}				

	}
	
}

function removeSpecialChars(theString) {
	theString = theString.replace(/&amp;/gi, '&');
	theString = theString.replace(/&quot;/gi, '"');
	theString = theString.replace(/&lt;/gi, '<');
	theString = theString.replace(/&gt;/gi, '>');
	return theString;
}

function urlEncode(theString) {
	theString = theString.replace(/ /gi, '_');
	theString = theString.replace(/&/gi, '&amp;');
	theString = theString.replace(/"/gi, '&quot;');
	theString = theString.replace(/</gi, '&lt;');
	theString = theString.replace(/>/gi, '&gt;');
	theString = theString.replace(/#/gi, '$');
	return theString;
}

function clearTag(tName) {
	getTag(tName).innerHTML = "";
}

function parseForm(idForm,onSubmitter) {
	var urlString = "";
	var fUpload = false;
	for (var i = 0; i < idForm.length; ++i) {
		if (i) urlString += "&";
		urlString += idForm.elements[i].name + "=";
		urlString += idForm.elements[i].value;
		if (idForm.elements[i].type == "file") fUpload = true;
	}
	if (idForm.action) urlString = idForm.action + "?" + urlString;
	if (fUpload) {
		if (onSubmitter.length) eval("" + onSubmitter + ";");
		return true;
	}
	else {
		viewpage(urlString);
		return false;
	}
}

function versionIE(){
	return (navigator.appName=='Microsoft Internet Explorer') ? parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]) : -1;
}

String.prototype.get = function(p){
 	return (match = this.match(new RegExp("[?|&]?" + p + "=([^&]*)"))) ? match[1] : false;
}

checkRedirectHistory();

