var g_bDebug = false;
var g_bIE = (document.all && !window.opera)?true:false;
var g_bSafari = /Safari/.test(navigator.userAgent);
//Detect IE old versions
var g_bIE5 = false;
var g_bIE6 = false;
var version=0
if (navigator.appVersion.indexOf("MSIE")!=-1)
{
	temp=navigator.appVersion.split("MSIE")
	version=parseFloat(temp[1])
}
if (version>=5.0 && version<6.0)g_bIE5 = true;
if (version>=6.0 && version<7.0)g_bIE6 = true;
var g_bIElt7 = g_bIE5 || g_bIE6;



function init()
{
	if(typeof init_editor != 'undefined')init_editor();
	// booking page
	if($('issue'))gererElems();
}


// mem leaks?
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
	{
		obj.addEventListener( type, fn, false );
	}
	else if (obj.attachEvent)
	{
		// IE
		obj["e"+type+fn] = fn;
		//window.event.cancelBubble
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
	else
	{
		obj["on"+type] = obj["e"+type+fn];
	}
}
addEvent(window, 'load', init);

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
	{
		obj.removeEventListener( type, fn, false );
	}
	else if (obj.detachEvent)
	{
		try{
			obj.detachEvent( "on"+type, obj[type+fn] );
		}
		catch(err)
		{
			;//noop
		}
		obj[type+fn] = null;
		obj["e"+type+fn] = null;	
	}
	else
	{
		obj["on"+type] = null;
	}
}

// correctly handle PNG transparency in Win IE 5.5 & 6.
// finds all images, but if called with image objects as arguments,
// only these will be corrected (NOT FOR CSS BACKGROUNDS!)
function correctPNG()
{
	var arVersion = navigator.appVersion.split("MSIE")
	var version = parseFloat(arVersion[1]);

	if ((version >= 5.5) && (typeof document.body.filters != 'unknown'))
	{
		var imgObjs = document.images;
		for(var i=0; i<imgObjs.length; i++)
		{
			var img = imgObjs[i]
			var imgName = img.src.toUpperCase(); 
			if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
			{
				var imgID = (img.id) ? "id='" + img.id + "' " : "";
				var imgClass = (img.className) ? "class='" + img.className + "' " : "";
				var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
				var imgStyle = "display:inline-block;" + img.style.cssText;
				if (img.align == "left") imgStyle = "float:left;" + imgStyle;
				if (img.align == "right") imgStyle = "float:right;" + imgStyle;
				if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
				var strNewHTML = "<span " + imgID + imgClass + imgTitle
					+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
					+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
					+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
					img.outerHTML = strNewHTML;
					i = i-1;
			}
		}
	}
}
if(g_bIElt7)window.attachEvent("onload", correctPNG);

function purge(rootObj) {
    var a = rootObj.attributes, i, l, n;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            n = a[i].name;
            if (typeof rootObj[n] === 'function') {
                rootObj[n] = null;
            }
        }
    }
    a = rootObj.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            purge(rootObj.childNodes[i]);
        }
    }
}
if(g_bIE)window.attachEvent("onbeforeunload", function(){purge(document);});

function unFocusLinks()
{
	var linkObjs = document.links;
	for(var i=0; i<linkObjs.length; i++)
	{
		var link = linkObjs[i];
		link.onfocus=function(){this.blur();};
	}
}
addEvent(window, 'load', unFocusLinks);

