(function($) {
    
	$.ImmoClass = function ()
	{	
		this.construct();
	};
	
	$.fn.immo = function ()
	{	
		$.Immo = $.Immo || new $.ImmoClass();
	};
	
	$.extend($.ImmoClass.prototype,
	{
		construct: function () {
		}
	});
	
	
    /**
     * Wird die Inputbox fokussiert, wird der vorgegebene Inhalt geleert,
     * wenn vorher keine Änderung am Inhalt vorgenommen wurde.
     * 
     * @author alexander
     */
    $.fn.advancedInput = function(options) {
        
        var defaults = {
            modifiedClass:   'jq_input_modified',
            unmodifiedClass: 'jq_input_unmodified',
            defaultOnEmpty:  true
        };
        
        var options = $.extend(defaults, options);

        var values = [];
        
        return this.each(function() {
            var obj = $(this);

            obj.focus(function() {
                if (!$(this).hasClass(defaults.modifiedClass)) {
                    values[this.id] = $(this).val();
                    $(this).val('');
                };
            });
            
            obj.keydown(function(event) {
                if (!event) {
                    event = window.event;
                }
                if (event.which) {
                    keycode = event.which;
                } else if (event.keyCode) {
                    keycode = event.keyCode;
                }
                if (keycode != 9) { // tabulator
                    $(this).addClass(defaults.modifiedClass);
                    $(this).removeClass(defaults.unmodifiedClass);
                }
            });

            obj.blur(function() {
                if (!$(this).hasClass(defaults.modifiedClass) || (defaults.defaultOnEmpty && ($(this).val()==''))) {
                    $(this).removeClass(defaults.modifiedClass);
                    $(this).addClass(defaults.unmodifiedClass);
                    $(this).val(values[this.id]);
                };
            });
        });
    };
    
    $.fn.hintbox = function (options) {
        return this.each(function() {
            var obj = $(this);

            if ( obj.val() == '')
            {
            	obj.val(obj.attr('title'));
            	// obj.addClass('isHint');			// Steuerung der Darstellung möglich
            }
            
            obj.focus(function() {
                if (obj.val() == obj.attr('title')) 
            	{
                    obj.val('');
                	// obj.removeClass('isHint');
                };
            });
            
            obj.blur(function() {
                if (obj.val() == '')
            	{
                	obj.val(obj.attr('title'));
                	// obj.addClass('isHint');
                };
            });
        });
    };
    
    $.fn.clearInput = function (settings) {
        return this.each(function() {
            var obj = $(this);
            
            var config = {'val': 'hint'};
            
            if (settings) $.extend(config, settings);
            	
            
            if ( obj.val() == '')
            {
            	obj.val(settings.val);
            }
            
            
            obj.bind("focus", function() {
                if (obj.val() == settings.val) 
            	{
                    obj.val('');
                }
                
            });
            
            obj.bind("blur", function() {
                if (obj.val() == '')
            	{
                	obj.val(settings.val);
                }
                
            });
        });
    };
    
    $.fn.maxValue = function (settings) {
        return this.each(function() {
            var config = {
            		'maxValue': 0,
            		'errorElement': 'errorId',
            		'blockElement': 'IDtoBlock'
            };
            
            if (settings) $.extend(config, settings);

            maxValue = settings.maxValue;
            currentValue = $(this).val();
            
            rawMaxLength = (maxValue.replace(/\./, "")).length;
        	rawCurrentlength = (currentValue.replace(/\./, "")).length;
        	
        	dotCurrentPosition = currentValue.indexOf(".");
        	currentlengthBeforeComma = currentValue.substring(0, dotCurrentPosition);
        	currentlengthAfterComma = currentValue.substring(dotCurrentPosition);
        	
        	dotMaxPosition = currentValue.indexOf(".");
        	maxlengthBeforeComma = currentValue.substring(0, dotMaxPosition);
        	maxlengthAfterComma = currentValue.substring(dotMaxPosition);

        	//$('body').prepend(settings.blockElement);

            if(parseFloat(currentValue) > parseFloat(maxValue) || rawCurrentlength > rawMaxLength || (currentlengthBeforeComma > maxlengthBeforeComma && currentlengthBeforeComma != -1 && maxlengthBeforeComma != -1) || (currentlengthAfterComma > maxlengthAfterComma && currentlengthAfterComma != -1 && maxlengthAfterComma != -1)){
        		
        		$('#'+settings.errorElement).removeClass('invisible');
        		$('#'+settings.blockElement).attr('maxlength', rawMaxLength);
        		if(currentlengthBeforeComma > maxlengthBeforeComma && currentlengthBeforeComma != -1 && maxlengthBeforeComma != -1){
        			$('#'+settings.blockElement).attr('maxlength', maxlengthBeforeComma);
        		}
        	}else{
        		$('#'+settings.errorElement).addClass('invisible');
        		$('#'+settings.blockElement).removeAttr('maxlength');
        	}
        
        });
    };
    
    $.fn.regExValidate = function (options) {
    	var defaults = {
			regExp: /[0-9]+/,
			errorElement: 'errorId',
			replace: /\./
    	};
    	
    	var options = $.extend(defaults, options);
    	
    	var last_valid_values = [];    	
    	
    	return this.each(function() {
    		
    		var obj = $(this);
    		
    		obj.focus(function () {
    			last_valid_values[obj.id] = $(this).val();    			
    		});
    		
    		obj.keyup(function () {
    			
	    		var value = $(this).val().replace(options.replace, '');
	
				var ck_value = options.regExp;
		
				if (!ck_value.test(value)) {
					$('#'+options.errorElement).show();
					$(this).val(last_valid_values[obj.id]);
				} else {
					last_valid_values[obj.id] = $(this).val();
				}
    		});
    		
    		obj.blur(function () {
    			$('#'+options.errorElement).hide();
    		});
    	});
    };

})(jQuery);

function setCookie(cookie_name, cookie_value, cookie_life, cookie_path) {
	var today = new Date()
	var expiry = new Date(today.getTime() + cookie_life * 24 * 60 * 60 * 1000)
	if (cookie_value != null && cookie_value != "") {
		var cookie_string = cookie_name + "=" + escape(cookie_value)
		if (cookie_life) {
			cookie_string += "; expires=" + expiry.toGMTString()
		}
		if (cookie_path) {
			cookie_string += "; path=" + cookie_path
		}
		document.cookie = cookie_string
	}
}