/*** SPIRITO XD DEFAULT JS ***/

var secs = 120
var module = ''
var sending = false;

var img1 = new Image()
var img2 = new Image()

img1.src = "/__design__/xd/private/img/dropdown.gif"
img2.src = "/__design__/xd/private/img/dropdown-a.gif"


var ua = navigator.userAgent.toLowerCase(); 
_safari = (ua.indexOf('safari') > -1) 

function xdToogleNavi()
{
	var el = $("xd-navi")
	var img = $("xd-navi-button")
	// alert(Element.visible(el))
	if(el)
	{
		if(Element.visible(el))
		{
			new Effect.SlideUp(el, {duration:0.5, queue: {position:'end', scope: 'navi'}})
			// el.style.visibility = 'hidden'
			img.src = "/__design__/xd/private/img/dropdown.gif"
		} else {
			new Effect.SlideDown(el, {duration: 0.5, queue: {position:'end', scope: 'navi'}})
			// el.style.visibility = 'visible'
			img.src = "/__design__/xd/private/img/dropdown-a.gif"
		}
		return false
	}
}

function xdInitNavi()
{
	var el = $("xd-navi")
	if(el)
	{
		var agt = navigator.userAgent.toLowerCase()
		if((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1))
		{
			el.style.top = "0px"
		}
		// document["xd-form-search"]["xd-search"].focus()
		if(module=='home' && (!$("xd-navi").visible())) 
			xdToogleNavi()
	}
}

/*** Frequently get recent user infos ***/

function xdSetPulse()
{
	window.setTimeout("xdPulse()", 1000*secs)
}

function xdOnPulse(req)
{
	var data = req.responseText
	/*
	if(data)
		alert(data)
	*/
	xdSetPulse()
}

function xdPulse()
{
	new Ajax.Request(
		'/xd/private/pulse.html',
		{	method: 'GET',
			asynchronous: true,
			parameters: "_=" + sessionid,
			onComplete: xdOnPulse
		});
	/*
	new Ajax.Updater('online', '/xd/private/pulse.html', {
		asynchronous:true,
		method: 'GET',
		parameters: '_=' + sessionid
		});
	*/
}

/*** Don't leave page if form changed ***/

function cleanHTML(s)
{
	return s.toString().replace(/\<[^\>]+\>/gi,'').replace(/\&[^;]+\;/gi,'').replace(/\s+/gi,'')
}

function xdCheckFormChanges()
{	
	// HTMLarea content changes?
	try 
	{
		for(var e=0; e<_editor_all.length; e++)
		{
			try {	
				// alert(_editor_all[e] + "-" + _editor_all[e].contentChanged)
				if(_editor_all[e].contentChanged)
					return false
			} catch(e) {
				var hold = cleanHTML(_editor_all[e]._textArea.defaultValue)
				var hnew = cleanHTML(_editor_all[e].getHTML())
				// alert(hold + " | " + hnew)
				if(hold != hnew) {
					// alert(0)
					return false;
				}	
			}
			_editor_all[e]._textArea.changeChecked = true
		}		
	}
	catch(e) {;}	
	
	// Other "normal" formular elements changed respective to defaults?
	try 
	{
		var fforms = $('xd-content').getElementsByTagName('form')
		// log(fforms)
		for(var f=0; f<fforms.length; f++)
		{		
			var form = fforms[f]
			for(var e=0; e<form.elements.length; e++)
			{
				var el = form.elements[e]
				
				// Already tested as part of HTMLarea 
				if(el.changeChecked) continue;

				if($(el).match("INPUT[type=text]") || el.match("TEXTAREA")){
                    if(el.value!=el.defaultValue) {					
                        return false;
                    }
				} else if((typeof el.defaultChecked) != "undefined" && (el.checked!=el.defaultChecked)) {
					return false;
				} 
                /*
				else if(el.options) {
					for(var i=0; i<el.options.length; i++) {
						if(el.options[i].selected != el.options[i].defaultSelected) {
							return false;
						}
					}
				}
                */
			}
		}
	}
	catch(e) {;}	
	return true
}

/*** Activate first input field ***/