// First paramter is a nodes id, second the CSS property you want
function getCSSProperty(sNodeIdOrObject, sProperty)
{
	var oNode = sNodeIdOrObject;
	if(typeof(sNodeIdOrObject)!='object')
		oNode = $(sNodeIdOrObject);

	if(!oNode)return null;
	
	var retVal = '';
	if(document.defaultView)
	{
		retVal = document.defaultView.getComputedStyle(oNode, '').getPropertyValue(sProperty);
	}
	else if(oNode.currentStyle)
	{
		sProperty = sProperty.replace(/-\D/gi, function(sMatch)
			{
				return sMatch.charAt(sMatch.length - 1).toUpperCase();
			}
		);
		retVal = oNode.currentStyle[sProperty];
	}


	// ie and safari may return 'auto'
	if(retVal=="auto" || retVal=="" )
	{
		if(g_bIE)
		{
			if(sProperty == 'height')
			{
				retVal = oNode.offsetHeight;
			}
			else if(sProperty == 'width')
			{
				retVal = oNode.offsetWidth;
			}
			else if(sProperty == 'left')
			{
				retVal = oNode.offsetLeft;
			}
			else if(sProperty == 'top')
			{
				retVal = oNode.offsetTop;
			}
		}
		else if(g_bSafari)
		{
			if(sProperty == 'display')
			{
				return 'none';
			}
			else if(sProperty == 'left')
			{
				retVal = oNode.offsetLeft;
			}
			else if(sProperty == 'top')
			{
				retVal = oNode.offsetTop;
			}
			else
			{
				var oldDisplay = oNode.style.display;
				oNode.style.display = 'block';
				retVal = document.defaultView.getComputedStyle(oNode, '').getPropertyValue(sProperty);
				oNode.style.display = oldDisplay;
			}	
		}
	}

	if (/%$/.test(retVal))
	{
		if(oNode.parentNode)
			retVal = parseInt(retVal, 10) * parseInt(getCSSProperty(oNode.parentNode, sProperty), 10) / 100;
	}
	return retVal;
}



function $()
{
	var elems = new Array();
	for(var i = 0; i < arguments.length; i++)
	{
		var element = arguments[i];
		if(typeof element == 'string')
			element = document.getElementById(element);
		if(arguments.length == 1)
			return element;
		elems.push(element);
	}
	return elems;
}





function insertAfter(parent, node, referenceNode)
{
  parent.insertBefore(node, referenceNode.nextSibling);
}

function is_array(obj) { return (obj.constructor && obj.constructor.toString().indexOf("Array") != -1); }

Array.prototype.walk = function(fct)
{
	for(var i=0; i<this.length; i++)
	{
		this[i] = fct(this[i]);
	}
}

Array.prototype.indexOf = function(arg)
{
	for(var i=0; i<this.length; i++)
		if( arg == this[i] )
			return i;
	return false;
}
Array.prototype.min = function()
{
	for(var i=0; i<this.length; i++)
		if( isNaN(this[i]) )
			this.splice(i,1);
	return Math.min.apply({},this)
}

Array.prototype.in_array = function(arg)
{
	try
	{
		if(is_array( arg ) && arg.length)
		{
			// search item is an array, thus recurse
			for(var i=0; i<arg.length; i++)
			{
				for(var j=0; j<this.length; j++)
				if(is_array( this[j]))
				{
					if(this[j].equal(arg))
						return true;
				}
				else
				{
					if( arg == this[j] )
						return true;
				}
				return false;
			}
		}
		else
		{
			for(var j=0; j<this.length; j++)
			{
				if( arg == this[j] )
					return true;
			}
		}
		return false;
	}
	catch(err)
	{
		return false;
	}
}

Array.prototype.equal = function(arg)
{
	if(this.length!=arg.length)return false;
	var i=0;
	for(var i=0; i<this.length; i++)
		if( this[i] != arg[i] )return false;
	return true;
}


