var OwUtils = function(){
    var langs = {};
    var messageTime = 10000;
    var $messageCont = $('<div class="ow_message_cont"></div>').appendTo(document.body);
    
    this.message = function( message, type, paramTime ){
        var $messageNode = $('<div class="ow_message_node '+type+'" style="display:none;"><a class="close_button" href="javascript://" onclick="$(this).parent().slideUp(200, function(){$(this).remove();})"></a>'+message+'</div>').appendTo($messageCont);
        if( paramTime == undefined ){
            paramTime = messageTime;
        }

        $messageNode.fadeIn(1000,
            function(){
                window.setTimeout(
                    function(){
                        $messageNode.fadeOut(1000,
                            function(){
                                $messageNode.remove();
                            }
                    );
                    }, paramTime
                );
            }
        );
    }

    this.error = function( message ){
    	this.message(message, 'error');
    };

    this.warning = function( message ){
    	this.message(message, 'warning');
    };

    this.info = function( message ){
    	this.message(message, 'info');
    };

    

   this.addScriptFiles = function( urlList, callback ){
        var scripts = $('script');

        //TODO: Sardar require once check
        
/*        var docScripts = [];
        
        for( var i = 0; i < scripts.length; i++  ){
            docScripts[i] = $(scripts[i]).attr('src');
        }*/

        var recursiveInclude = function(urlList, i){
        	
        	if( (i+1) == urlList.length )
        	{
        		$.getScript(urlList[i], callback);
        		return;
        	}

        	$.getScript(urlList[i], function(){recursiveInclude(urlList, ++i);});
        }
        
        recursiveInclude(urlList, 0);
    };

    /*this.addScriptFile = function( url, callback ){
        var scripts = $('script');

        for( var i = 0; i < scripts.length; i++  ){
            if( $(scripts[i]).attr('src') == $.trim(url) ){
                return;
            }
        }

        $.getScript(url, callback);

        //$('head').append( $('<script type="text/javascript" src="'+url.trim()+'"></script>') );
    };*/

    
    this.addScript = function( script ){
        eval(script);
    },

    this.addCssFile = function( url ){
       $('head').append($('<link type="text/css" rel="stylesheet" href="'+$.trim(url)+'" />'));
    },

    this.addCss = function( css ){
        $('head').append($('<style type="text/css">'+css+'</style>'));
    }

    this.getLanguageText = function(prefix, key, assignedVars)
    {
        if ( langs[prefix] === undefined ) {
                return prefix + '+' + key;
        }

        if ( langs[prefix][key] === undefined ) {
                return prefix + '+' + key;
        }

        var langValue = langs[prefix][key];

        if ( assignedVars ) {
                for( varName in assignedVars ) {
                        langValue = langValue.replace('{$'+varName+'}', assignedVars[varName]);
                }
        }

        return langValue;
    };

    this.registerLanguageKey = function(prefix, key, value)
    {
            if ( langs[prefix] === undefined ) {
                    langs[prefix] = {};
            }

            langs[prefix][key] = value;
    };
    
    this.inProgressNode = function(node)
    {
    	$(node).inprogress();
    }
    
    this.activateNode = function(node)
    {
    	$(node).activate();
    };
}



//Enable / Disable node
jQuery.fn.extend({
	inprogress: function() {
		this.each(function()
		{
			var $this = jQuery(this).addClass('ow_inprogress');
			this.disabled = true;
			
			if ( this.tagName != 'INPUT' && this.tagName != 'TEXTAREA' && this.tagName != 'SELECT' ) 
			{
				this.jQuery_disabled_clone = $this.clone().removeAttr('id').removeAttr('onclick').get(0);
				
				$this.hide()
					.bind('unload', function(){
						$this.activate();
					})
					.after(this.jQuery_disabled_clone);
			}
		});
		
		return this;
	},
	
	activate: function() {
		this.each(function()
		{
			var $this = jQuery(this).removeClass('ow_inprogress');
			this.disabled = false;
			
			if ( this.jQuery_disabled_clone )
			{
				jQuery(this.jQuery_disabled_clone).remove();
				this.jQuery_disabled_clone = null;
				
				jQuery(this)
					.unbind('unload', function(){
						$this.activate();
					})
					.show();
			}
		});
		
		return this;
	}
});

$(
	function (){
		window.OW = new OwUtils();
	}
);

function lg(o){
	console.log(o);
}

$( //8aa: resize fullsize images to fit to it's parendt width
	function (){
		if(typeof($) == 'undefined') return;
		
		$('.fullsize-image').hide();
		var node = $('.fullsize-image')[0];

		while( node = $(node).parent()[0]){
			
			if( node.tagName != 'DIV'){
				continue;
			}

			if($('.fullsize-image').width() > parseInt($(node).innerWidth()))
				$('.fullsize-image').width( (parseInt($(node).innerWidth()) - 10) + 'px' );

			$('.fullsize-image').show();
			break;
		}
		
	}
);
