﻿
// JScript File
//ui.mouse.js starts here
(function($) {
	
	//If the UI scope is not availalable, add it
	$.ui = $.ui || {};
	
	//Add methods that are vital for all mouse interaction stuff (plugin registering)
	$.extend($.ui, {
		plugin: {
			add: function(w, c, o, p) {
				var a = $.ui[w].prototype; if(!a.plugins[c]) a.plugins[c] = [];
				a.plugins[c].push([o,p]);
			},
			call: function(instance, name, arguments) {
				var c = instance.plugins[name]; if(!c) return;
				var o = instance.interaction ? instance.interaction.options : instance.options;
				var e = instance.interaction ? instance.interaction.element : instance.element;
				
				for (var i = 0; i < c.length; i++) {
					if (o[c[i][0]]) c[i][1].apply(e, arguments);
				}	
			}	
		}
	});
	
	$.fn.mouseInteractionDestroy = function() {
		this.each(function() {
			if($.data(this, "ui-mouse")) $.data(this, "ui-mouse").destroy(); 	
		});
	}
	
	$.ui.mouseInteraction = function(el,o) {
	
		if(!o) var o = {};
		this.element = el;
		$.data(this.element, "ui-mouse", this);
		
		this.options = {};
		$.extend(this.options, o);
		$.extend(this.options, {
			handle : o.handle ? ($(o.handle, el)[0] ? $(o.handle, el) : $(el)) : $(el),
			helper: o.helper || 'original',
			preventionDistance: o.preventionDistance || 0,
			dragPrevention: o.dragPrevention ? o.dragPrevention.toLowerCase().split(',') : ['input','textarea','button','select','option'],
			cursorAt: { top: ((o.cursorAt && o.cursorAt.top) ? o.cursorAt.top : 0), left: ((o.cursorAt && o.cursorAt.left) ? o.cursorAt.left : 0), bottom: ((o.cursorAt && o.cursorAt.bottom) ? o.cursorAt.bottom : 0), right: ((o.cursorAt && o.cursorAt.right) ? o.cursorAt.right : 0) },
			cursorAtIgnore: (!o.cursorAt) ? true : false, //Internal property
			appendTo: o.appendTo || 'parent'			
		})
		o = this.options; //Just Lazyness
		
		if(!this.options.nonDestructive && (o.helper == 'clone' || o.helper == 'original')) {

			// Let's save the margins for better reference
			o.margins = {
				top: parseInt($(el).css('marginTop')) || 0,
				left: parseInt($(el).css('marginLeft')) || 0,
				bottom: parseInt($(el).css('marginBottom')) || 0,
				right: parseInt($(el).css('marginRight')) || 0
			};

			// We have to add margins to our cursorAt
			if(o.cursorAt.top != 0) o.cursorAt.top = o.margins.top;
			if(o.cursorAt.left != 0) o.cursorAt.left += o.margins.left;
			if(o.cursorAt.bottom != 0) o.cursorAt.bottom += o.margins.bottom;
			if(o.cursorAt.right != 0) o.cursorAt.right += o.margins.right;
			
			
			if(o.helper == 'original')
				o.wasPositioned = $(el).css('position');
			
		} else {
			o.margins = { top: 0, left: 0, right: 0, bottom: 0 };
		}
		
		var self = this;
		this.mousedownfunc = function(e) { // Bind the mousedown event
			return self.click.apply(self, [e]);	
		}
		o.handle.bind('mousedown', this.mousedownfunc);
		
		//Prevent selection of text when starting the drag in IE
		if($.browser.msie) $(this.element).attr('unselectable', 'on');
		
	}
	
	$.extend($.ui.mouseInteraction.prototype, {
		plugins: {},
		currentTarget: null,
		lastTarget: null,
		timer: null,
		slowMode: false,
		init: false,
		destroy: function() {
			this.options.handle.unbind('mousedown', this.mousedownfunc);
		},
		trigger: function(e) {
			return this.click.apply(this, arguments);
		},
		click: function(e) {

			var o = this.options;
			
			window.focus();
			if(e.which != 1) return true; //only left click starts dragging
		
			// Prevent execution on defined elements
			var targetName = (e.target) ? e.target.nodeName.toLowerCase() : e.srcElement.nodeName.toLowerCase();
			for(var i=0;i<o.dragPrevention.length;i++) {
				if(targetName == o.dragPrevention[i]) return true;
			}

			//Prevent execution on condition
			if(o.startCondition && !o.startCondition.apply(this, [e])) return true;

			var self = this;
			this.mouseup = function(e) { return self.stop.apply(self, [e]); }
			this.mousemove = function(e) { return self.drag.apply(self, [e]); }

			var initFunc = function() { //This function get's called at bottom or after timeout
				$(document).bind('mouseup', self.mouseup);
				$(document).bind('mousemove', self.mousemove);
				self.opos = [e.pageX,e.pageY]; // Get the original mouse position
			}
			
			if(o.preventionTimeout) { //use prevention timeout
				if(this.timer) clearInterval(this.timer);
				this.timer = setTimeout(function() { initFunc(); }, o.preventionTimeout);
				return false;
			}
		
			initFunc();
			return false;
			
		},
		start: function(e) {
			
			var o = this.options; var a = this.element;
			o.co = $(a).offset(); //get the current offset
				
			this.helper = typeof o.helper == 'function' ? $(o.helper.apply(a, [e,this]))[0] : (o.helper == 'clone' ? $(a).clone()[0] : a);

			if(o.appendTo == 'parent') { // Let's see if we have a positioned parent
				var cp = a.parentNode;
				while (cp) {
					if(cp.style && ($(cp).css('position') == 'relative' || $(cp).css('position') == 'absolute')) {
						o.pp = cp;
						o.po = $(cp).offset();
						o.ppOverflow = !!($(o.pp).css('overflow') == 'auto' || $(o.pp).css('overflow') == 'scroll'); //TODO!
						break;	
					}
					cp = cp.parentNode ? cp.parentNode : null;
				};
				
				if(!o.pp) o.po = { top: 0, left: 0 };
			}
			
			this.pos = [this.opos[0],this.opos[1]]; //Use the relative position
			this.rpos = [this.pos[0],this.pos[1]]; //Save the absolute position
			
			if(o.cursorAtIgnore) { // If we want to pick the element where we clicked, we borrow cursorAt and add margins
				o.cursorAt.left = this.pos[0] - o.co.left + o.margins.left;
				o.cursorAt.top = this.pos[1] - o.co.top + o.margins.top;
			}



			if(o.pp) { // If we have a positioned parent, we pick the draggable relative to it
				this.pos[0] -= o.po.left;
				this.pos[1] -= o.po.top;
			}
			
			this.slowMode = (o.cursorAt && (o.cursorAt.top-o.margins.top > 0 || o.cursorAt.bottom-o.margins.bottom > 0) && (o.cursorAt.left-o.margins.left > 0 || o.cursorAt.right-o.margins.right > 0)) ? true : false; //If cursorAt is within the helper, set slowMode to true
			
			if(!o.nonDestructive) $(this.helper).css('position', 'absolute');
			if(o.helper != 'original') $(this.helper).appendTo((o.appendTo == 'parent' ? a.parentNode : o.appendTo)).show();

			// Remap right/bottom properties for cursorAt to left/top
			if(o.cursorAt.right && !o.cursorAt.left) o.cursorAt.left = this.helper.offsetWidth+o.margins.right+o.margins.left - o.cursorAt.right;
			if(o.cursorAt.bottom && !o.cursorAt.top) o.cursorAt.top = this.helper.offsetHeight+o.margins.top+o.margins.bottom - o.cursorAt.bottom;
		
			this.init = true;	

			if(o._start) o._start.apply(a, [this.helper, this.pos, o.cursorAt, this, e]); // Trigger the start callback
			this.helperSize = { width: outerWidth(this.helper), height: outerHeight(this.helper) }; //Set helper size property
			return false;
						
		},
		stop: function(e) {			
			
			var o = this.options; var a = this.element; var self = this;

			$(document).unbind('mouseup', self.mouseup);
			$(document).unbind('mousemove', self.mousemove);

			if(this.init == false) return this.opos = this.pos = null;
			if(o._beforeStop) o._beforeStop.apply(a, [this.helper, this.pos, o.cursorAt, this, e]);

			if(this.helper != a && !o.beQuietAtEnd) { // Remove helper, if it's not the original node
				$(this.helper).remove(); this.helper = null;
			}
			
			if(!o.beQuietAtEnd) {
				//if(o.wasPositioned)	$(a).css('position', o.wasPositioned);
				if(o._stop) o._stop.apply(a, [this.helper, this.pos, o.cursorAt, this, e]);
			}

			this.init = false;
			this.opos = this.pos = null;
			return false;
			
		},
		drag: function(e) {

			if (!this.opos || ($.browser.msie && !e.button)) return this.stop.apply(this, [e]); // check for IE mouseup when moving into the document again
			var o = this.options;
			
			this.pos = [e.pageX,e.pageY]; //relative mouse position
			if(this.rpos && this.rpos[0] == this.pos[0] && this.rpos[1] == this.pos[1]) return false;
			this.rpos = [this.pos[0],this.pos[1]]; //absolute mouse position
			
			if(o.pp) { //If we have a positioned parent, use a relative position
				this.pos[0] -= o.po.left;
				this.pos[1] -= o.po.top;	
			}
			
			if( (Math.abs(this.rpos[0]-this.opos[0]) > o.preventionDistance || Math.abs(this.rpos[1]-this.opos[1]) > o.preventionDistance) && this.init == false) //If position is more than x pixels from original position, start dragging
				this.start.apply(this,[e]);			
			else {
				if(this.init == false) return false;
			}
		
			if(o._drag) o._drag.apply(this.element, [this.helper, this.pos, o.cursorAt, this, e]);
			return false;
			
		}
	});

	var num = function(el, prop) {
		return parseInt($.css(el.jquery?el[0]:el,prop))||0;
	};
	function outerWidth(el) {
		var $el = $(el), ow = $el.width();
		for (var i = 0, props = ['borderLeftWidth', 'paddingLeft', 'paddingRight', 'borderRightWidth']; i < props.length; i++)
			ow += num($el, props[i]);
		return ow;
	}
	function outerHeight(el) {
		var $el = $(el), oh = $el.width();
		for (var i = 0, props = ['borderTopWidth', 'paddingTop', 'paddingBottom', 'borderBottomWidth']; i < props.length; i++)
			oh += num($el, props[i]);
		return oh;
	}

 })(jQuery);