var g_errElemID = 'messageContainer';
var g_warnElemID = 'messageContainer';
var g_succElemID = 'messageContainer';
var g_progrElemID = 'messageContainer';
var g_loadingImg = new Image(); g_loadingImg.src = 'techPics/loading.gif';
var g_clearMsgTimer = 0x0;
var g_MsgTimeOut = 4000;
function writeWarning(msg)
{
	var elem = $(g_warnElemID);
	if(elem)
	{
		if(msg!='')
			elem.innerHTML = 
				'<img src="techPics/warning.png" alt="" title="" style="vertical-align: middle; margin-right:3px;"/>'+msg;
		else
			elem.innerHTML = msg;
	}
	if(g_clearMsgTimer)window.clearTimeout(g_clearMsgTimer);
	if(arguments.length==1 || (arguments.length==2 && arguments[1]))
		g_clearMsgTimer = window.setTimeout('clearMessageBoxes()', g_MsgTimeOut);
}
function writeProgress(msg)
{
	var elem = $(g_progrElemID);
	if(elem)elem.innerHTML = 
				'<img src="techPics/loading.gif" alt="" title="" style="vertical-align: middle; margin-right:3px;"/>'+msg;
	if(g_clearMsgTimer)window.clearTimeout(g_clearMsgTimer);
	if(arguments.length==1 || (arguments.length==2 && arguments[1]))
		g_clearMsgTimer = window.setTimeout('clearMessageBoxes()', g_MsgTimeOut);
}
function writeMessage(msg)
{
	var elem = $(g_succElemID);
	if(elem)elem.innerHTML = msg;
	if(g_clearMsgTimer)window.clearTimeout(g_clearMsgTimer);
	if(arguments.length==1 || (arguments.length==2 && arguments[1]))
		g_clearMsgTimer = window.setTimeout('clearMessageBoxes()', g_MsgTimeOut);
}
function writeSuccess(msg)
{
	var elem = $(g_succElemID);
	if(elem)
	{
		if(msg!='')
			elem.innerHTML = 
				'<img src="techPics/tick.png" alt="" title="" style="vertical-align: middle; margin-right:3px;"/>'+msg;
		else
			elem.innerHTML = msg;
	}
	if(g_clearMsgTimer)window.clearTimeout(g_clearMsgTimer);
	if(arguments.length==1 || (arguments.length==2 && arguments[1]))
		g_clearMsgTimer = window.setTimeout('clearMessageBoxes()', g_MsgTimeOut);
}

function clearMessageBoxes()
{
	if(elem = $(g_warnElemID))elem.innerHTML = '';
	if(elem = $(g_succElemID))elem.innerHTML = '';
	if(elem = $(g_errElemID))elem.innerHTML = '';
	if(elem = $(g_progrElemID))elem.innerHTML = '';
}	
window.onerror = g_bDebug?function(e)
{
	writeMessage(e);
	//debugger;
	return true;		
}:window.onerror;


String.prototype.escapeHTML = function()
{
	var div = document.createElement('div');
	var text = document.createTextNode(this);
	div.appendChild(text);
	return div.innerHTML;
}

String.prototype.unescapeHTML = function()
{
	var div = document.createElement('div');
	div.innerHTML = this.stripTags();
	return div.childNodes[0] ? (div.childNodes.length > 1 ?
	  $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) :
	  div.childNodes[0].nodeValue) : '';
}

String.prototype.stripTags = function()
{
	return this.replace(/<\/?[^>]+>/gi, '');
}

String.prototype.explode = function(item)
{
	pos = 0;
	retVal = new Array();
	while(newpos = 1+this.indexOf(item, pos))
	{
		retVal.push(this.substring(pos, newpos-1));
		pos = newpos;
	}
	retVal.push(this.substring(pos, this.length));
	return retVal;
}


String.prototype.trim = function()
{
   return this.replace(/^\s+|\s+$|\r+|\n+$|\r\n+/g,"");
}


function sprintf()
{
	if( arguments.length < 2 )
		return;

	var str = arguments[ 0 ];

	for( var k=1; k<arguments.length; ++k )
	{
		switch( typeof( arguments[ k ] ) )
		{
			case 'string':
			    str = str.replace( /%s/, arguments[ k ] );
			    break;
			case 'number':
				var candidates = new Array(10e+100,10e+100,10e+100);
				// handling of "%.4f"
				var precPat = /%(\d*.\d+)f/;
				var itemsf = precPat.exec(str);
				var exprf, expr0d, exprd;
				if(itemsf != null)
				{
					var pre = Number( itemsf[1].replace( /\..*/, '') );
					var post = Number( itemsf[1].replace( /.*\./, '') );
					var postStr = String( Math.round(Math.pow(10,post) * ( arguments[ k ]-Math.floor(arguments[ k ]) )) );
					var test = String( Math.pow(10,post-1) );
					while(postStr.length<test.length)postStr = '0' + postStr;
					exprf = Math.floor(arguments[ k ]) + '.' + postStr;
					candidates[0] = itemsf.index;
				}

				// handling of "%06d"
				precPat = /%(.)(\d+)d/;
				var items0d = precPat.exec(str);
				if(items0d != null)
				{
					var fill = String(items0d[1]);
					var cnt = Number(items0d[2]);
					expr0d = String( arguments[ k ] );
					while(expr0d.length<cnt)expr0d = fill + expr0d;
					candidates[1] = items0d.index;
				}

				// handling of "%d"
				precPat = /%d/;
				var itemsd = precPat.exec(str);
				if(itemsd != null)
				{
					exprd = Math.round(arguments[ k ]);
					candidates[2] = itemsd.index;
				}

				var tmpMin = candidates.min();
				var firstElem = candidates.indexOf( tmpMin );
				if(firstElem==0)
					str = str.replace( /%\d*.\d+f/, exprf );
				else if(firstElem==1)
					str = str.replace( /%.\d+d/, expr0d );
				else if(firstElem==2)
					str = str.replace( /%d/, exprd );
			    break;
			case 'boolean':
			    str = str.replace( /%b/, arguments[ k ] ? 'true' : 'false' );
			    break;
		}
	}
	return str;
}


