
var MCTools = {
	imageRegex : /(.*images\/icons\/\d\d_\w+_)\d(\.gif)$/
};

MCTools.setImageIcon = function(element, icon) {
	var src = element.src;
	var e = MCTools.imageRegex.exec(src);
	if (e) {
		element.src = e[1]+icon+e[2];
	}
};

MCTools.deselectIcon = function() {
	MCTools.setImageIcon(this,'2');
};

MCTools.selectIcon = function() {
	MCTools.setImageIcon(this,'3');
};

MCTools.focusIcon = function() {
	MCTools.setImageIcon(this,'4');
};

MCTools.initializeIcons = function() {
	var l = jQuery('img.imageicon, input.imageicon[type=image][src]');
	l.hover(MCTools.selectIcon, MCTools.deselectIcon);
	l.mousedown(MCTools.focusIcon);
	l.select(MCTools.focusIcon);
	l.blur(MCTools.deselectIcon);
	l.click(MCTools.focusIcon);
	l.each(function() {
		var d = jQuery(this).attr('disabled');
		if (d == true)
			MCTools.setImageIcon(this, '1');
	});
};

MCTools.initializeWaitlogo = function(owner) {
	if ((typeof owner) != 'object') {
		// erst mal preload des waitlogos
		jQuery('<img>').attr('src','/static/waitlogo.gif');
		owner = document;
	}
	try {
		if (owner == document) {
			jQuery(window).unload(showWaitLogo);
			try {
				if (forms_onsubmitHandlers) {
					// sofern vorhanden in die cocoon forms integrieren
					forms_onsubmitHandlers.push({ forms_onsubmit : showWaitLogo });
				}
			} catch (e) {}
		}
		jQuery('form[waitlogo!="false"]', owner).submit(showWaitLogo);
		var list = jQuery('a[href][waitlogo!="false"][href!=#][href!=][target!=_blank]:not(.button_help):not([href^=javascript:]):not([href^=mailto:])', owner);
		list.click(showWaitLogo);
	} catch (e) {}
};

MCTools.initializeDatePicker = function() {
	if (!jQuery.datepicker)
		return;
	
	jQuery.datepicker.setDefaults( {
			changeMonth: true,
			changeYear: true,
			yearRange: '1910:2016',
			showButtonPanel: false
	} );
	
	var locale = "de";
	if (currentUserLocale) {
		locale = String(currentUserLocale).substring(0,2);
		if(locale == "en") locale = "";
	}
	if (!jQuery.datepicker.regional[locale]) locale="";
	jQuery.datepicker.setDefaults(jQuery.datepicker.regional[locale]);

	/*
	 * Umstellung Datepicker
	 * Nun werden auch minDate und maxDate unterstützt. 
	 * Dies funktioniert über die Widget-Attribute minDate und maxDate.
	 * Diese können in der Formdefinition gesetzt werden oder im Flowscript über widget.setAttribute("minDate","SOMEDATE");
	 * 
	 * @since 6.1
	 * @author dparnitzke
	 */
	jQuery('input.calendar[type=text]:not([disabled])').each(function(){
		var ele = jQuery(this);
		
		var params = {};
		params.showButtonPanel = true;
		params.buttonImageOnly = true;
		params.buttonImage = 'images/icons/15_cal_2.gif';
		if (ele.attr('showOn') != null) {
			params.showOn = ele.attr('showOn');
		} else {
			params.showOn = 'button';
		}
		
		var minDate = ele.attr('mindate');
		if (minDate)
			params.minDate = minDate;
		
		var maxDate = ele.attr('maxdate');
		if (maxDate)
			params.maxDate = maxDate;
		
		ele.datepicker(params);
	});
	
};

MCTools.initializeDateTimePicker = function () {
	if (jQuery.fn.datetimepicker) {

		/*
		 * Umstellung DateTimepicker
		 * Nun werden auch minDate und maxDate unterstützt. 
		 * Dies funktioniert über die Widget-Attribute minDate und maxDate.
		 * Diese können in der Formdefinition gesetzt werden oder im Flowscript über widget.setAttribute("minDate","SOMEDATE");
		 * 
		 * @since 6.1
		 * @author dparnitzke
		 */
		jQuery('input.dateTime[type=text]:not([disabled])').each(function(){
			var ele = jQuery(this);
			
			var params = {};
			params.showButtonPanel = true;
			params.buttonImageOnly = true;
			params.buttonImage = 'images/icons/15_cal_2.gif';
			params.showOn = 'button';
			params.timeFormat = 'hh:mm';
			params.changeMonth = true;
			params.changeYear = true;
			params.yearRange = '1910:2016';
			
			var minDate = ele.attr('mindate');
			if (minDate)
				params.minDate = minDate;
			
			var maxDate = ele.attr('maxdate');
			if (maxDate)
				params.maxDate = maxDate;
			
			ele.datetimepicker(params);
		});
	}
};