//ui.mouse.js ends here 

//ui.draggable.js starts here 
(function($) {

	//Make nodes selectable by expression
	$.extend($.expr[':'], { draggable: "(' '+a.className+' ').indexOf(' ui-draggable ')" });


	//Macros for external methods that support chaining
	var methods = "destroy,enable,disable".split(",");
	for(var i=0;i<methods.length;i++) {
		var cur = methods[i], f;
		eval('f = function() { var a = arguments; return this.each(function() { if(jQuery(this).is(".ui-draggable")) jQuery.data(this, "ui-draggable")["'+cur+'"](a); }); }');
		$.fn["draggable"+cur.substr(0,1).toUpperCase()+cur.substr(1)] = f;
	};
	
	//get instance method
	$.fn.draggableInstance = function() {
		if($(this[0]).is(".ui-draggable")) return $.data(this[0], "ui-draggable");
		return false;
	};

	$.fn.draggable = function(o) {
		return this.each(function() {
			if(!$(this).is(".ui-draggable")) new $.ui.draggable(this, o);
		});
	}
	
	$.ui.ddmanager = {
		current: null,
		droppables: [],
		prepareOffsets: function(t, e) {
			var dropTop = $.ui.ddmanager.dropTop = [];
			var dropLeft = $.ui.ddmanager.dropLeft;
			var m = $.ui.ddmanager.droppables;
			for (var i = 0; i < m.length; i++) {
				if(m[i].item.disabled) continue;
				m[i].offset = $(m[i].item.element).offset();
				if (t && m[i].item.options.accept(t.element)) //Activate the droppable if used directly from draggables
					m[i].item.activate.call(m[i].item, e);
			}
		},
		fire: function(oDrag, e) {
			
			var oDrops = $.ui.ddmanager.droppables;
			var oOvers = $.grep(oDrops, function(oDrop) {
				
				if (!oDrop.item.disabled && $.ui.intersect(oDrag, oDrop, oDrop.item.options.tolerance))
					oDrop.item.drop.call(oDrop.item, e);
			});
			$.each(oDrops, function(i, oDrop) {
				if (!oDrop.item.disabled && oDrop.item.options.accept(oDrag.element)) {
					oDrop.out = 1; oDrop.over = 0;
					oDrop.item.deactivate.call(oDrop.item, e);
				}
			});
		},
		update: function(oDrag, e) {
			
			if(oDrag.options.refreshPositions) $.ui.ddmanager.prepareOffsets();
			
			var oDrops = $.ui.ddmanager.droppables;
			var oOvers = $.grep(oDrops, function(oDrop) {
				if(oDrop.item.disabled) return false; 
				var isOver = $.ui.intersect(oDrag, oDrop, oDrop.item.options.tolerance)
				if (!isOver && oDrop.over == 1) {
					oDrop.out = 1; oDrop.over = 0;
					oDrop.item.out.call(oDrop.item, e);
				}
				return isOver;
			});
			$.each(oOvers, function(i, oOver) {
				if (oOver.over == 0) {
					oOver.out = 0; oOver.over = 1;
					oOver.item.over.call(oOver.item, e);
				}
			});
		}
	};
	
	$.ui.draggable = function(el, o) {
		
		var options = {};
		$.extend(options, o);
		var self = this;
		$.extend(options, {
			_start: function(h, p, c, t, e) {
				self.start.apply(t, [self, e]); // Trigger the start callback				
			},
			_beforeStop: function(h, p, c, t, e) {
				self.stop.apply(t, [self, e]); // Trigger the start callback
			},
			_drag: function(h, p, c, t, e) {
				self.drag.apply(t, [self, e]); // Trigger the start callback
			},
			startCondition: function(e) {
				return !(e.target.className.indexOf("ui-resizable-handle") != -1 || self.disabled);	
			}			
		});
		
		$.data(el, "ui-draggable", this);
		
		if (options.ghosting == true) options.helper = 'clone'; //legacy option check
		$(el).addClass("ui-draggable");
		this.interaction = new $.ui.mouseInteraction(el, options);
		
	}
	
	$.extend($.ui.draggable.prototype, {
		plugins: {},
		currentTarget: null,
		lastTarget: null,
		destroy: function() {
			$(this.interaction.element).removeClass("ui-draggable").removeClass("ui-draggable-disabled");
			this.interaction.destroy();
		},
		enable: function() {
			$(this.interaction.element).removeClass("ui-draggable-disabled");
			this.disabled = false;
		},
		disable: function() {
			$(this.interaction.element).addClass("ui-draggable-disabled");
			this.disabled = true;
		},
		prepareCallbackObj: function(self) {
			return {
				helper: self.helper,
				position: { left: self.pos[0], top: self.pos[1] },
				offset: self.options.cursorAt,
				draggable: self,
				options: self.options	
			}			
		},
		start: function(that, e) {
			
			var o = this.options;
			$.ui.ddmanager.current = this;
			
			$.ui.plugin.call(that, 'start', [e, that.prepareCallbackObj(this)]);
			$(this.element).triggerHandler("dragstart", [e, that.prepareCallbackObj(this)], o.start);
			
			if (this.slowMode && $.ui.droppable && !o.dropBehaviour)
				$.ui.ddmanager.prepareOffsets(this, e);
			
			return false;
						
		},
		stop: function(that, e) {			
			
			var o = this.options;
			
			$.ui.plugin.call(that, 'stop', [e, that.prepareCallbackObj(this)]);
			$(this.element).triggerHandler("dragstop", [e, that.prepareCallbackObj(this)], o.stop);

			if (this.slowMode && $.ui.droppable && !o.dropBehaviour) //If cursorAt is within the helper, we must use our drop manager
				$.ui.ddmanager.fire(this, e);

			$.ui.ddmanager.current = null;
			$.ui.ddmanager.last = this;

			return false;
			
		},
		drag: function(that, e) {

			var o = this.options;

			$.ui.ddmanager.update(this, e);

			this.pos = [this.pos[0]-o.cursorAt.left, this.pos[1]-o.cursorAt.top];

			$.ui.plugin.call(that, 'drag', [e, that.prepareCallbackObj(this)]);
			var nv = $(this.element).triggerHandler("drag", [e, that.prepareCallbackObj(this)], o.drag);

			var nl = (nv && nv.left) ? nv.left : this.pos[0];
			var nt = (nv && nv.top) ? nv.top : this.pos[1];
			
			$(this.helper).css('left', nl+'px').css('top', nt+'px'); // Stick the helper to the cursor
			return false;
			
		}
	});

})(jQuery);

