(function($) {

    $.fn.extend({

        box: function(options){


			var defaults = {
				itemCallback: undefined,
				callback: undefined,
				notAvailableUrl: 'images/not_available.png'
			}

			
			options = $.extend(defaults,options);

            var imageBorderWidth = 15;
            var $this = this;

			var $boxTop = $('<span />').addClass('inner_tr').append(
					$('<span />').addClass('inner_tl').append($('<span />').addClass('inner_t'))
				);

			var $boxBottom = $('<span />').addClass('inner_br').append(
					$('<span />').addClass('inner_bl').append($('<span />').addClass('inner_b'))
				);

			var $boxInner = $('<span />').addClass('inner_ml').append(
					$('<span />').addClass('inner_mr')
				);



            _init();

            /***********/
            /* PRIVATE */
            /***********/

            function _init(){

				

				$this.each(function(i,obj){

					var $box = $('<span />').attr('id', 'glow_box_' + i).addClass('glow_box')
						.append($boxTop.clone())
						.append($boxInner.clone())
						.append($boxBottom.clone());

					if($(obj).attr('style')){
						$box.attr('style',$(obj).attr('style'));
					}
					

					$(this).one('load',function(){

						$('.inner_t,.inner_b,.inner_mr',$box).width($(this).width());
						$('.inner_mr',$box).height($(this).height());

						var marginRules = ['margin-left','margin-right','margin-bottom','margin-top'];

						var j = 0;
						for(j; j < marginRules.length;j++){

							if(!$box.css(marginRules[j])){
								$box.css(marginRules[j],'0px');
								continue;
							}

							if($box.css(marginRules[j]) == 'auto'){

								$box.css('display','block');
								$box.css('width',($(this).width() + imageBorderWidth * 2) + 'px');

							}else if(parseInt($box.css(marginRules[j])) > imageBorderWidth){
								$box.css(marginRules[j],parseInt($box.css(marginRules[j])) - imageBorderWidth + 'px');
							}
						}

						$('.inner_mr',$box).append($(this).clone().removeAttr('style'));

						$(this).replaceWith($box);

						
						if ( typeof options.itemCallback == 'function'){
							options.itemCallback($('img',$box).eq(0));
						}


						if(i == ($this.length - 1)){


							if ( typeof options.callback == 'function'){
								
								options.callback($box.eq(0));
							}
						}

					}).each(function(){
						if(this.complete || (jQuery.browser.msie && parseInt(jQuery.browser.version) == 6))
						$(this).trigger("load");
					}).error(function(){
						$(this).attr('src',options.notAvailableUrl).trigger("load");
					});

				});
			}
        }
    });

})(jQuery);