MCTools.cleanupFloatStyle = function() {
	// bereinigt den float style
	jQuery("div.form>p:last-child").after('<span style="clear:both; display:block;"/>');
};

MCTools.autoResizeElements = function(selector) {
	var l = jQuery(selector);
	l.each(
		function() {
			var i = jQuery(this);
			
			var s = null;
			var q = i.parents();
			for(var j=0; j<q.size();j++) {
				var k = jQuery(q.get(j));
				if ( k.css('display') != 'inline' ) {
					s = k;
					break;
				}
			}
			
			if (s) {
				s = jQuery(s);
				var max = 0;
				var q = s.children();
				var so = s.offset().left;
				for(var j=0; j<q.size();j++) {
					var k = jQuery(q.get(j));
					var left = k.offset().left - jQuery(s).offset().left;
					var p = left + k.outerWidth(true);
					if (p>max) max=p;
				}
				
				var w = Math.floor(i.width() + ( s.innerWidth() - max - parseInt(s.css('padding-left')) - parseInt(s.css('padding-right')) ));
				i.attr('mw' ,w);
			}
		}
	);
	l.each(
		function() {
			var i = jQuery(this);
			var w = Number(i.attr('mw'));
			i.width(w);
		}
	);
};

/**
 * initialisiert den iframe der als content dargestellt wird.
 */
MCTools.initializeContentIFrame = function() {
	var cif = jQuery('#contentiframe');
	if (cif.size()<1) return;
	
	jQuery('#mcmainbodycontent,#ui-datepicker-div').hide();
	cif.css({
		'border'	: 'none',
		'padding'	: '0px',
		'margin'	: '0px'
	})
	.width('100%')
	.attr({
		marginwidth	: '0',
		marginheight: '0',
		hspace		: '0',
		vspace		: '0',
		frameborder	: '0'
	});
	
	
	jQuery('body').append(cif.remove());
	var resizefkt = function() {
		var mbc = jQuery('#contentiframe');
		mbc.height(jQuery(window).height() - mbc.offset().top);
	};
	resizefkt();
	jQuery(window).resize(resizefkt);
};

/**
 * shows a button in title bar to show/hide title bar
 */
MCTools.initializeTitleBarButton = function() {
	if (document.getElementById('titlebarbutton')) return;
	// up/down button
	var e = jQuery('<img id="titlebarbutton" src="/static/images/1uparrow.png" style="border:1px solid gray; background-color:lightgray; padding:0px; -moz-border-radius:5px; -webkit-border-radius:5px;"/>');
	e.css({
		position: 'absolute',
		top : '4px',
		left : '4px',
		zIndex : '40000',
		cursor : 'pointer'
	}).toggle(
		function() {
			var t = jQuery('body>table');
			t.css('position','absolute').css('z-index',1001);
			jQuery(window).resize();
			t.fadeOut('normal', function() {
				e.attr('src','/static/images/1downarrow.png');
			});
		},
		function() {
			var t = jQuery('body>table');
			t.fadeIn('normal', function() {
				t.css('position','static');
				jQuery(window).resize();
				e.attr('src','/static/images/1uparrow.png');
			} );
		}
	);
	jQuery('body').append(e).append(jQuery('#mcmainbodycontent').remove());
};

MCTools.removeDuplicateMCMessages = function() {
	var m = {};
	jQuery('#mcmessages>div.mcmessage').each(function() {
		var div = jQuery(this);
		var text = jQuery.trim(div.text());
		if (m[text]) {
			div.remove();
		} else {
			m[text] = true;
		}
	});
};

/*
 * Funktion modaler Dialog
 * http://www.suzuki-wiki.de/index.php/Marketing_Center/technische_Dokumentation/Utilities/Frontend#modaler_Dialog
 */

MCDialog = {
	_closeCalled : false
};

MCDialog._internalCloseCallback = function() {
	var o = MCDialog._internalGetOptions();
	if (true != o._closeCalled)
		MCDialog._internalClose();
	return true;
};