//ui.draggable.js ends here

//ui.draggable.ext.js starts here
/*
 * 'this' -> original element
 * 1. argument: browser event
 * 2.argument: ui object
 */

(function($) {

	$.ui.plugin.add("draggable", "stop", "effect", function(e,ui) {
		var t = ui.helper;
		if(ui.options.effect[1]) {
			if(t != this) {
				ui.options.beQuietAtEnd = true;
				switch(ui.options.effect[1]) {
					case 'fade':
						$(t).fadeOut(300, function() { $(this).remove(); });
						break;
					default:
						$(t).remove();
						break;	
				}
			}
		}
	});
	
	$.ui.plugin.add("draggable", "start", "effect", function(e,ui) {
		if(ui.options.effect[0]) {
			switch(ui.options.effect[0]) {
				case 'fade':
					$(ui.helper).hide().fadeIn(300);
					break;
			}
		}
	});

//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "start", "cursor", function(e,ui) {
		var t = $('body');
		if (t.css("cursor")) ui.options.ocursor = t.css("cursor");
		t.css("cursor", ui.options.cursor);
	});

	$.ui.plugin.add("draggable", "stop", "cursor", function(e,ui) {
		if (ui.options.ocursor) $('body').css("cursor", ui.options.ocursor);
	});

//----------------------------------------------------------------
	
	$.ui.plugin.add("draggable", "start", "zIndex", function(e,ui) {
		var t = $(ui.helper);
		if(t.css("zIndex")) ui.options.ozIndex = t.css("zIndex");
		t.css('zIndex', ui.options.zIndex);
	});
	
	$.ui.plugin.add("draggable", "stop", "zIndex", function(e,ui) {
		if(ui.options.ozIndex) $(ui.helper).css('zIndex', ui.options.ozIndex);
	});


