function ddm(setting){this.sublevelarrow={src:'/shopping_media/imgs/right.gif', width:'8px', top:'3px', left:'6px'}
	this.breadcrumbarrow='/shopping_media/imgs/right.gif'
	this.loadingimage='/shopping_media/imgs/loader.gif'
	this.homecrumbtext='Categories'
	this.titlelength=35
	this.backarrow='/shopping_media/imgs/leftarrow.gif'

	this.menuid=setting.menuid
	this.$menudiv=null
	this.mainul=null
	this.$uls=null
	this.navdivs={}
	this.menuheight=setting.menuheight || 'auto'
	this.selectedul=setting.selectedul || null
	this.speed=setting.speed || 70
	this.persist=setting.persist || {enable: false, overrideselectedurl: false}
	this.$arrowimgs=null
	this.currentul=0
	this.filesetting=setting.filesetting || {url: null, targetElement: null}
	this.zIndexvalue=100
	this.arrowposx=0
	var thisdrill=this
	jQuery.noConflict()
	jQuery(document).ready(function($){if (thisdrill.filesetting.url && thisdrill.filesetting.url.length>0){var $dest=(typeof thisdrill.filesetting.targetElement=="string")? $('#'+thisdrill.filesetting.targetElement) : null
			if (!$dest || $dest.length!=1){alert("Error: The target element \"" + thisdrill.filesetting.targetElement + "\" to add the menu into doesn't exist or is incorrectly specified.")
				return}$dest.html('<img src="'+thisdrill.loadingimage+'" style="vertical-align:middle" /> <b>Loading Menu...</b>')
			$.ajax({url: thisdrill.filesetting.url,
				error:function(ajaxrequest){alert('Error fetching Ajax content.\nServer Response: '+ajaxrequest.responseText)},
				success:function(content){$dest.html(content)
					thisdrill.init($, setting)}})}else{thisdrill.init($, setting)}})}

ddm.prototype.init=function($, setting){var thisdrill=this
		var $maindiv=$('#'+setting.menuid).css({position:'relative'})
		var $uls=$maindiv.find('ul')
		$uls.css({position:'absolute', left:0, top:0, visibility:'hidden'})
		this.$maindiv=$maindiv
		this.$uls=$uls
		this.navdivs.$crumb=$('#'+setting.bcid)
		this.navdivs.$backbuttons=$('a[rel^="drbk-'+setting.menuid+'"]').css({outline:'none'}).click(function(e){thisdrill.back()
			e.preventDefault()})
		this.buildmenu($)
		$(window).bind('unload', function(){thisdrill.uninit()})
		setting=null}