MCDialog._internalGetOptions = function() {
	var o;
	try {
		try {
			o = window.parent.MCDialogCallback;
		} catch (e) {
			o = null;
		}
		if ((typeof o) != 'object') {
			try {
				o = window.MCDialogCallback;
			} catch (e) {
				o=null;
			}
		}
	} catch (e) {}
	return (typeof o)=='object' ? o:{};
};

MCDialog._internalClose = function(params) {
	var o = MCDialog._internalGetOptions();

	try {
		jQuery.modal.close();
		jQuery.modal.close();
	} catch (e) {alert('1='+e);}
	try {
		window.parent.jQuery.modal.close();
		window.parent.jQuery.modal.close();
	} catch (e) {alert('2='+e);}

	if (o) {
		var c = o.callback;
		if ((typeof c) == 'function') {
			c(params);
		}
	}
};

/**
 * zeigt einen modalen Dialog an
 */
MCDialog.show = function(url, params, callback) {
	if (!((typeof params) == 'object')) {
		params = {};
	}
	var w, h;
	w = params.width;
	h = params.height;

	if ( ((typeof w) != 'number') || ((typeof h)!='number') ) {
		var body = document.documentElement;
		var nw, nh;
		try {
			nw = body.clientWidth;
			nh = body.clientHeight;
		} catch (e) {
			body = jQuery(document);
			nw = body.width();
			nh = body.height();
		}
		
		var f = Math.floor(Math.min( 0.1*nw , 0.1*nh));
		if (((typeof w) != 'number')) w = nw-f;
		if (((typeof h)!='number')) h = nh-f;
	}
	
	var escClose = true == params.escClose;
	var overlayClose = true == params.overlayClose;
	var border = true != params.hideBorder;
	
	var containerCss = {
		width: w+'px',
		height: h+'px'
	};
	if (border) {
		containerCss.border = '4px solid black';
		containerCss.borderStyle = 'outset';
	}
	
	jQuery.modal(
		'<div style="height:100%; width:100%;">' +
		'<iframe allowtransparency="true" src="'+ url +
		'" frameborder="0" width="100%" height="100%"></iframe>' +
		'</div>'
		,
		{
			escClose: escClose, 
			overlayClose: overlayClose,
			closeClass:'simplemodal-close',
			//position: null,
			persist: false,
			overlay:80,
			overlayCss: {
				backgroundColor:"#000"
			},
			containerCss: containerCss,
			dataCss: {
				width: '100%',
				height: '100%'
			},
			onClose: MCDialog._internalCloseCallback
		}
	);
	
	var o = {
		callback : callback
	};
	window.MCDialogCallback = o;
};


/**
 * schliesst den gerade offenen Dialog. Wurde bei openDialog eine callback function angegeben wird params übergeben
 */
MCDialog.close = function(params) {
	var o = MCDialog._internalGetOptions();
	try {
		o._closeCalled = true;
		MCDialog._internalClose(params); 
	} finally {
		o._closeCalled = false;
	}
};

MCTools._internalShowWaitLogo = function() {
	jQuery.fx.off = true;
	
	/*
	 * Optionaler Wartetetext, falls Element vorhanden
	 * @since 6.1
	 * @author dparnitzke
	 */
	var msg = jQuery("#waitLogoMessage").text();
	var html = '';
	if (msg) {
		html += '<div style="text-align:center;color:white;font-weight:bold;padding-bottom:5px;">' + msg + "</div>";
	}
	html += '<img src="/static/waitlogo.gif" style="position:absolute;"></img>';
	
	jQuery.modal(
		html,
		{
			escClose: false,
			overlayClose: false,
			overlay:80,
			overlayCss: {
				backgroundColor:"#000"
			},
			containerCss : {
				width: '128px',
				height: '50px'
				//, backgroundColor: '#FFFFFF'
			},
			dataCss: {
				width: '100%',
				height: '100%'
			}
		}
	);
};

MCTools.showWaitLogo = function() {
	if (!window._waitLogoIsActive) {
		window._waitLogoIsActive = true;
		window._waitLogoTimer = window.setTimeout(MCTools._internalShowWaitLogo, 2000);
	}
};

MCTools.hideWaitLogo = function() {
	if (window._waitLogoIsActive) {
		window.clearTimeout(window._waitLogoTimer);
		try {
			jQuery.modal.close();
			jQuery.modal.close();
		} catch (e) {}
		window._waitLogoIsActive = false;
	}
};