//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "start", "opacity", function(e,ui) {
		var t = $(ui.helper);
		if(t.css("opacity")) ui.options.oopacity = t.css("opacity");
		t.css('opacity', ui.options.opacity);
	});
	
	$.ui.plugin.add("draggable", "stop", "opacity", function(e,ui) {
		if(ui.options.oopacity) $(ui.helper).css('opacity', ui.options.oopacity);
	});

//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "stop", "revert", function(e,ui) {
	
		var o = ui.options;
		var rpos = { left: 0, top: 0 };
		o.beQuietAtEnd = true;

		if(ui.helper != this) {

			rpos = $(ui.draggable.sorthelper || this).offset({ border: false });

			var nl = rpos.left-o.po.left-o.margins.left;
			var nt = rpos.top-o.po.top-o.margins.top;

		} else {
			var nl = o.co.left - (o.po ? o.po.left : 0);
			var nt = o.co.top - (o.po ? o.po.top : 0);
		}
		
		var self = ui.draggable;

		$(ui.helper).animate({
			left: nl,
			top: nt
		}, 500, function() {
			
			if(o.wasPositioned) $(self.element).css('position', o.wasPositioned);
			if(o.stop) o.stop.apply(self.element, [self.helper, self.pos, [o.co.left - o.po.left,o.co.top - o.po.top],self]);
			
			if(self.helper != self.element) window.setTimeout(function() { $(self.helper).remove(); }, 0); //Using setTimeout because of strange flickering in Firefox
			
		});
		
	});

//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "start", "iframeFix", function(e,ui) {

		var o = ui.options;
		if(!ui.draggable.slowMode) { // Make clones on top of iframes (only if we are not in slowMode)
			if(o.iframeFix.constructor == Array) {
				for(var i=0;i<o.iframeFix.length;i++) {
					var co = $(o.iframeFix[i]).offset({ border: false });
					$("<div class='DragDropIframeFix' style='background: #fff;'></div>").css("width", $(o.iframeFix[i])[0].offsetWidth+"px").css("height", $(o.iframeFix[i])[0].offsetHeight+"px").css("position", "absolute").css("opacity", "0.001").css("z-index", "1000").css("top", co.top+"px").css("left", co.left+"px").appendTo("body");
				}		
			} else {
				$("iframe").each(function() {					
					var co = $(this).offset({ border: false });
					$("<div class='DragDropIframeFix' style='background: #fff;'></div>").css("width", this.offsetWidth+"px").css("height", this.offsetHeight+"px").css("position", "absolute").css("opacity", "0.001").css("z-index", "1000").css("top", co.top+"px").css("left", co.left+"px").appendTo("body");
				});							
			}		
		}

	});
	
	$.ui.plugin.add("draggable","stop", "iframeFix", function(e,ui) {
		if(ui.options.iframeFix) $("div.DragDropIframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers	
	});
		
//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "start", "containment", function(e,ui) {

		var o = ui.options;

		if(!o.cursorAtIgnore || o.containment.left != undefined || o.containment.constructor == Array) return;
		if(o.containment == 'parent') o.containment = this.parentNode;


		if(o.containment == 'document') {
			o.containment = [
				0-o.margins.left,
				0-o.margins.top,
				$(document).width()-o.margins.right,
				($(document).height() || document.body.parentNode.scrollHeight)-o.margins.bottom
			];
		} else { //I'm a node, so compute top/left/right/bottom
			var ce = $(o.containment)[0];
			var co = $(o.containment).offset({ border: false });

			o.containment = [
				co.left-o.margins.left,
				co.top-o.margins.top,
				co.left+(ce.offsetWidth || ce.scrollWidth)-o.margins.right,
				co.top+(ce.offsetHeight || ce.scrollHeight)-o.margins.bottom
			];
		}

	});
	
	$.ui.plugin.add("draggable", "drag", "containment", function(e,ui) {
		
		var o = ui.options;
		if(!o.cursorAtIgnore) return;
			
		var h = $(ui.helper);
		var c = o.containment;
		if(c.constructor == Array) {
			
			if((ui.draggable.pos[0] < c[0]-o.po.left)) ui.draggable.pos[0] = c[0]-o.po.left;
			if((ui.draggable.pos[1] < c[1]-o.po.top)) ui.draggable.pos[1] = c[1]-o.po.top;
			if(ui.draggable.pos[0]+h[0].offsetWidth > c[2]-o.po.left) ui.draggable.pos[0] = c[2]-o.po.left-h[0].offsetWidth;
			if(ui.draggable.pos[1]+h[0].offsetHeight > c[3]-o.po.top) ui.draggable.pos[1] = c[3]-o.po.top-h[0].offsetHeight;
			
		} else {

			if(c.left && (ui.draggable.pos[0] < c.left)) ui.draggable.pos[0] = c.left;
			if(c.top && (ui.draggable.pos[1] < c.top)) ui.draggable.pos[1] = c.top;

			var p = $(o.pp);
			if(c.right && ui.draggable.pos[0]+h[0].offsetWidth > p[0].offsetWidth-c.right) ui.draggable.pos[0] = (p[0].offsetWidth-c.right)-h[0].offsetWidth;
			if(c.bottom && ui.draggable.pos[1]+h[0].offsetHeight > p[0].offsetHeight-c.bottom) ui.draggable.pos[1] = (p[0].offsetHeight-c.bottom)-h[0].offsetHeight;
			
		}

		
	});

//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "drag", "grid", function(e,ui) {
		var o = ui.options;
		if(!o.cursorAtIgnore) return;
		ui.draggable.pos[0] = o.co.left + o.margins.left - o.po.left + Math.round((ui.draggable.pos[0] - o.co.left - o.margins.left + o.po.left) / o.grid[0]) * o.grid[0];
		ui.draggable.pos[1] = o.co.top + o.margins.top - o.po.top + Math.round((ui.draggable.pos[1] - o.co.top - o.margins.top + o.po.top) / o.grid[1]) * o.grid[1];
	});

