+function ($) {
	"use strict";

	// MODAL CLASS DEFINITION
	// ======================

	var Modal = function (element, options) {
		var that = this
		this.options = options
		this.$element = $(element)
		this.$backdrop =
		this.isShown = null

		if (this.options.remote) this.$element.load(this.options.remote)

		$(window).resize(function () {
			//setTimeout(that.center(), 1000);
			that.center()
		})

		$(window).on("orientationchange", function () {
			that.center()
		})
	}

	Modal.DEFAULTS = {
		backdrop: true
	  , keyboard: true
	  , show: true
	}

	Modal.prototype.toggle = function (_relatedTarget) {
		return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
	}

	Modal.prototype.show = function (_relatedTarget) {
		var that = this
		var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })

		this.$element.trigger(e)

		if (this.isShown || e.isDefaultPrevented()) return

		this.isShown = true

		this.escape()

		this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))

		this.backdrop(function () {
			var transition = $.support.transition && that.$element.hasClass('fade')

			if (!that.$element.parent().length) {
				that.$element.appendTo(document.body) // don't move modals dom position
			}

			that.$element.show()

			if (transition) {
				that.$element[0].offsetWidth // force reflow
			}

			that.$element
			  .addClass('in')
			  .attr('aria-hidden', false)

			that.enforceFocus()

			var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })

			if ($(".modal .mpyCarousel").length) {
				var carousel = $(".modal .mpyCarousel");
				carousel.trigger("resize");
				if (carousel.attr("data-start") || $(".modalContent .mpyCarousel").attr("data-start")) {
					var start = (carousel.attr("data-start")) ? carousel.attr("data-start") : $(".modalContent .mpyCarousel").attr("data-start");
					carousel.trigger("slideTo", [carousel.find('div[data-slide-number="' + start + '"]'), {
						duration: 0
					}]);
				}
			}

			that.center()


			transition ?
			  that.$element.find('.modal-dialog') // wait for modal to slide in
				.one($.support.transition.end, function () {
					that.$element.focus().trigger(e)
				})
				.emulateTransitionEnd(300) :
			  that.$element.focus().trigger(e)

			if ($("body").hasClass("Explorer8") || $("body").hasClass("Explorer9")) {
				setTimeout(function () {
					var carousel = $(".modal .mpyCarousel");
					carousel.trigger("updateSizes");
					that.center()
					if (carousel.attr("data-start") || $(".modalContent .mpyCarousel").attr("data-start")) {
						var start = (carousel.attr("data-start")) ? carousel.attr("data-start") : $(".modalContent .mpyCarousel").attr("data-start");
						carousel.trigger("slideTo", [carousel.find('div[data-slide-number="' + start + '"]'), {
							duration: 0
						}]);
					}
				}, 300);
			}
		})
	}

	Modal.prototype.hide = function (e) {
		if (e) e.preventDefault()

		e = $.Event('hide.bs.modal')

		this.$element.trigger(e)

		if (!this.isShown || e.isDefaultPrevented()) return

		this.isShown = false

		this.escape()

		$(document).off('focusin.bs.modal')

		this.$element
		  .removeClass('in')
		  .attr('aria-hidden', true)
		  .off('click.dismiss.modal')

		$.support.transition && this.$element.hasClass('fade') ?
		  this.$element
			.one($.support.transition.end, $.proxy(this.hideModal, this))
			.emulateTransitionEnd(300) :
		  this.hideModal()
	}

	Modal.prototype.center = function () {
		this.$dialogContainer = this.$element.find(".modal-dialog")
		var modalH = this.$dialogContainer.height()

		if (this.options.fit == true) {

			this.$dialogContainer.css({
				left: "50%"
			});

			var outerWidth = this.$dialogContainer.outerWidth();
			var left = parseInt(this.$dialogContainer.css("left"));

			left = left - (outerWidth / 2);

			//console.log("outerWidth: " + (outerWidth + 50));
			//console.log("windowWidth: " + $(window).width());


			if ((outerWidth + 50) <= $(window).width()) {



				this.$dialogContainer.find("img").removeClass("img-responsive");
				this.$dialogContainer.css({
					position: "absolute",
					display: "inline-block",
					width: "auto",
					left: left
				});
			} else {
				this.$dialogContainer.find("img").addClass("img-responsive");
				this.$dialogContainer.css({
					left: 0,
					width: "initial",
					display: "block",
					position: "relative"
				});
			}


		}

		this.$dialogContainer.css({
			"margin-top": (($(window).height() / 2) - (modalH / 2) - parseInt(this.$dialogContainer.css('padding-top')))
		})
	}

	Modal.prototype.enforceFocus = function () {
		$(document)
		  .off('focusin.bs.modal') // guard against infinite focus loop
		  .on('focusin.bs.modal', $.proxy(function (e) {
		  	if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
		  		this.$element.focus()
		  	}
		  }, this))
	}

	Modal.prototype.escape = function () {
		if (this.isShown && this.options.keyboard) {
			this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
				e.which == 27 && this.hide()
			}, this))
		} else if (!this.isShown) {
			this.$element.off('keyup.dismiss.bs.modal')
		}
	}

	Modal.prototype.hideModal = function () {
		var that = this
		this.$element.hide()
		this.backdrop(function () {
			that.removeBackdrop()
			that.$element.trigger('hidden.bs.modal')
		})
	}

	Modal.prototype.removeBackdrop = function () {
		this.$backdrop && this.$backdrop.remove()
		this.$backdrop = null
	}

	Modal.prototype.backdrop = function (callback) {
		var that = this
		var animate = this.$element.hasClass('fade') ? 'fade' : ''

		if (this.isShown && this.options.backdrop) {
			var doAnimate = $.support.transition && animate

			this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
			  .appendTo(document.body)

			this.$element.on('click.dismiss.modal', $.proxy(function (e) {
				if (e.target !== e.currentTarget) return
				this.options.backdrop == 'static'
				  ? this.$element[0].focus.call(this.$element[0])
				  : this.hide.call(this)
			}, this))

			if (doAnimate) this.$backdrop[0].offsetWidth // force reflow

			this.$backdrop.addClass('in')

			if (!callback) return

			doAnimate ?
			  this.$backdrop
				.one($.support.transition.end, callback)
				.emulateTransitionEnd(150) :
			  callback()

		} else if (!this.isShown && this.$backdrop) {
			this.$backdrop.removeClass('in')

			$.support.transition && this.$element.hasClass('fade') ?
			  this.$backdrop
				.one($.support.transition.end, callback)
				.emulateTransitionEnd(150) :
			  callback()

		} else if (callback) {
			callback()
		}
	}


	// MODAL PLUGIN DEFINITION
	// =======================

	var old = $.fn.modal

	$.fn.modal = function (option, _relatedTarget) {
		return this.each(function () {
			var $this = $(this)
			var data = $this.data('bs.modal')
			var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)

			if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
			if (typeof option == 'string') data[option](_relatedTarget)
			else if (options.show) data.show(_relatedTarget)
		})
	}

	$.fn.modal.Constructor = Modal


	// MODAL NO CONFLICT
	// =================

	$.fn.modal.noConflict = function () {
		$.fn.modal = old
		return this
	}


	// MODAL DATA-API
	// ==============

	//Changed [data-toggle="modal"] to [data-toggle="modalMPY"]
	$(document).on('click.bs.modal.data-api', '[data-toggle="modalMPY"]', function (event) {
		var $this = $(this)
		var href = $this.attr('href')

		//START : Added
		var datasizevalue = $this.attr('data-size').toLowerCase();
		var boostrapSize1 = bootstrapSize.toLowerCase();
		if (datasizevalue.indexOf(boostrapSize1) >= 0) {
			href = $(this).attr("matchingmodal");
		}

		if (href.substr(0, 1) == '#') {
			$this.children(".carouselSlide").css("cursor", "pointer");
		}
		//END : Added

		if ($("body").hasClass("Explorer8")) {
			$target = $("#contentModal");
		} else {
			var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
		}
		
		var option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())

		option.fit = $this.hasClass("fit") ? true : false;

		$target
		  .modal(option, this)
		  .one('hide', function () {
		  	$this.is(':visible') && $this.focus()
		  })
		if (event.preventDefault) {
			event.preventDefault()
		} else {
			event.returnValue = false;
		}
	})

	$(document)
	  .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
	  .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })

}(window.jQuery);