/**
 * 	for booking page
 */
function gererElems()
{
	if(typeof this.elems == 'undefined') this.elems = $('arrival','arrivalLabel','arrLink','depart','departLabel','depLink','adults','adultsLabel','childrenLabel','children');
	if(typeof this.displ == 'undefined')
	{
		this.displ = new Array();
		for(var i=0; i<this.elems.length; i++)
			this.displ[this.elems[i].id] = getCSSProperty(this.elems[i], 'display');
	}
	opt = $('issue').options;
	for(var i=0; i<opt.length; i++)
	{
		if(opt[i].selected)
		{
			var val = opt[i].value;
			switch(val)
			{
				case 'karten_prospekte':
				case 'EWT':
				case 'default':
					for(var i=0; i<this.elems.length; i++) this.elems[i].style.display = 'none';
					break;
				default:
					for(var i=0; i<this.elems.length; i++)
						this.elems[i].style.display = this.displ[this.elems[i].id];
			}
			break;
		}
	}
}

function saveHotelPresentation()
{
	writeProgress('Hoteldaten werden gespeichert ...', false);
	
	var ai = new CAJAXInteraction('ajax/saveHotelPresentation.php?hotelID=' + g_hotelID,
		function(res)
		{
			res = eval("(" + res + ")");
			if(res[0])
			{
				writeSuccess(res[1]);
			}
			else
			{
				writeWarning(res[1]);
			}
			return false;
		}
	);

		
	ai.doPost('content='+escape( tinyMCE.getContent() )//encodeURI($('hotelInfo').innerHTML))
		+'&title=Demohotel'
	);
}



//////////////////////////////////////////////////////////////////////////////////////////////////
//										AJAX
//////////////////////////////////////////////////////////////////////////////////////////////////

function CAJAXInteraction(url, callback)
{
	var req = init();            
	var self = this;
	req.onreadystatechange = processRequest;
	
	function init()
	{
		if (window.XMLHttpRequest)
		{
			return new XMLHttpRequest();
		}
		else if (window.ActiveXObject)
		{
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}

	function processRequest()
	{
		try
		{
			if (req.readyState == 4)
			{
				if (req.status == 200)
				{
					if (callback && req.responseText) callback(req.responseText);
				}
			}
		}
		catch(err)
		{
			;//
		}
	}

	this.doGet = function()
	{
		uri = url.indexOf('?')>=0?url:url+'?';
		uri = uri.indexOf('?')==uri.length-1 ? uri:uri+'&';
		req.open("GET", uri+g_session, true);
		req.send(null);
	}

	this.doPost = function(body)
	{
		uri = url.indexOf('?')>=0?url:url+'?';
		uri = uri.indexOf('?')==uri.length-1 ? uri:uri+'&';
		req.open("POST", uri+g_session, true);
		if(!g_bIE)req.overrideMimeType('text/html');      
		req.setRequestHeader("Content-length", body.length);
		req.setRequestHeader("Connection", "close");
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded charset=UTF-8");
		req.send(body);
	}
}