//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "drag", "axis", function(e,ui) {
		var o = ui.options;
		if(!o.cursorAtIgnore) return;
		if(o.constraint) o.axis = o.constraint; //Legacy check
		o.axis ? ( o.axis == 'x' ? ui.draggable.pos[1] = o.co.top - o.margins.top - o.po.top : ui.draggable.pos[0] = o.co.left - o.margins.left - o.po.left ) : null;
	});

//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "drag", "scroll", function(e,ui) {

		var o = ui.options;
		o.scrollSensitivity	= o.scrollSensitivity || 20;
		o.scrollSpeed		= o.scrollSpeed || 20;

		if(o.pp && o.ppOverflow) { // If we have a positioned parent, we only scroll in this one
			// TODO: Extremely strange issues are waiting here..handle with care
		} else {
			if((ui.draggable.rpos[1] - $(window).height()) - $(document).scrollTop() > -o.scrollSensitivity) window.scrollBy(0,o.scrollSpeed);
			if(ui.draggable.rpos[1] - $(document).scrollTop() < o.scrollSensitivity) window.scrollBy(0,-o.scrollSpeed);
			if((ui.draggable.rpos[0] - $(window).width()) - $(document).scrollLeft() > -o.scrollSensitivity) window.scrollBy(o.scrollSpeed,0);
			if(ui.draggable.rpos[0] - $(document).scrollLeft() < o.scrollSensitivity) window.scrollBy(-o.scrollSpeed,0);
		}

	});

//----------------------------------------------------------------

	$.ui.plugin.add("draggable", "drag", "wrapHelper", function(e,ui) {

		var o = ui.options;
		if(o.cursorAtIgnore) return;
		var t = ui.helper;

		if(!o.pp || !o.ppOverflow) {
			var wx = $(window).width() - ($.browser.mozilla ? 20 : 0);
			var sx = $(document).scrollLeft();
			
			var wy = $(window).height();
			var sy = $(document).scrollTop();	
		} else {
			var wx = o.pp.offsetWidth + o.po.left - 20;
			var sx = o.pp.scrollLeft;
			
			var wy = o.pp.offsetHeight + o.po.top - 20;
			var sy = o.pp.scrollTop;						
		}

		ui.draggable.pos[0] -= ((ui.draggable.rpos[0]-o.cursorAt.left - wx + t.offsetWidth+o.margins.right) - sx > 0 || (ui.draggable.rpos[0]-o.cursorAt.left+o.margins.left) - sx < 0) ? (t.offsetWidth+o.margins.left+o.margins.right - o.cursorAt.left * 2) : 0;
		
		ui.draggable.pos[1] -= ((ui.draggable.rpos[1]-o.cursorAt.top - wy + t.offsetHeight+o.margins.bottom) - sy > 0 || (ui.draggable.rpos[1]-o.cursorAt.top+o.margins.top) - sy < 0) ? (t.offsetHeight+o.margins.top+o.margins.bottom - o.cursorAt.top * 2) : 0;

	});

})(jQuery);

//ui.draggable.ext.js ends here


//custom.js starts here


// JScript File
//global variables
var mapslider_container;
var mapslider_presentlevel;
var mapslider_startlevel;
var mapslider_maxlevel;
var mapslider_mode;
var mapslider_callback;
var mapslider_strPos;
var mapslider_lastevent;


//Adjustment variables and section heights
var mapslider_dragbaradjustxpos;
var mapslider_dragbaradjustypos;
var mapslider_zoominbarheight;
var mapslider_topbarheight;
var mapslider_segmentbarheight;
var mapslider_markbarheight;
var mapslider_bottombarheight;
var mapslider_zoomoutbarheight;

//sliding bar
var mapslider_activebar="../Mapping/icons/bar_slider_active.gif";
var mapslider_offbar="../Mapping/icons/bar_slider_off.gif";
var mapslider_overbar="../Mapping/icons/bar_slider_over.gif";

//bottom
var mapslider_activebottom="../Mapping/icons/barA_bottom_active.gif";
var mapslider_offbottom="../Mapping/icons/barA_bottom_off.gif";
var mapslider_overbottom="../Mapping/icons/barA_bottom_over.gif";
var mapslider_activeyellowbottom="../Mapping/icons/barB_bottom_active.gif" ;
var mapslider_offyellowbottom="../Mapping/icons/barB_bottom_off.gif";
var mapslider_overyellowbottom="../Mapping/icons/barB_bottom_over.gif";

//top
var mapslider_activetop="../Mapping/icons/barA_top_active.gif";
var mapslider_offtop="../Mapping/icons/barA_top_off.gif";
var mapslider_overtop="../Mapping/icons/barA_top_over.gif";
var mapslider_activeyellowtop="../Mapping/icons/barB_top_active.gif";
var mapslider_offyellowtop="../Mapping/icons/barB_top_off.gif";
var mapslider_overyellowtop="../Mapping/icons/barB_top_over.gif";

//mark
var mapslider_activemark="../Mapping/icons/barA_mark_active.gif";
var mapslider_offmark="../Mapping/icons/barA_mark_off.gif";
var mapslider_overmark="../Mapping/icons/barA_mark_over.gif";

//segment
var mapslider_activesegment="../Mapping/icons/barA_segmnt_active.gif";
var mapslider_offsegment="../Mapping/icons/barA_segmnt_off.gif";
var mapslider_oversegment="../Mapping/icons/barA_segmnt_over.gif";
var mapslider_activeyellowsegment="../Mapping/icons/barB_segmnt_active.gif";
var mapslider_offyellowsegment="../Mapping/icons/barB_segmnt_off.gif";
var mapslider_overyellowsegment="../Mapping/icons/barB_segmnt_over.gif";

//zoomin
var mapslider_activezoomin="../Mapping/icons/but_zoomin_active.gif";
var mapslider_offzoomin="../Mapping/icons/but_zoomin_off.gif";
var mapslider_overzoomin="../Mapping/icons/but_zoomin_roll.gif";

