	var ver4, target;
	ver4 = (parseInt(navigator.appVersion) >= 4 );
	
	function toggle_state(targetId,_view){
		if ( ver4 ){
			if( target = document.getElementById(targetId) ) {
				if ( _view ) {
					target.style.display = "";
				} else {
					target.style.display = "none";
				}
			}// else alert( 'no id with value "'+targetId+'"');
		}
	}
	function toggle(targetId){
		if ( ver4 ){
			if( target = document.getElementById(targetId) ) {
				if ( target.style.display != "block" ) {
					if ( document.all ){
							target.style.display = "block";
						} else {
							target.style.display = "table-row";
						}
				} else {
					target.style.display = "none";
				}
			} else alert( 'no id with value "'+targetId+'"');
		}
	}
	function popup_site(url) {
		window.open(url,'info','width=750,height=650,scrollbars=yes,resizable=yes');
	}
	function check_boxes( hotel_id ) {
		var valid = false;
		if( hotels[hotel_id] ) {
			var hotel = hotels[hotel_id];
			for( i in hotel.roomtypes ) {
				if( document.getElementById( hotel.roomtypes[i] ).checked ) valid = true;
			}
			for( i in hotel.packages ) {
				if( document.getElementById( hotel.packages[i] ).checked ) valid = true;
			}
			if (valid == false) {
				for( i in hotel.programs ) {
					var tmp = hotel.programs[i].split('|');
					if( document.getElementById( tmp[0] ).checked ) {
							if (tmp[1] == 1) {
								valid = true;
							} else {
								valid = false;
								break;	
							}
					}
				}			
			}
		}
		if( !valid ) {
			var i18n = new cst_i18n;
			alert( i18n.i18n_string_entities_decode( lng_str['book.error.room.choose'] ) );
		}
		return valid;
	}
	function view_rows( rows ) {
		for( row in rows ) {
			toggle_state( rows[row], true );
		}
	}
	
	function toggle_rows( rows ) {
		for( row in rows ) {
			toggle( rows[row] );
		}
	}
	
	var calendar_offset_x = 25;
	var calendar_offset_y = 0;
	
	//gehoert zur request.xsl feldabfrage
	

	function request_check_form() {
		var tmpary = new Array();
		var fields = new Array(
				"request_user_firstname",
				"request_user_lastname",
				"request_user_street",
				"request_user_zip",
				"request_user_city",
				"request_user_country",
				"request_user_email",
				"rd_from1",
				"rd_to1"
			);
		var flength = fields.length;
		
		for (var i = 0; i < flength; i++) {
			var tmp = 'form[' + fields[i] + ']';
			if (document.form[tmp].value == "") {
				document.form[tmp].style.backgroundColor = "#FFFF70";
				tmpary.push(tmp);
			}
			else {
				document.form[tmp].style.backgroundColor = "#FFFFFF";
			} 
		}
		if (tmpary.length !=0) {
			alert('Bitte fuellen Sie alle farbig hinterlegten Felder aus');
			document.form[tmpary[0]].focus();
			return false;
		}
		return true;
	}
	
	var cst_image_zoom_win = false;
	function cst_image_zoom( url ) {
		cst_image_zoom_win = window.open( url+'/600xq', 'cstimage', 'width=620,height=550,location=no,toolbar=no' );
		cst_image_zoom_win.focus( );
		return false;
	}
	
	function cst_ssl_host( ssl_host ) {
		if( location.protocol != 'https:' ) {
			var target = 'https://'
			target += ssl_host;
			target += location.pathname;
			target += location.search;
			target += location.hash;
			location.href = target;
		}
	}
	
	function cst_hotel_stars_string( stars_num ) {
		var stars = [];
		for( var s = 0; s < Math.floor( stars_num / 10 ); s++ )  {
			stars.push( '*' )
		}
		if( stars_num == 45 || stars_num == 35 ) {
			stars.push( 's' )
		}
		return stars.join( '' );
	}
	
	function cst_datepicker_custom_range( input, obj_id, obj_range_start, obj_range_end ) {
		if( obj_range_start != '' ) {
			return {
				minDate: ( input.id == obj_id ? jQuery('#'+obj_range_start).datepicker( 'getDate' ) : null), 
				maxDate: ( input.id == obj_range_start ? jQuery('#'+obj_id).datepicker( 'getDate' ) : null)
			}; 
		} else if( obj_range_end != '' ) {
			var mindate = null;
			var thisdate = jQuery('#'+obj_id).datepicker( 'getDate' );
			if( input.id == obj_id && thisdate > jQuery('#'+obj_range_end).datepicker( 'getDate' ) ) {
				mindate = thisdate;
				jQuery('#'+obj_range_end).datepicker( 'setDate', thisdate );
			}
			return {
				minDate: mindate
			};
		} else {
			return true;
		}
	}
	
	var cst_xd_url,
		cst_xd_iframe_style = {},
		cst_xd_iframe_triggers = [],
		cst_xd_iframe_trigger_timer,
		cst_xd_iframe_autoresize = true;
	
	function cst_xd_url_set( url ) {
		cst_xd_url = url;
	}
	
	function cst_xd_iframe_create( url ) {
		/*
		 * iframe nur erstellen, wenn die cst in einem iframe liegt
		 * */
		try {
			if ( document.all ) {
				top.location.href;
			}
			else if ( typeof top.location.href == 'undefined' ) {
				throw (new Error());
			}
		} 
		catch (e) {
			jQuery('body').append('<iframe id="cst_xd_iframe" src="' + url + '" height="0" width="0" frameborder="0"></iframe>');
		}
	}
	
	function cst_xd_iframe_trigger( call, params ) {
		if ( typeof params == 'undefined' ) {
			params = '{}';
		}
		
		if ( call ) {
			cst_xd_iframe_triggers.push( [ call, params ] );
		}
		
		if ( cst_xd_iframe_trigger_timer == undefined ) {
			cst_xd_iframe_trigger_timer = window.setInterval(function(){
				if ( cst_xd_iframe_autoresize === true && parseInt( cst_xd_iframe_style.height, 10 ) != jQuery('body').children( 'div.cst:first' ).height() ) {
					cst_xd_iframe_resize();
				}
				
				if ( !cst_xd_iframe_triggers.length ) return;
				
				cst_xd_iframe_update( cst_xd_iframe_triggers[0][0], cst_xd_iframe_triggers[0][1] );
				cst_xd_iframe_triggers.shift();
			}, 500 )
		} 
	}
	
	function cst_xd_iframe_update( call, params ) {
		var iframe = document.getElementById("cst_xd_iframe"),
			url = cst_xd_url + '?call=' + call + '&params=' + params;
		
		// damit man beim zurueck gehen nicht immer zwei mal klicken muss,
		// jedes mal das alte iframe loeschen und ein neues erstellen.
		if ( iframe && iframe.tagName ) {
			iframe.parentNode.removeChild( iframe );
		}
		
		cst_xd_iframe_create( url );
	}
	
	function cst_xd_iframe_resize( options ) {
		if ( window.name.indexOf('cst-client-iframe') == -1 ) return;
		if ( !cst_xd_url ) return;
		if ( !options ) options = {};
		if ( !options.style ) options.style = {};
		
		options.style.overflow = 'hidden';
		cst_xd_iframe_style = style = options.style || {};
		
		var body = jQuery('body'),
			style_string = '';

		if ( !style.height ) {
			style.height = body.children( 'div.cst:first' ).height();
		}

		if ( !style.width ) {
			style.width = body.width();
		}
		
		var dimensions = {
			height: parseInt( style.height, 10 ),
			width: parseInt( style.width, 10 )
		};

		for( var key in dimensions ) {
			if ( dimensions[key] ) {
				cst_xd_iframe_style[ key ] = dimensions[key] + 'px';
			}
			else {
				delete cst_xd_iframe_style[ key ];
			}
		}
		
		for ( var key in cst_xd_iframe_style ) {
			style_string += key + ':"' + cst_xd_iframe_style[key] + '",';
		}
		body.attr( 'style', 'width: ' + cst_xd_iframe_style.width + ' !important' );
		cst_xd_iframe_trigger( 'embed_iframe_resize', encodeURI( '{' + style_string.substring( 0, style_string.length - 1 ) + ', identifier: "'+ window.name +'" }' ) );
	}
	
	function cst_xd_scroll_top() {
		cst_xd_iframe_trigger( 'embed_scroll_top', encodeURI( '{ identifier: "'+ window.name +'" }' ) );
	}
	
	if ( window.name.indexOf('cst-client-iframe') != -1 ) {
		/* direkter aufruf von cst_xd_iframe_trigger() schmeisst in manchen ie6 einen error */
		cst_xd_iframe_triggers.push( [ 'embed_scroll_top', encodeURI( '{autoscroll:true}' ) ] );
	}
	
	if( typeof _lib_load_libs == 'undefined' && typeof window._loader == 'undefined' ) {
		var _lib_load_loaded = false;
		var _lib_load_libs = {};
		if( typeof _lib_load_libs_loaded == 'undefined' ) {
			var _lib_load_libs_loaded = {};
		}

		var onload_old = window.onload;
		window.onload = function(){
			window._lib_load_loaded = true;
			if( typeof( onload_old ) == 'function' ) {
				onload_old();
			}
		};
		
		var _file_load = function( file ) {
			if( typeof file == 'undefined' ) { return; }
			var tag = false, file_ext = file.split( '?' )[0].substring( file.lastIndexOf( '.' ) + 1 );

			var head = document.getElementsByTagName( "head" )[0];
			if( file_ext == 'js' ) {
				if ( window._lib_load_loaded ) {
					tag = document.createElement( 'script' );
					tag.type = 'text/javascript';
					tag.src = file;
					tag.charset = 'UTF-8';
				}
				else {
					window.document.write( '<scr'+'ipt type="text/javascript" src="'+file+'" charset="UTF-8"></scr'+'ipt>' );
				}
			} else if ( file_ext == 'css' ) {
				if ( window._lib_load_loaded ) {
					tag = document.createElement( 'link' );
					tag.rel = 'stylesheet';
					tag.href = file;
				}
				else {
					window.document.write( '<link rel="stylesheet" href="'+file+'" type="text/css" />' );
				}
			}
			
			if ( window._lib_load_loaded && tag !== false ) {
				head.appendChild( tag );
			}
		}
		
		var _lib_load = function ( ) {
			for( var i = 0; i < arguments.length; i++ ) {
				var lib_name = arguments[i];
				if( typeof _lib_load_libs_loaded[lib_name] == 'undefined' ) {
					for( file_idx in _lib_load_libs[lib_name] ) {
						var file = _lib_load_libs[lib_name][file_idx];
						if ( typeof file == 'function' ) { continue; }
						if( typeof file == 'string' ) {
							_file_load( file );
						} else {
							if( typeof file.check == 'function' && file.check() ) {
								_file_load( file.path );
							} else if ( typeof file.check == 'undefined' ) {
								_file_load( file.path );
							}
						}
					}
					_lib_load_libs_loaded[lib_name] = true;
				}
			}
		};
		
		var _lib_repository_add = function ( name, files ) {
			if( typeof _lib_load_libs[name] == 'undefined' ) {
				_lib_load_libs[name] = files;
			}
		}
		
	}

	if( typeof window._loader != 'undefined' ) {
		var _lib_repository_add = window._loader.lib_add;
		var _lib_load = window._loader.lib_load;
	}		
	
	_lib_repository_add(
		'jQuery',
		[
			{ path: _base_res+'js/jquery-1.3.2/jquery-1.3.2.min.js', check: function() {
				if( typeof window.jQuery == 'undefined' ) { return true; }
				if( version_compare( "1.3.2", jQuery.fn.jquery ) ) {
					return true;
				}
				return false;
			} }
		]
	);

	_lib_repository_add(
		'jQuery_latest',
		[
			{ path: 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' }
		]
	);	
	
	_lib_repository_add(
		'jQuery-UI',
		[
			_base_res+'js/ui-1.7.2/js/jquery-ui-1.7.2.custom.min.js',
			_base_res+'js/ui-1.7.2/css/smoothness/jquery-ui-1.7.2.custom.css'
		]
	);
	_lib_repository_add(
		'Datepicker',
		[
			_base_res+'js/datepicker-3.3/ui.datepicker.js',
			_base_res+'js/datepicker-3.3/ui.datepicker.css'
		]
	);
	_lib_repository_add(
		'Lytebox',
		[
			_base_res+'js/lytebox-3.22/lytebox.js',
			_base_res+'js/lytebox-3.22/lytebox.css'
		]
	);
	
	_lib_repository_add(
		'Highslide',
		[
			_base_res+'/js/highslide-4.1.12/highslide-full.min.js?version='+_version_cache,
			_base_res+'/js/highslide-4.1.12/settings.js?version='+_version_cache,
			_base_res+'/js/highslide-4.1.12/highslide.css?version='+_version_cache
		]
	);

	_lib_repository_add(
		'cst_general',
		[
			_base_res+'js/cst_i18n.js'
		]
	);
	_lib_repository_add(
		'cst_book',
		[
			_base_res+'js/cst_book.js?version='+_version_cache,
			_base_res+'js/cst_calendar.js?version='+_version_cache
		]
	);
	_lib_repository_add(
		'cst_book_legacy',
		[
			_base_res+'js/cst_book_legacy.js?version='+_version_cache,
		]
	);
	_lib_repository_add(
		'cst_scroller',
		[
			_base_res+'js/cst_scroller.js'
		]
	);
	_lib_repository_add(
		'calendar_old',
		[
			_base_res+'js/calendar.js'
		]
	);
	_lib_repository_add(
		'Mediaplayer',
		[
			_base_res+'js/mediaplayer-4.1/swfobject.js'
		]
	);
	_lib_repository_add(
		'swfobject',
		[
			_base_res+'js/swfobject-2.2/swfobject.js'
		]
	);
	_lib_repository_add(
		'bgiframe',
		[
			_base_res+'js/jquery.bgiframe-2.1.1/jquery.bgiframe.min.js'
		]
	);
	_lib_repository_add(
		'vjg',
		[
			_base_res+'js/vjg/vjg.js',
			_base_res+'js/vjg/vjg.css'
		]
	);
	_lib_repository_add(
		'vil',
		[
			_base_res+'js/vil/vil.js',
			_base_res+'js/vil/vil.css'
		]
	);
	_lib_repository_add(
		'vct',
		[
			_base_res+'js/vct/vct.js'
		]
	);
	_lib_repository_add(
		'vnh',
		[
			_base_res+'js/vnh/vnh.js'
		]
	);
	_lib_repository_add(
		'vac',
		[
			_base_res+'js/vac/vac.js',
			_base_res+'js/vac/vac.css'
		]
	);
	_lib_repository_add(
		'Cookies',
		[
			_base_res+'js/jquery.cookie-1.0/jquery.cookie.js'
		]
	);
	_lib_repository_add(
		'jquery.json',
		[
			_base_res+'js/jquery.labs_json-1.0/labs_json.js'
		]
	);
	_lib_repository_add(
		'ui',
		[
			_base_res+'js/ui-1.0.6/ui.core.js',
			_base_res+'js/ui-1.0.6/css/base/ui.all.css'
		]
	);
	_lib_repository_add(
		'ui-tabs',
		[
			_base_res+'js/ui-1.0.6/ui.tabs.js',
			_base_res+'js/ui-1.0.6/css/cst-tabs.css'
		]
	);
	_lib_repository_add(
			'ui-tabs-html-5',
			[
				_base_res+'js/ui-1.0.6/ui.tabs.js'
			]
	);
	_lib_repository_add(
		'ui-autocomplete',
		[
			_base_res+'js/jquery.autocomplete-1.2.6/jquery.autocomplete.js',
			_base_res+'js/jquery.autocomplete-1.2.6/jquery.autocomplete.css'
		]
	);
	_lib_repository_add(
		'ui-accordion',
		[
			_base_res+'js/ui-1.0.6/ui.accordion.js'
		]
	);
	_lib_repository_add(
		'corner',
		[
			_base_res+'js/curvycorners-2.0.3/curvycorners.js'
		]
	);
	
	_lib_repository_add(
		'roundies',
		[
			'/js/dd_roundies-0.0.2a/DD_roundies_0.0.2a-min.js'
		]
	);
	
	_lib_repository_add(
		'reflection',
		[
			_base_res+'js/reflection-2.0/reflection.js'
		]
	);

	_lib_repository_add(
		'jsoncookie',
		[
			_base_res+'js/jsoncookie-0.9/json2-min.js',
			_base_res+'js/jsoncookie-0.9/jquery.cookie.js',
			_base_res+'js/jsoncookie-0.9/jquery.jsoncookie.js'
		]
	);	

	_lib_repository_add(
		'voucher_calculate',
		[
			_base_res+'js/cst_voucher_calculate.js?version='+_version_cache
		]
	);	

	_lib_repository_add(
		'qtip',
		[
			_base_res+'js/qtip-1.0.0/jquery.qtip-1.0.0-rc3.min.js?version='+_version_cache
		]
	);
	
	_lib_repository_add(
		'cst_validator',
		[
			_base_res+'js/jquery.validation-1.5.2/jquery.validation.js?version='+_version_cache
		]
	);		

	_lib_repository_add(
		'cst_helper',
		[
			_base_res+'js/cst_helper.js?version='+_version_cache
		]
	);			

	_lib_repository_add(
		'cst_textbox_limited',
		[
			_base_res+'js/cst_textbox_limited.js?version='+_version_cache
		]
	);			

	_lib_repository_add(
		'cst_tab_switcher',
		[
			_base_res+'js/cst_tab_switcher-0.1/cst_tab_switcher.js?version='+_version_cache
		]
	);
	
	_lib_repository_add(
		'cst_pension',
		[
			_base_res+'js/cst_pension.js?version='+_version_cache
		]
	);
	
	_lib_repository_add(
		'cst_form_remember',
		[
			_base_res+'js/cst_form_remember.js?version='+_version_cache
		]
	);		

	_lib_repository_add(
		'history',
		[
			_base_res+'js/jquery.address-1.4/jquery.address-1.4.min.js?version='+_version_cache,
			_base_res+'js/jquery.address-1.4/address-legacy.js?version='+_version_cache
		]
	);		

	// platzhalter bei domshake
	_lib_repository_add(
		'general',
		[]
	);	
	
	//version_compare("1.2.3","1.0") returned true
	function version_compare( a, b ) {
		var a_versions = a.split(".");
		var b_versions = b.split(".");
		var max_parts = Math.max(a_versions.length,b_versions.length);
		for( var i = 0;i<max_parts;i++ ) {
		 var a_part = a_versions[i]*1;
		 var b_part = b_versions[i]*1;
		 if( a_part == b_part ) {continue}
		 if( a_part > b_part ) return true;
		    return false;   
		}
	}	
	
	if( typeof Function.prototype.bind != 'function' ) {
		Function.prototype.bind = function() {
			var __method = this, args = Array.prototype.slice.call(arguments,0), object = args.shift();
			return function() {
				return __method.apply(object, args.concat(Array.prototype.slice.call(arguments,0)));
			}
		}
	}
	
	/* IE Bildflackern bei hover vermeiden */
	try {
	 document.execCommand('BackgroundImageCache', false, true);
	} catch(e) {}	

	/* console für ie emulieren falls jmd eins vergisst */
	if(typeof console == 'undefined') {
		console = { log: function() {}, dir: function() {} };
	}
    
	if( typeof jQuery == 'function' ) {
		_$ = jQuery;
	}

	function cst_remember_item_delete() {
		jQuery('input.remember-item-amount').each( function() {
			var $remove_link = jQuery('<a>').attr('href','#').text('x');
			$remove_link.addClass('remember-item-remove-link');
			var $amount_input = jQuery(this);
			$remove_link.click( function() {
				
				if( typeof cst_remember == 'function' ){
					var parent_rel = $(this).parent().attr('id');
					var splited_rel = parent_rel.split('-');
					// vnh item loeschen, ansonsten erscheint es beim relaod wieder
					cst_remember.group_item_delete( splited_rel[1], splited_rel[0] )
				}
				
				// url für ajax request bauen
				var request_item_id = $(this).parent().attr('rel');
				var path = document.location.pathname;
				var ajax_url = path + '?rem_item_clear=' + request_item_id;
				
				// remember item in session löschen
				$.ajax({
					type: "GET",
					url: ajax_url
				 });
				
				$amount_input.val(0);
				jQuery(this).closest('tr').children().children().hide( 500, function() {
					jQuery(this).closest('a.remember-item-remove-link').remove();
					if( jQuery('a.remember-item-remove-link').size() < 1 ){
						jQuery('tr.cst-remember-items-header').hide();
					}
					jQuery(this).closest('td').css('border','none');
				});
				console.log($amount_input);
				return false;
			});
			jQuery(this).parent().append( $remove_link );
		})
	}
	
	function cst_request_required_highlighting( fields, form ){
		jQuery( 'input, select, textarea', form ).each( function( ){
			
			var current_input = jQuery( this );
			var input_name = this.name.match( /(\w+)/g );
			if( input_name != null ){
				var string = input_name[1];
				for( var i = 2; i < input_name.length; i++ ) {
				    string += '[' + input_name[i] + ']';
				};
				
				if( fields[string] ){
					current_input.addClass( 'request-field-required' );
					var focus_func = function(){
						jQuery( this ).removeClass( 'request-field-required' );
					};
					
					if( current_input.attr( 'type' ) == 'checkbox' || current_input.attr( 'type' ) == 'radio' || ( jQuery.browser.msie && current_input.is('select') ) ){
						jQuery( this ).removeClass( 'request-field-required' );
						current_input.wrap( '<div class="request-field-required">' );
						focus_func = function( ){
 							jQuery( this ).parent('div.request-field-required').replaceWith( jQuery( this ) );
 							if( current_input.attr( 'type' ) == 'checkbox' || current_input.attr( 'type' ) == 'radio' ){
 								jQuery( this ).attr('checked', 'checked')
 								if( current_input.attr( 'type' ) == 'radio' ){
 									jQuery( 'input[name="'+ this.name +'"]' ,form ).each(function(){
 										jQuery( this ).parent('div.request-field-required').replaceWith( jQuery( this ) );
 									});
 								}
 							}
						}
					} 
					if( jQuery.browser.msie && current_input.is('select') ){
						current_input.change( focus_func );
					} else {
						current_input.click( focus_func );
					}
				}
			}
		});
	}
	
	/* Request validation */
	function cst_request_field_validation( checks, lng_str , form ){
		var input_rule = {};
		var error_msg_obj = {};
		
		// required fields (*) highligthing
		var $p = jQuery('.form-field-required').closest('td');
		$p.add( $p.next() ).addClass('form-field-required-cell');
		$p.add( $p.next() ).find('input, textarea').addClass('required');
		// dem form die klasse für die input requierd geben 
		jQuery(form).addClass('request-form-valid');
		
		//  default enter event zum tab geändert 
		var forms_handle_focus = function() {
		    var classname = 'cst-request-item-selected';
		    var $elements = jQuery('input:visible[type!="submit"][type!="hidden"], textarea:visible, select:visible', form );
		    $elements.unbind('keypress.eleswitch');

		    $elements.sort( function( a, b){
		    	if(!a.tabIndex || !b.tabIndex){return 0;}
		    	return a.tabIndex - b.tabIndex;
		    });
		    
		    function switch_focused_element() {
		        $elements.removeClass(classname);
		        var ele_pos = 0;
		        $elements.each( function(i,ele) {
		            if( ele == document.activeElement ) {
		                ele_pos = i;
		                return false;
		            }
		        })
		        $elements.eq(ele_pos).trigger( 'focusout' );
		        $elements.eq(ele_pos+1).focus();
		    }
		    
		    $elements.bind('keypress.eleswitch', function(event) {
		    	// tab and enter!
		    	if ( ( event.keyCode == '13' || event.keyCode == '9' ) && event.currentTarget.nodeName != 'TEXTAREA' ) {
					switch_focused_element();
					event.preventDefault();
				}
		    });    
		    
		    $elements.bind('focus', function() {
			    jQuery(this).addClass(classname);
			});  
		    
		    $elements.bind('blur', function() {
		        jQuery(this).removeClass(classname);
		    });   
		    
		}
		forms_handle_focus();
		
		var formInputs = [];
		for( var key in checks ){
			var rule_obj = {
				required: true
			};
			
			if( key == 'request_user_email' ){
				rule_obj.email = checks[key].validation;
				rule_obj.required = false;
			} else {
				rule_obj.validation = checks[key].validation;
			}
			
			// für data/messages felder 
			var nameArrays = key.match(/\[.+\]/);
			
			if( nameArrays != null ){
				var splitedKey = key.split( nameArrays[0] )
				input_rule['form[' +splitedKey[0] +']'+ nameArrays[0]] = rule_obj;
			} else {
				input_rule['form['+key+']'] = rule_obj;
			}
			error_msg_obj['form['+key+']'] = checks[key]['error_msg'];
		}
		
		jQuery.validator.addMethod('email', function( v, e, p ){
			var current_field = jQuery(e);
			var validator = this;
			
			e.value = v = v.replace(' ', '')
			if( e.value.match( new RegExp( p ) ) == null ){
				text = lng_str.default_error;
				cst_request_qtip( e , text);
				return false;
			} 
			
			jQuery.ajax({
				url: 'mail-validate.php?email=' + jQuery(e).val(),
		        type: 'GET',
		        dataType: 'json',
				success: function( data ){
					var state, text;
					var json_data = data;
					var error_type = json_data.error.type_str;
					
					if( json_data.suggestions.address && json_data.suggestions.address.www ){
						text = '<span> ' + lng_str.user_error_www + ' <span class="hint-error">www.</span></span>';
						cst_request_qtip( e , text);
						state = false;
					} else {
						if ( error_type == 'ERROR_TYPE_NOERROR' ) {
							if( jQuery(e).data("qtip") ) jQuery(e).qtip("destroy");
							state = true;
						} else {
							switch( error_type ){
								case 'ERROR_TYPE_USER_NONEXISTANT':
									text = '<span>' + lng_str.user_error + ' <span class="hint-error">' + json_data.mail.user + '</span>@' + json_data.mail.domain + '</span>';
								break;
								case 'ERROR_TYPE_DOMAIN_NONEXISTANT':
									if( json_data.suggestions.domain != '' ){
										var nearest_domains = $.grep(json_data.suggestions.domain, function( d ){
											return d.lev == 1;
										});
										var domains_used = json_data.suggestions.domain;
										if( nearest_domains.length ){
											domains_used = nearest_domains;
										}
										var suggestions_domains = $.map(domains_used, function( d ){
											return d.domain;
										}).join('<span class="hint-error-compine"> '+ lng_str.or +' </span>');
										text = '<span> ' + lng_str.user_mean + ' <span class="hint-error">' + suggestions_domains + '?</span></span>';
									} else {
										text = '<span>' + lng_str.domain_error + ' '+ json_data.mail.user + '@<span class="hint-error">' + json_data.mail.domain + '</span></span>';
									}
									
								break;
								case 'ERROR_TYPE_USER_MAILBOX_FULL':
									text = lng_str.user_error_full;
								break;	
								default:
									text = lng_str.default_error;
								break;
							}
							cst_request_qtip( e , text);
							state = false;
						}
					}
					validator.async_response( v, e, p, state, data );
		        }
			})
			return 'pending';
		});
		
		jQuery.validator.addMethod('validation', function( v, e, p ){
			var current_field = jQuery(e);
			var element_name = e.name;
			
			if ( current_field.attr('name') == 'form[rd_from1]' || current_field.attr('name') == 'form[rd_to1]' ){
				p = '[0-9]+\.[0-9]+\.[0-9]{4}';
			}
			
			if( e.value.match( new RegExp( p , 'i' ) ) == null ){
				if( current_field.attr('type') == 'checkbox' || current_field.attr( 'type' ) == 'radio' || ( jQuery.browser.msie && current_field.is('select') && !current_field.parent().is('div.request-field-required') ) ){
					current_field.parent('div.request-field-success').replaceWith( jQuery( current_field ) );
					current_field.wrap( '<div class="request-field-required">' );
					if( current_field.attr('type') == 'checkbox' || current_field.attr('type') == 'radio' ){
						jQuery( this ).attr( 'checked', 'checked' );
					}
				}
				return false;
			} else {
				if( jQuery.browser.msie && current_field.is('select') && !current_field.parent().is('div.request-field-success') ){
					current_field.parent('div.request-field-required').replaceWith( jQuery( current_field ) );
					current_field.removeClass( 'request-field-success' ).wrap( '<div class="request-field-success">' );
				}
			}
			return true;
		});
		
		 window.cst_request_validator = jQuery( form ).validate({ 
		 	rules: input_rule,
		 	messages: error_msg_obj,
		 	onsubmit:false,
		 	errorClass:'request-field-required-check',
		 	validClass:'request-field-success',
		 	focusInvalid: true,
		 	onkeyup: false,
			errorPlacement: function(error, element) {
			     error.remove();
			},
			unhighlight: function(element, errorClass, validClass) {
				// nur pflichtfelder sollen hightlighted sein
				var namesObj = input_rule;
				for( var name in namesObj ){
					if( element.name == name ) {
						jQuery(element).addClass( validClass ).removeClass( errorClass ).removeClass( 'request-field-required' );
					} 
				}
			},
		 	success: function( label ) {
		 		label.addClass('request-field-success-check');
		 	}
		});
	}
	
	//input hints => auch anderweitig benutzbar
	//docu => http://craigsworks.com/projects/qtip/docs/
	function cst_request_qtip( element, text ){
		if( jQuery(element).data("qtip") ){
			jQuery(element).qtip("destroy");
		}
		jQuery(element).qtip({
			content: text,
			hide: {
				delay: 1500
			},
			show: { 
				ready:true 
			},
			style:{
				tip: 'bottomMiddle',
				border:{
					radius: 5
				}
			},
			position: {
                corner: {
                   tooltip:'bottomMiddle', 
                   target:'topMiddle'
                },
				adjust: { 
					x: 0, 
					y: 0,
					screen: true
				}
             }
	   });
	}