function xdFocusFirst()
{
	var elm = document.getElementsByTagName("input")
	for(var i=0; i<elm.length; i++)
	{
		if(elm[i].getAttribute("type")=="text" && elm[i].id!="search")
		{
			elm[i].focus()
			break;
		}
	}
}

/*** Higlight of table rows on mouse over ***/

function xdRowOver(el)
{
	el.onmouseover = function(ev)
	{
		Element.addClassName(this, "spirito-tab-row-over")
	}
	el.onmouseout = function(ev)
	{
		Element.removeClassName(this, "spirito-tab-row-over")
	}
}

function getWindowHeight()
{
	if (typeof(window.innerHeight) == 'number')
		return window.innerHeight;
	else if (document.documentElement && document.documentElement.clientHeight)
		return document.documentElement.clientHeight;
	else if (document.body && document.body.clientHeight)
		return document.body.clientHeight;
	return 0;
}

function getWindowWidth()
{
	if (typeof(window.innerWidth) == 'number')
		return window.innerWidth;
	else if (document.documentElement && document.documentElement.clientWidth)
		return document.documentElement.clientWidth;
	else if (document.body && document.body.clientWidth)
		return document.body.clientWidth;
	return 0;
}

xdDialog = Class.create();
xdDialog.prototype = {

	initialize: function() {
		document.body.style["cursor"] = "wait";
		this.element = document.createElement("DIV");
		this.dialog = $('dialog')
		document.body.appendChild(this.element);
		var x = this.element.style;
		var y = this.dialog.style;
		x.position = "absolute";
		x.top = "0px";
		x.left = "0px";
		x.width = getWindowWidth() + "px";
		x.height = getWindowHeight() + "px";
		x.zIndex = "10000";
		y.zIndex = "10001";
		//x.background = "#DDD7D3";
		x.background = "#000";
		x.display = "none";
		this.onResize()
		try {
			new Effect.Appear(
				this.element,
				{duration:0.15, to:0.5}
				)
			new Effect.Appear(
				'dialog',
				{duration:0.15, to: 1.0}
				)
		} catch(e) {
			// log("Effect error %s", e)
			// $(this.element).show()
			$('dialog').show()
		}		
		Event.observe(window, 'resize', this.onResize.bindAsEventListener(this));
		if(!window.innerHeight) {
			Event.observe(window, 'scroll', this.onResize.bindAsEventListener(this));
		}
	},

	onResize: function() {
		var dim = Element.getDimensions(this.dialog)
		var x = this.element.style;
		var y = this.dialog.style
		var dx =  window.pageXOffset
			|| document.documentElement.scrollLeft
			|| document.body.scrollLeft
			|| 0;
		var dy =  window.pageYOffset
			|| document.documentElement.scrollTop
			|| document.body.scrollTop
			|| 0;
		var vh = window.innerHeight || document.body.clientHeight
		var vw = window.innerWidth || document.body.scrollWidth
		if(window.innerHeight)
		{
			x.position = "fixed"
			y.position = "fixed"
			y.top = ((vh - dim.height) / 2) +  "px"
			y.left = ((vw - dim.width) / 2) +  "px"
		}
		else
		{
			x.top = dy
			x.left = dx
			y.top = (dy + ((vh - dim.height) / 2)) +  "px"
			y.left = (dx + ((vw - dim.width) / 2)) +  "px"
		}
		x.width = getWindowWidth() + "px";
		x.height = getWindowHeight() + "px";
	}

}

function xdCheckForm(el)
{
	el.oldsubmit = el.onsubmit
	// el.onbeforesubmit = function() { alert(1) }
	el.onsubmit = function(event)
	{
		// log("submit")		
		var el = this
		if (!event)
    		event = window.event;

		var okay = true
		var elements = Form.getElements(el)

		for(var i=0; i<elements.length; i++)
		{
			var inp = elements[i]
			var man = inp.getAttribute('mandatory')
			if(man)
			{
				var val = Form.Element.getValue(inp).toString().strip()
				if(val=='') {
					inp.addClassName("spirito-mandatory")
					okay=false
				}
				else
					inp.removeClassName("spirito-mandatory")
			}
		}

		if(!okay)
		{
			alert('Bitte füllen Sie alle Pflichtfelder korrekt aus!')
			Event.stop(event)
			return false
		}

		// log("oldsubmit %s..." % el.oldsubmit)		
		// alert("before oldsubmit")
		
		if(el.oldsubmit && !el.oldsubmit())
			return false

		// alert("after oldsubmit")		
		// log("set sending")
		sending = true;		
	
		if(false) {
			el.action = el.action + "?__progress__=" + sessionid
			//if($('xd-load'))
			//	el.target = "xd-load"
	
			new Ajax.PeriodicalUpdater(
				"progress", 
				"/__design__/xd/private/progress.html", 
				{
					parameters: "progress=" + sessionid,
					frequency: 1.0
				});
		}

		new xdDialog()
		return true
	}
}