//zoomout
var mapslider_activezoomout="../Mapping/icons/but_zoomout_active.gif";
var mapslider_offzoomout="../Mapping/icons/but_zoomout_off.gif";
var mapslider_overzoomout="../Mapping/icons/but_zoomout_roll.gif";





//Rendering And Configuring Functions  Starts here //
function LoadSlider(container_div,startlevel,maxlevel,mode,callback)
{
if( startlevel != null || GetMapSliderPresentLevel != null )
{
   if(GetMapSliderPresentLevel() != startlevel)
   {
    //Configure the silder
    ConfigureMapSlider(container_div,startlevel,maxlevel,mode,callback);
    //Build the Slider 
     BuildSlider();
     }
     }
}

function ConfigureMapSlider(container_div,startlevel,maxlevel,mode,callback)
{
    mapslider_container=container_div;
    mapslider_startlevel=startlevel
    mapslider_maxlevel=maxlevel;
    //mapslider_mode=mode;//'0';//0-off,1-active;2-over
     mapslider_mode=0;//'0';//0-off,1-active;2-over
    
    mapslider_presentlevel=startlevel;
    if(callback!=null){
        mapslider_callback=callback;}

    mapslider_dragbaradjustxpos='2';
    mapslider_dragbaradjustypos='3';
    mapslider_lastevent=null;
    mapslider_zoominbarheight="16";
    mapslider_topbarheight="4";//10
    mapslider_segmentbarheight="10";//12
    mapslider_markbarheight="1";
    mapslider_bottombarheight="8";//10
    mapslider_zoomoutbarheight="16";
}

function BuildSlider()
{

    var mapslider_containerheight;
    var mapslider_position;   
    var mapslider_dragbarxpos;
    var mapslider_dragbarypos;
    var x_position;
    var y_position;
    var mapslider_spaceypos='10';

    $("#" + mapslider_container).find("#mapslider_maintable").remove();
    mapslider_position=FindAbsPosition(mapslider_container);
    x_position=parseInt(mapslider_position[0])+1;
    y_position=parseInt(mapslider_position[1])+1;


    $("<table id='mapslider_maintable' border='0' cellspacing='0' cellpadding='0'></table>")
    .appendTo("#" + mapslider_container);

    //Appending Zoom In-Section
    $("<tr><td><img id='mapslider_img_zoomin' alt='zoom in' src='" + mapslider_offzoomin + "' style='position:absolute;left:" +  
    parseInt(parseInt(x_position)-1) + "px;top:" + y_position + "px;z-index:600;'/></td></tr>")
    .appendTo("#mapslider_maintable");

    //Attaching click event to ZoomIn Button
    $("#mapslider_img_zoomin").unbind("click").bind("click",function()
    {
      $(this).attr("src",mapslider_activezoomin);
      ZoomInClicked();
      
    });


    //Appending zoombar height to containerheight
    mapslider_containerheight=parseInt(mapslider_zoominbarheight);

    //Appending zoombar height to y_position variable
    y_position= parseInt(y_position)+ parseInt(mapslider_zoominbarheight)+ parseInt(mapslider_spaceypos);


    //Appending dummy row to maintain space between zoom in section and segment section
    $("<tr><td height='46px'>&nbsp;</td></tr>").appendTo("#mapslider_maintable"); //dummy row
  
      

    //Appending Segment-Section
    $("<tr><td><table id='mapslider_segment_table' border='0'  cellspacing='0' cellpadding='0'></table></td></tr>")
    .appendTo("#mapslider_maintable");

    $("<tr><td><img alt='map slider image' id='mapslider_img_top'  src='"+ mapslider_offtop  + "' style='position:absolute;left:" + 
    x_position + "px;top:" + y_position + "px;z-index:601;'/></td></tr>")
    .appendTo("#mapslider_segment_table");

    //Appending topbar height to containerheight
    mapslider_containerheight +=parseInt(mapslider_topbarheight);

    //Appending topbar height to y_position variable
    y_position=parseInt(y_position)+ parseInt(mapslider_topbarheight);


    //Building Segement Section
    mapslider_strPos='';
    var mdx;
    
    for(idx=mapslider_maxlevel;idx>=1;idx--)
    {
        $("<tr><td><img  alt='map slider image' id='maplsider_img_segment_" + idx + "' src='"+ mapslider_offsegment + "' style='position:" +
        "absolute;left:" + x_position + "px;top:" + y_position + "px;z-index:601;'/></td></tr>")
        .appendTo("#mapslider_segment_table");

         //Appending segmentbar height to containerheight
            mapslider_containerheight +=parseInt(mapslider_segmentbarheight);

        //Appending segmentbar height to y_position variable
            y_position=parseInt(y_position)+ parseInt(mapslider_segmentbarheight);

        $("<tr><td><img alt='map slider image'  id='maplsider_img_mark_" + idx + "' src='"+ mapslider_offmark + "' style='position:absolute;" +
        "left:" + x_position + "px;top:" + y_position + "px;z-index:602;'/></td></tr>")
        .appendTo("#mapslider_segment_table");

            //Appending markbar height to y_position variable  
            if(idx==1)
            {
             y_position=parseInt(y_position)+ parseInt(mapslider_markbarheight);
            }

        //Build Y-Position Strings of all segment images which is used to find the nearest segment on dragging
            if(mapslider_strPos=='')
            {
                mapslider_strPos= idx +',' + y_position;
            }
            else
            {
                mapslider_strPos+= "~"+ idx +',' + y_position;
            }
        
        
    }



     $("<tr><td><img  alt='map slider image' id='mapslider_img_bottom' src='"+ mapslider_offbottom  + "'  style='position:absolute;left:" +
     x_position + "px;top:" + y_position + "px;z-index:603;' /></td></tr>")
     .appendTo("#mapslider_segment_table");

    //Appending bottombar height to containerheight
    mapslider_containerheight +=parseInt(mapslider_bottombarheight);

    //Appending Dragbar Section
    //x-position for dragbar
    mapslider_dragbarxpos=parseInt(x_position)-parseInt(mapslider_dragbaradjustxpos);
    //y-position for dragbar
    mapslider_dragbarypos=parseInt(y_position)+ parseInt(mapslider_bottombarheight)- parseInt(mapslider_dragbaradjustypos);

    $("<img  alt ='map slider image' id='mapslider_img_sliderbar' style='position:absolute;z-index:999;left:" + mapslider_dragbarxpos 
    + "px;top:" + mapslider_dragbarypos + "px;'  src='" + mapslider_offbar + "'" + 
    "align='middle' />").appendTo("#mapslider_segment_table");

    //Appending bottombar height to y_position variable
    y_position=parseInt(y_position)+ parseInt(mapslider_bottombarheight) + parseInt(mapslider_spaceypos);


    //Append Zoom Out Row-Section   
    $("<tr><td align='center'><img id='mapslider_img_zoomout' alt='zoom out' src='" + mapslider_offzoomout + "' style=' position:"+
    "absolute;left:" + parseInt(parseInt(x_position)-1) + "px;top:" + y_position + "px;z-index:604;' /></td></tr>")
    .appendTo("#mapslider_maintable");
     


     //Appending zoomoutbar height to containerheight
     mapslider_containerheight +=parseInt(mapslider_zoomoutbarheight);
     
    //Attaching click event to ZoomIn Button
    $("#mapslider_img_zoomout").unbind("click").bind("click",function()
    {
      $(this).attr("src",mapslider_activezoomout);
      ZoomOutClicked();
    });

    if(mapslider_startlevel>0)
    {  
     DisplayByMode(mapslider_mode);
     PositionDragBarByLevel(mapslider_presentlevel)
    }  

   


    //Attach Draggable Event and Set the width and height of parent containers
    $("#" + mapslider_container).width($("#maplsider_img_segment_1").width());
    $("#" + mapslider_container).height(mapslider_containerheight);
    $("#mapslider_maintable").width($("#maplsider_img_segment_1").width());
    $("#mapslider_maintable").height(mapslider_containerheight);
    $("#mapslider_segment_table").height(FindSegmentSectionHeight());
    $("#mapslider_segment_table").width($("#maplsider_img_segment_1").width());
    $("#mapslider_img_sliderbar").draggable({axis:mapslider_dragbarxpos,containment:'parent',
    stop:DragStop,drag:OnDragging});  
    $("#mapslider_img_zoomin").unbind("mouseover").bind("mouseover",function()
    {$(this).attr("src",mapslider_overzoomin);})
    .unbind("mouseout").bind("mouseout",function(){$(this).attr("src",mapslider_activezoomin);});
    $("#mapslider_img_zoomout").unbind("mouseover").bind("mouseover",function()
    {$(this).attr("src",mapslider_overzoomout);})
    .unbind("mouseout").bind("mouseout",function(){$(this).attr("src",mapslider_activezoomout);});

 $("#mapslider_segment_table").find("img").unbind("click").bind("click",function()
    {
       
        if(mapslider_lastevent==null)
        {
           var clickedlevel;
           if($(this).attr("id")=='mapslider_img_top')
           {
                clickedlevel=mapslider_maxlevel;
           }
           else if($(this).attr("id")=='mapslider_img_bottom')
           {
                clickedlevel=1;
           }
           else
           {
                clickedlevel=$(this).attr("id").split("_")[3];
            
           }
           ClickedOnSlider(clickedlevel);
        }
        else
        {
            mapslider_lastevent=null;
        }
    }); 

}