MCTools.cleanupSubMenuStyle = function() {
	jQuery('#mcmainbodycontent>#submenu').append('<div style="clear:both;"></div>');
}

/**
 * Fkt 2075
 * @deprecated use MCTools.showWaitLogo()
 */
function showWaitLogo() {
	MCTools.showWaitLogo();
}

// http://www.suzuki-wiki.de/index.php/Marketing_Center/technische_Dokumentation/Utilities/Frontend#Remotekommandos

MCAjaxTools = {
	ns : 'http://suzuki.de/ajax/request'
};

/**
 * special trim for IE6
 */
MCAjaxTools.trim = function(s) {
	var t = String(s);
	return t.replace(/\s+/g," ");
};

MCAjaxTools.ajaxCloneNode = function(element) {
	if (element.nodeType==1) {
		var n = element.localName;
		if (!n) n = element.baseName;
		if (n) {
			n = jQuery(document.createElement(n));
			
			var attr = {};
			
			var a = element.attributes;
			for(var i=0; i<a.length; i++) {
				var at = a[i];
				var attrName = at.name;
				var attrValue = String(at.nodeValue);
				attr[attrName] = attrValue;
			}
			n.attr(attr);
			var a = element.childNodes;
			for(var i=0; i<a.length; i++) {
				var j = a[i];
				if (j.nodeType==3 || j.nodeType==4) {
					n.append(MCAjaxTools.trim(j.nodeValue));
				} else {
					n.append(MCAjaxTools.ajaxCloneNode(a[i]));
				}
			}
			return n;
		}
	} else 
	if (element.nodeType==3 || element.nodeType==4) {
		return MCAjaxTools.trim(element.nodeValue);
	}
	return element.cloneNode(true);
};

MCAjaxTools.ajaxProcessElement = function() {
	var c = this;
	if (c.namespaceURI!=MCAjaxTools.ns) return;

	var n = c.localName;
	if (!n) n = c.baseName;
	if (!n) return;
	
	if (n == 'append' || n=='before' || n=='prepend' || n=='after' || n=='replace') {
		if (n=='replace') n='replaceWith';
		var id = c.getAttribute('id');
		for(var j=0; j<c.childNodes.length; j++) {
			var r = c.childNodes[j];
			if (r.nodeType == 1) {
				c.removeChild(r);
				jQuery('#'+id)[n](MCAjaxTools.ajaxCloneNode(r));
				break;
			}
		}
	} else
	if (n == 'replace-content') {
		var id = c.getAttribute('id');
		var e = jQuery('#'+id);
		e.empty();
		for(var j=0; j<c.childNodes.length; j++) {
			e.append(MCAjaxTools.ajaxCloneNode(c.childNodes[j]));
		}
	} else
	if (n == 'remove') {
		var id = c.getAttribute('id');
		jQuery('#'+id).remove();
	} else
	if (n == 'script') {
		var text = jQuery(c).text();
		if ((typeof text)=='string')
			eval(text);
	} else
	if (n == 'value') {
		var text = jQuery(c).text();
		if ((typeof text)=='string') {
			var id = c.getAttribute('id');
			jQuery('#'+id).val(text);
		}
	} 
};

MCAjaxTools.ajaxProcessRequest = function() {
	var c = this;
	var n = c.localName;
	if (!n) n = c.baseName;
	if (c.namespaceURI==MCAjaxTools.ns && n=='request') {
		jQuery(c).children().each(MCAjaxTools.ajaxProcessElement);
	}
};

MCAjaxTools.ajaxCallback = function(data) {
	jQuery(data).children().each(MCAjaxTools.ajaxProcessRequest);
};

MCAjaxTools.process = function(url, parameter, callback) {
	jQuery.post(url, parameter,
		function(data) { 
			MCAjaxTools.ajaxCallback(data);
			if ( (typeof callback) == 'function')
				callback(data);
		}, "xml");
};

function pageInit() {
	jQuery( MCTools.cleanupFloatStyle );
	jQuery( MCTools.initializeWaitlogo );
	jQuery( MCTools.initializeIcons );
	jQuery( MCTools.initializeDatePicker );
	jQuery( MCTools.initializeDateTimePicker );
	jQuery( MCTools.initializeContentIFrame );
	jQuery( MCTools.removeDuplicateMCMessages );
	jQuery( MCTools.cleanupSubMenuStyle );
	//jQuery( MCTools.initializeTitleBarButton );
}

/*
 * page initialization
 */
if (jQuery) {
	pageInit();
}