/*
function xdDoubleClick(el) {
	el.ondblclick = function() {
		alert(this.getAttribute("dblhref"))
		window.location.replace(this.getAttribute("dblhref"))
		return false
	}
}
*/

Event.observe(window, 'load', function() {
	// alert(123)
	//if(window.parent!=window) {
		/// alert(234)
		/*
		var html = document.body.innerHTML
		window.parent.open()
		window.parent.write(html)
		window.parent.close()
		*/
		// window.parent.document.body.innerHTML = document.body.innerHTML
		// window.parent.document = document
	//}

    // IE Flicker behoben? 
    try {
      document.body.execCommand("BackgroundImageCache", false, true);
    } catch(err) {}

	xdInitNavi()
	$$('tr.spirito-tab-row-0').each(xdRowOver)
	$$('tr.spirito-tab-row-1').each(xdRowOver)
	$$('form').each(xdCheckForm)
	// $$('a[dblhref]').each(xdDoubleClick)
	// xdFocusFirst()
	xdSetPulse()
	
	if(!document.all) {
		$$E(".xdsmalledit").each(function(e) {
		  var e = $(e)
		  e.hide();
		  e.up().onmouseover = function(ev) {
			  e.show()
			  e.style.display = "inline";
		  }
		  e.up().onmouseout = function(ev) {
			  e.hide()
		  }
	   });
	}
	
});

// Im Safari sorgt dieser Teil für einen Komplettabsturz
Event.observe(window, 'beforeunload', function(event) {
	// log("beforeunload")
	if(!sending) {
		// log("sending %s...", sending)
		sending = false;
		if(!xdCheckFormChanges()) {
			// log('wait')
			if(window.event)
				event = window.event			
			var msg = "Es wurden Daten in einem Formular geändert, möchten Sie die Seite trotzdem verlassen?"
			event.returnValue = msg;			
			return msg
			// return false
		}
	}	
});

	
var ActionMenu = Class.create();
ActionMenu.prototype = {

  initialize: function(element, rule, url) {
  	this.menu = $E(element);
	this.url = url;
	
	var menu = this.menu;
	var url = this.url;
	
	this.menu.timer = null;
	this.menu.row = null;
	this.menu.show = function(row) {
		this.hide()
		Element.show(this)
		this.row = row
		this.row.addClassName("selected")
		// new Effect.Appear(this);
	}
	this.menu.hide = function() {
		Element.hide(this)
		if(this.row) this.row.removeClassName("selected")
		// new Effect.Fade(this);
	}
	this.menu.onmouseover = function(event) {
		if(this.timer) {
			window.clearTimeout(this.timer)
			this.timer = null;
		}
	};
	this.menu.onmouseout = function(event) {
		this.timer = window.setTimeout(this.hide.bind(this), 1000)			
	};  

    $$E(rule).each(function(e) {
		e.onclick = function(event) {
			if(!event) event=window.event
			menu.style.top = (Event.pointerY(event) - 10) + "px"
			menu.style.left = (Event.pointerX(event) - 10) + "px"
			// Element.show(menu)
			menu.innerHTML = "&nbsp;"
			var id = this.getAttribute("xd:id")
			if(!id) id = this.parentNode.getAttribute("xd:id")
			menu.show(this)
			new Ajax.Updater(
				menu, 
				url, 
				{	method: 'GET',
					asynchronous: true,
					parameters: "_=" + escape(sessionid) + "&id=" + escape(id)
					// onComplete: menu.show.bind(menu)
				});		
			return false;
		};
	});
   }
}