function DisplayByMode(mode)
{
    if(mode=='0')//for off mode
    {
           mapslider_mode='0'
           $("#mapslider_img_zoomin").attr("src",mapslider_offzoomin);
           $("#mapslider_img_top").attr("src",mapslider_offtop);
          
           for(idx=1;idx<=mapslider_maxlevel;idx++)
           {
                    if(idx<mapslider_presentlevel)
                       {
                        $("#maplsider_img_segment_"+ idx).attr("src",mapslider_offyellowsegment);
                        
                       }
                       else
                       {
                        $("#maplsider_img_segment_"+ idx).attr("src",mapslider_offsegment);
                       
                       } 
                    $("#maplsider_img_mark_"+ idx).attr("src",mapslider_offmark);
           }
          
              if(mapslider_presentlevel>0)
              {
                   
                    $("#mapslider_img_bottom").attr("src",mapslider_offyellowbottom);
              }
              else
              {
                    $("#mapslider_img_bottom").attr("src",mapslider_offbottom);
                    
              }
           $("#mapslider_img_zoomout").attr("src",mapslider_offzoomout);
           $("#mapslider_img_sliderbar").attr("src",mapslider_offbar);
    }
    else if(mode=='1')//for active mode
    {
      
           $("#mapslider_img_zoomin").attr("src",mapslider_activezoomin);
           $("#mapslider_img_top").attr("src",mapslider_activetop);
         
           for(jdx=1;jdx<=mapslider_maxlevel;jdx++)
           {
               
                   if(jdx<mapslider_presentlevel)
                   {
                    $("#maplsider_img_segment_"+ jdx).attr("src",mapslider_activeyellowsegment);
                    
                   }
                   else
                   {
                    $("#maplsider_img_segment_"+ jdx).attr("src",mapslider_activesegment);
                   
                   } 
                    $("#maplsider_img_mark_"+ jdx).attr("src",mapslider_activemark);
           }
          
          if(mapslider_presentlevel>0)
          {
               
                $("#mapslider_img_bottom").attr("src",mapslider_activeyellowbottom);
          }
          else
          {
                $("#mapslider_img_bottom").attr("src",mapslider_activebottom);
                
          }
         
           $("#mapslider_img_zoomout").attr("src",mapslider_activezoomout);
           $("#mapslider_img_sliderbar").attr("src",mapslider_activebar);
    }
    else if(mode=='2')//for rollover mode
    {
      
           $("#mapslider_img_zoomin").attr("src",mapslider_overzoomin);
           $("#mapslider_img_top").attr("src",mapslider_overtop);
          
           for(kdx=1;kdx<=mapslider_maxlevel;kdx++)
           {
                   
                    if(kdx<mapslider_presentlevel)
                       {
                        $("#maplsider_img_segment_"+ kdx).attr("src",mapslider_overyellowsegment);
                        
                       }
                       else
                       {
                        $("#maplsider_img_segment_"+ kdx).attr("src",mapslider_oversegment);
                       
                       } 
                    $("#maplsider_img_mark_"+ kdx).attr("src",mapslider_overmark);
           }
          
            if(mapslider_presentlevel>0)
              {
                   
                    $("#mapslider_img_bottom").attr("src",mapslider_overyellowbottom);
              }
              else
              {
                    $("#mapslider_img_bottom").attr("src",mapslider_overbottom);
                    
              }
           $("#mapslider_img_zoomout").attr("src",mapslider_overzoomout);
           $("#mapslider_img_sliderbar").attr("src",mapslider_overbar);
    }
}