ddm.prototype.buildmenu=function($){var thisdrill=this
	this.$uls.each(function(i){var $thisul=$(this)
		if (i==0){$('<li class="ddbctitle"></li>').prependTo($thisul).click(function(e){e.preventDefault()})
			thisdrill.$maindiv.css({height:(thisdrill.menuheight=='auto')? $thisul.outerHeight() : parseInt(thisdrill.menuheight), overflow:'hidden'})
				.data('h', parseInt(thisdrill.$maindiv.css('height')))}else{var $parentul=$thisul.parents('ul:eq(0)')
			var $parentli=$thisul.parents('li:eq(0)')
			$('<li class="ddbc"><img src="'+thisdrill.backarrow+'" style="border-width:0" /> Back one level</li>')
				.click(function(e){thisdrill.back(); e.preventDefault()})
				.prependTo($thisul)
			var $anchorlink=$parentli.children('a:eq(0)').css({outline:'none'}).data('control', {order:i})
			var $arrowimg=$('<img class="arrowclass" />').attr('src', thisdrill.sublevelarrow.src).css({position:'absolute', borderWidth:0, paddingTop:thisdrill.sublevelarrow.top, left:$parentli.width()-parseInt(thisdrill.sublevelarrow.width)-parseInt(thisdrill.sublevelarrow.left)}).prependTo($anchorlink)
			$anchorlink.click(function(e){thisdrill.slidemenu(jQuery(this).data('control').order)
				e.preventDefault()})}var ulheight=($thisul.outerHeight() < thisdrill.$maindiv.data('h'))? thisdrill.$maindiv.data('h') : 'auto'
		$thisul.css({visibility:'visible', width:'100%', height:ulheight, left:(i==0)? 'auto' : $parentli.outerWidth(), top:0})
		$thisul.data('specs', {w:$thisul.outerWidth(), h:$thisul.outerHeight(), order:i, parentorder:(i==0)? -1 : $anchorlink.parents('ul:eq(0)').data('specs').order, x:(i==0)? $thisul.position().left : $parentul.data('specs').x+$parentul.data('specs').w, title:(i==0)? thisdrill.homecrumbtext : $parentli.find('a:eq(0)').text().substring(0, thisdrill.titlelength)})})
	var selectedulcheck=this.selectedul && document.getElementById(this.selectedul)
	this.$arrowimgs=this.$maindiv.find('img.arrowclass')
	this.arrowposx=parseInt(this.$arrowimgs.eq(0).css('left'))
	if (window.opera)
		this.$uls.eq(0).css({zIndex: this.zIndexvalue})
	if (this.persist.enable && (this.persist.overrideselectedul || !this.persist.overrideselectedul && !selectedulcheck) && ddm.routines.getCookie(this.menuid)){
		var ulorder=parseInt(ddm.routines.getCookie(this.menuid))
		this.slidemenu(ulorder, true)}else if (selectedulcheck){var ulorder=$('#'+this.selectedul).data('specs').order
		this.slidemenu(ulorder, true)}else{this.slidemenu(0, true)}this.navdivs.$crumb.click(function(e){if (e.target.tagName=="A"){var order=parseInt(e.target.getAttribute('rel'))
			if (!isNaN(order)){thisdrill.slidemenu(order)
				e.preventDefault()}}})}

ddm.prototype.slidemenu=function(order, disableanimate){var order=isNaN(order)? 0 : order
	this.$uls.css({display: 'none'})
	var $targetul=this.$uls.eq(order).css({zIndex: this.zIndexvalue++})
	$targetul.parents('ul').andSelf().css({display: 'block'})
	this.currentul=order
	if ($targetul.data('specs').h > this.$maindiv.data('h')){this.$maindiv.css({overflowY:'auto'}).scrollTop(0)
		this.$arrowimgs.css('left', this.arrowposx-15)}else{this.$maindiv.css({overflowY: 'hidden'}).scrollTop(0)
		this.$arrowimgs.css('left', this.arrowposx)}this.updatenav($, order)
	this.$uls.eq(0).animate({left:-$targetul.data('specs').x}, typeof disableanimate!="undefined"? 0 : this.speed)}

ddm.prototype.back=function(){if (this.currentul>0){var order=this.$uls.eq(this.currentul).parents('ul:eq(0)').data('specs').order
		this.slidemenu(order)}}

ddm.prototype.updatenav=function($, endorder){var $currentul=this.$uls.eq(endorder)
if (this.navdivs.$crumb.length==1){var $crumb=this.navdivs.$crumb.empty()
if (endorder>0){var crumbhtml=''
while ($currentul && $currentul.data('specs').order>=0){crumbhtml=' <img src="'+this.breadcrumbarrow+'" /> <a href="#nav" rel="'+$currentul.data('specs').order+'">'+$currentul.data('specs').title+'</a>'+crumbhtml
$currentul=($currentul.data('specs').order>0)? this.$uls.eq($currentul.data('specs').parentorder) : null}$crumb.append(crumbhtml).find('img:eq(0)').remove().end().find('a:last').replaceWith(this.$uls.eq(endorder).data('specs').title)}else{$crumb.append(this.homecrumbtext);}}if (this.navdivs.$backbuttons.length>0){if	(!/Safari/i.test(navigator.userAgent))
this.navdivs.$backbuttons.css((endorder>0)? {opacity:1, cursor:'pointer'} : {opacity:0.5, cursor:'default'})}}

ddm.prototype.uninit=function(){	if (this.persist.enable)
		ddm.routines.setCookie(this.menuid, this.currentul)}

ddm.routines={getCookie:function(Name){var re=new RegExp(Name+"=[^;]*", "i");
		if (document.cookie.match(re))
			return document.cookie.match(re)[0].split("=")[1]
		return null},

	setCookie:function(name, value){document.cookie = name+"="+value+"; path=/";}
}