//Rendering And Configuring Functions  Ends here //

//User Action Function Starts Here//

function DragStop(param1,positionparam)
{
   // mapslider_mode=1;
    mapslider_mode=0;
    mapslider_presentlevel=FindNearestSegment(positionparam.position.top)
    PositionDragBarByLevel(mapslider_presentlevel);
    DisplayByMode(mapslider_mode) 
    mapslider_callback(mapslider_presentlevel);
    mapslider_dragon=true;
    mapslider_lastevent="Dragged";
}

function OnDragging(param1,positionparam)
{
    
    //mapslider_mode=1;
     mapslider_mode=0;
    mapslider_presentlevel=FindNearestSegment(positionparam.position.top)
    DisplayByMode(mapslider_mode) 
}

function ZoomInClicked()
{
 
  
    //mapslider_mode=1;//change mode to active from off or rollover
    mapslider_mode=0;
    if(parseInt(mapslider_presentlevel)<parseInt(mapslider_maxlevel))
    {
        mapslider_presentlevel++;
        PositionDragBarByLevel(mapslider_presentlevel)
        DisplayByMode(mapslider_mode)
        mapslider_callback(mapslider_presentlevel);
    }    
}



function ZoomOutClicked()
{
   
    //mapslider_mode=1;//change mode to active from off or rollover
    mapslider_mode=0;

    if(parseInt(mapslider_presentlevel)>1)
    {
        mapslider_presentlevel--;
        PositionDragBarByLevel(mapslider_presentlevel)
        DisplayByMode(mapslider_mode);
        mapslider_callback(mapslider_presentlevel);
    }    
    
}

function ClickedOnSlider(level)
{
   
    //mapslider_mode=1;
    mapslider_mode=0;
    mapslider_presentlevel=level
    PositionDragBarByLevel(mapslider_presentlevel); 
    DisplayByMode(mapslider_mode); 
    mapslider_callback(mapslider_presentlevel);
}

// User Action Function Ends Here//

// Utility Function Starts Here//

function PositionDragBarByLevel(level)
{
    var mapslider_dragbarpos;
    var dragbar_xposition;
    var dragbar_yposition;
    mapslider_dragbarpos=FindAbsPosition('maplsider_img_segment_' + level);
    dragbar_xposition=parseInt(mapslider_dragbarpos[0])-parseInt(mapslider_dragbaradjustxpos);

    mapslider_dragbarpos=FindAbsPosition('maplsider_img_mark_' + level);
    dragbar_yposition=mapslider_dragbarpos[1] 

//  var strstyle="position:absolute;z-index:999;left:" + dragbar_xposition +"px;top:"+
//     dragbar_yposition +"px;" 
//$("#mapslider_img_sliderbar").show();
//$("#mapslider_img_sliderbar").attr("style",strstyle);
//  
    
    $("#mapslider_img_sliderbar").show();
    $("#mapslider_img_sliderbar").animate({left: dragbar_xposition ,top: dragbar_yposition,opacity: 1},{duration: 100, queue: false });
  // mapslider_callback(level);
 

}


function FindNearestSegment(yposition)
{
    var level;
    var str_difference='';
    var old_difference='';
    var mapslider_arrPos;
     //Create a positional array
    mapslider_arrPos=mapslider_strPos.split("~");
    for (Idx=0;Idx<=mapslider_arrPos.length-1;Idx++)
    {
        var compare_idx=mapslider_arrPos[Idx].split(",")[0];
        var compare_val=mapslider_arrPos[Idx].split(",")[1];
        var newdiff_val;
         if(parseInt(yposition)>=parseInt(compare_val))
         {
           newdiff_val=parseInt(yposition)-parseInt(compare_val);
         } 
         else
         {
            newdiff_val=parseInt(compare_val)-parseInt(yposition);
         } 
         
         if(old_difference=='')
         {
            old_difference=newdiff_val;
            level=compare_idx;
         }
         else
         {
           if(parseInt(old_difference)>=parseInt(newdiff_val))
           {
             old_difference=newdiff_val;
             level=compare_idx;
           }
           
           
         }
    }
    return level;
}


function FindSegmentSectionHeight()
{
//    var mapslider_segmentsectionheight;
//    mapslider_segmentsectionheight=parseInt(mapslider_topbarheight) + 
//    (parseInt(mapslider_segmentbarheight)* parseInt(mapslider_maxlevel))
//    + parseInt(mapslider_bottombarheight);
    
    var mapslider_segmentsectionheight;
    mapslider_segmentsectionheight=parseInt(mapslider_segmentbarheight)* parseInt(mapslider_maxlevel);
    
    return mapslider_segmentsectionheight;
}



function FindAbsPosition(elementid)
{
    var $elem=$("#" +elementid );
    var attr_style= $($elem).attr("style");
    var array_style=attr_style.split(";")
    var elem_leftpos;
    var elem_toppos;
    var elem_pos;
    for(k=0;k<=array_style.length-1;k++)
    {
      


    if (jQuery.trim(array_style[k].toUpperCase().split(":")[0])=='LEFT')
    {
         elem_leftpos=array_style[k].toUpperCase().split(":")[1].split("P")[0];
    }
    if (jQuery.trim(array_style[k].toUpperCase().split(":")[0])=='TOP')
    {
       
         elem_toppos=array_style[k].toUpperCase().split(":")[1].split("P")[0];
    }


    }
    elem_pos=(elem_leftpos+ "," + elem_toppos ).split(",");
    return elem_pos;
}





// Utility Function Ends Here//

//Public Functions to return  present mode and level starts here//

function GetMapSliderMode()
{
    return mapslider_mode;
}

function GetMapSliderPresentLevel()
{
    return mapslider_presentlevel;
}
//Public Functions to return  present mode and level ends here//

//custom.js ends here
