// create namespace
var Dvintage = new Object();

// debug function.
function c(text) {
	return;
	if(document.all || Prototype.Browser.WebKit) {
	var ttt = document.createElement('span');
	if(typeof text!='number')
		ttt.innerHTML = text.inspect().escapeHTML()  + ' | ';
	else
		ttt.innerHTML = text  + ' | ';
	document.body.insertBefore(ttt, $('main'))

//	document.body.appendChild(ttt);
}
else console.log(text);}


// Add mouse wheel support to prototype
Object.extend(Event, {
        wheel:function (event){
                var delta = 0;
                if (!event) event = window.event;
                if (event.wheelDelta) {
                        delta = event.wheelDelta/120;
                        if (window.opera) delta = -delta;
                } else if (event.detail) { delta = -event.detail/3;}
                return delta; //Safari Round
        }
});


// Method for determining shop's channel. Currently only women and kids.
Dvintage.Channel = Class.create({
	initialize: function(){
		// fixed this. in some cases, calling methods are faster than this init.
		//document.observe('dom:loaded', this._init.bind(this));
	},
	_init: function(){
		var channel = $(document.body).readAttribute('class');
		this.channel = (channel==null || channel=='' || channel=='website')? 'women':channel;

        var domain = $('sitedomain').readAttribute('class');
        this.domain = (domain==null || domain=='')? 'designer-vintage.com':domain;
	},
	isWomen: function(){
		this._init();
		return this.channel == 'women';
	},
	isKids: function(){
		this._init();
		return this.channel == 'kids';		
	},
	isFashion: function(){
		this._init();
		return this.channel == 'fashion';		
	},
	getChannel: function(){
		this._init();
		return this.channel;
	},

    getDomain: function(){
		this._init();
		return this.domain;
	}

})
Dvintage.channel = new Dvintage.Channel();

Dvintage.currencyToSymbol = function (value) {
	var currency = '&yen;';
	if (value=='EUR')
		currency = '&euro;';
	if (value=='USD')
		currency = '$';
	return currency;
}

Dvintage.facetdrawer = function () {
	var facetdrawer = $('facetdrawer');

	var facets = $('facets');
	var isOpen = false;
	var inProgress = false;
	
	var open = function(){
		if (isOpen) return;

	        facetdrawer.setStyle({padding:'4px',height:'135px',visibility:'visible'});
			isOpen = true;
			if (typeof Dvintage.advertisements != 'undefined')
				Dvintage.advertisements.scrollbar.reset();
        
	}

	var close = function(){
		if (!isOpen) return;
			facetdrawer.setStyle({height:0, padding:0, visibility:'hidden'});
			isOpen = false;
			Dvintage.advertisements.scrollbar.reset();
	}

	if (Dvintage.cookieForLoadLastRequest.isset() && (location.pathname=='/index.html')) {
		if ($('editorial'))
			$('editorial').remove();
		open();
	}
	
	// Prevent event bubbling on search box triggering facetdrawer.open()
	/* We currently need this behavior to redirect users to the homepage if they want to search
	 * Searching on other pages does not work, unfortunately.
	$('searchbar').observe('click', function(e) {
		Event.stop(e);
	});
	*/

	if (facetdrawer) {
		
	facets.observe('click', function(){
		open();
	});
		
		
		var closeButton = new Element('div', {className:'highlighted'}).setStyle({
			bottom: '5px',
			cursor: 'pointer',
			position: 'absolute',
			right: '5px',
			textTransform: 'uppercase'
		}).update('close');
		closeButton.observe('click', close);
		facetdrawer.insert(closeButton);
	} else {
		Dvintage.cookieForLoadLastRequest.set(facets);		
	}
}


/* Dvintage.Radioinput
 *
 * takes this structured DOM as input, and add's clickevent and hidden input.
 *
 * <span class="dvintageradio" name="myradio">
 *	<span value="EUR">EUR</span> |
 *	<span value="USD">USD</span> |
 *	<span value="YEN">JPY</span>
 * </span>
 *
 *--------------------------------------------------------------------------*/
Dvintage.Radioinput = Class.create({
    initialize: function(topelement){
		this.options = Object.extend({
      		insertNodes: null
		}, arguments[1] || {});
		
		if (this.options.insertNodes) {
			var node = this.options.insertNodes;
			var topNode = new Element('span').addClassName('dvintageradio').writeAttribute('name', node.name);
			if (node.id) {
				topNode.writeAttribute('id', node.id);
			}
			topelement.insert(topNode)
			node.childNodes.each(function(obj, indx){
				var span = new Element('span', {value:obj.value}).update(obj.html);
				topNode.insert(span);
				if (indx < node.childNodes.length - 1)
					topNode.insert({bottom:'&nbsp;|&nbsp;'});
			})
			this.topelement = topNode;			
		} else {
			this.topelement = topelement;		
		}
		
		this.radioelements = this.topelement.descendants();
		this.inputelement = new Element('input', {type:'hidden',post:'true',name:this.topelement.getAttribute('name')})
		this.activeelement = null;
		this.cb = null;
		
		this.topelement.insert({after:this.inputelement})
		// attach eventhandler
		this.radioelements.each(function(elem){
			elem.observe('click', this._handleclick.bind(this));
			elem.observe('custom:click', this._handleclick.bind(this));
		}.bind(this))
	},
	_changeValue: function (element) {
		if (this.activeelement==element)
			return;
		element.addClassName('dvintageradioselected');
		this.inputelement.value = element.getAttribute('value');
		
		// Manually fire onchange event. Every eventhandler should also listen to custom:change
		// Info: http://www.howtocreate.co.uk/tutorials/javascript/domevents
		this.inputelement.fire('custom:change');
		
		if (this.activeelement) {
			this.activeelement.removeClassName('dvintageradioselected');
		}
		
		this.activeelement = element;
		
		// is there an callback?
		if (this.cb) {
			this.cb(element.getAttribute('value'));
		}
		
	},
	_handleclick: function(evt){
		var element = evt.element();
		this._changeValue(element);
	},
	setValue: function (val) {
		var element;
		this.radioelements.each(function(radio){if (radio.readAttribute('value') == val) element=radio});
		element.fire('custom:click');
	},
	setValueByIndex: function (nr) {
		var element = this.radioelements[nr];
		element.fire('custom:click'); 
	},
	getValue: function () {
		return (this.activeelement)? this.activeelement.readAttribute('value'):'';
	},
	setCallBack: function (cb) {
		this.cb = cb;
	}
})


Dvintage.sortCategoriesCompareFunction = function (a,b) {
    var aNme = a.name; var bNme = b.name;
	var fixedOrder = ['/category.clothing/*','/category.shoes/*','/category.bags/*','/category.accessories/*'];
	if (fixedOrder.indexOf(aNme) == -1 && fixedOrder.indexOf(bNme) == -1)
		return 0;
	if (fixedOrder.indexOf(aNme) == -1)
		return -1;
	if (fixedOrder.indexOf(bNme) == -1)
		return 1;
	if (fixedOrder.indexOf(aNme) > fixedOrder.indexOf(bNme))
		return 1;
	if (fixedOrder.indexOf(aNme) < fixedOrder.indexOf(bNme))
		return -1;
}
Dvintage.sortCategories = function (categories) {
	var sortedCategories = categories.sort(Dvintage.sortCategoriesCompareFunction);
	return sortedCategories;
}


Dvintage.cats2cat = function(cats) {
	switch (cats) {
		case 'Coats':
			return 'Coat';
			break;
		case 'Dresses':
			return 'Dress';
			break;
		case 'Suits':
			return 'Suit';
			break;
		case 'Evening Dresses':
			return 'Evening Dress';
			break;
		case 'Jackets':
			return 'Jacket';
			break;
		case 'Skirts':
			return 'Skirt';
			break;
		case 'Tops':
			return 'Top';
			break;
		case 'Bags':
			return 'Bag';
			break;
		case 'Clutches':
			return 'Clutch';
			break;
		case 'Shoulder Bags':
			return 'Shoulder Bag';
			break;
		case 'Handbags':
			return 'Handbag';
			break;
		case 'Totes':
			return 'Tote';
			break;
		case 'Belts':
			return 'Belt';
			break;
		case 'Scarves':
			return 'Scarf';
			break;
     case 'Watches':
            return 'Watch';
            break;
        default:
			return cats;
	}
}

Dvintage.customColorThumbnails = ['trans','gold','silver','multi','blackwhite'];

Dvintage.goButton = function () {
	var setButtonBasedOnValue = function () {
		if ($('search').value == '') {
			$('go').setStyle({
				opacity: '.3'
			})
		} else {
			$('go').setStyle({
				opacity: '1'
			})
		}
	}
	setButtonBasedOnValue();
	$('search').observe('keyup', setButtonBasedOnValue);
	
}


Dvintage.HandleScrollBars = function () {
	this.getScrollBar = function(sb){
		return null;
	}
	
	this.init = function(){
		
	}
	
} 
Dvintage.handleScrollBars = new Dvintage.HandleScrollBars;
Event.observe(window, 'resize', function(){Dvintage.handleScrollBars.init()});

Dvintage.CurrencySwitcher = Class.create({
	initialize: function(){
		var dom = $('currencypicker');
		this.jar = new CookieJar({path: '/'});
		if (!this.jar.get('currency')) {
			this.jar.put('currency', 'EUR');
		}
		var radio = new Dvintage.Radioinput(dom);
		radio.setCallBack(this.update.bind(this));
		radio.setValue(this.jar.get('currency'));
	},

	update:function(curr){
		if (!curr) {
			var curr = this.jar.get('currency');
		}
		this.jar.put('currency', curr);
		$$('div[pricecurrency]').each(function(node){
			if (node.readAttribute('pricecurrency') == curr) 
				node.show();
			else 
				node.hide();
		})

    }
})



Dvintage.CookieForLoadLastRequest = Class.create ({
	initialize: function() {
		this.jar = new CookieJar({path: '/'});
	},
	set: function(aDomNode) {
		if (aDomNode) {
			var href = aDomNode.readAttribute('href');
			aDomNode.removeAttribute('href');
			aDomNode.observe('click', function(){
				this.jar.put('loadLastRequest', true);
				location.href = href
			}.bind(this))
			aDomNode.setStyle({
				cursor: 'pointer'
			});
		}
	},
	setLastRequest: function (request) {
		this.jar.put('lastRequest', request);
		this.jar.put('loadLastRequest', true);
	},
	unset: function() {
		this.jar.put('loadLastRequest', false);	
	},
	isset: function() {
		var value;
		if (this.jar.get('loadLastRequest') == null) {
			value = false;
		}
		else {
			value = (this.jar.get('loadLastRequest') == 'false') ? false : true;
		}
//		alert(value)
		return value;
	}
})
Dvintage.cookieForLoadLastRequest = new Dvintage.CookieForLoadLastRequest();


Dvintage.subscribetonewsletterSubmitter = function () {
	var parent = $('subscribetonewsletter');
	var input = parent.down('input');
	var form = parent.down('form');
	var button = parent.down('div');
	var hasRecievedFocus = false;
	
	form.writeAttribute('onsubmit', 'return false;');
	
	var handleComplete = function(){
		input.setStyle({width:'160px'});
		input.value='Thanks!';
        input.readOnly=true;
		button.hide();
	}
	
	var handleClick = function(){
		if (!input.value.match(/^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/)) {
			input.value='Enter valid email';
		}
		else {
			form.request({onComplete:handleComplete})
		}

	}

	var handleFocus = function(){
		
		if (!hasRecievedFocus) {
			
			hasRecievedFocus = true;
			input.value = '';
			input.setStyle({color:'#000'});
	
		}
		
	}

	button.observe('click', handleClick);
	form.observe('submit', handleClick);
	input.observe('focus', handleFocus);


}

/* by Justus - search-input GUI functionality */
Dvintage.searchSubmitter = function () {
	var input = $('search');
		
	var handleClick = function () {
		if (input.value == 'search'){
			input.value = '';
		}
		input.setStyle({color:'#000'});
	}
	
	var handleBlur = function () {
		if (input.value == ''){
			input.value = 'search';
			input.setStyle({color:'#aaa'});
		}
	}
	input.observe('click', handleClick);
	input.observe('blur', handleBlur);
	
}

Dvintage.Messages = Class.create({
    initialize: function(parentNode, messages, thumbnailsrc, ajaxUrl, username){
         this.parentNode = parentNode;
		 this.messages = messages;
		 this.thumbnailsrc = thumbnailsrc;
		 this.ajaxUrl = ajaxUrl;
         this.username = username;
         this.callbacks = {};
    },
	_retrieveMessage: function(id){
		new Ajax.Request(this.ajaxUrl + '=' + id, {
			onSuccess: this._renderMessage.bind(this)
		})
	},
	_getReadyForReplyForm: function (msgObject) {
		$$('.singlemessage').invoke('remove');
		this._renderReplyForm(msgObject);
	},
	_renderReplyForm: function(msgObject) {
        
        var template = new Template('<div class="closebutton">close</div><img src="' + this.thumbnailsrc + '"/><form id="sendmessageforadvertisment" method="post" action="./sendReplyMessage.html"><input type="hidden" id="messageId" name="messageId" value="#{id}" /><label id="subjectlabel">Subject</label><input type="text" id="subject" name="subject" value="RE: #{subject}" readonly /><label id="fromlabel">From</label><span>#{from_username}</span><textarea id="body" name="body"/>\n\n\n\n-------- Original Message --------\n\n'+msgObject.body+'</textarea><div class="smallbutton2">Send</div></form>');
		var html = template.evaluate(msgObject);
		var replyformdiv = new Element('div', {id:'sendreplyform', className:'contactform'});
		replyformdiv.update(html);
		$('whiteboard').insert(replyformdiv);
		
		// lame, but wait a bit for rendering
		setTimeout(function(){Dvintage.handleScrollBars.init();}, 50);
		
		$('sendreplyform').down('.smallbutton2').observe('click', this._sendReplyForm.bind(this))
		$('sendreplyform').down('.closebutton').observe('click', function(){$('sendreplyform').remove();this._removeMessage();}.bind(this))
	},
	_sendReplyForm: function(){
		var form = $('sendreplyform').down('form');
		
		var onCompleteFunction = function(){
			$('sendreplyform').remove()
			var message = new Dvintage.Message($('whiteboard'));
			this._removeMessage();
			message.setMessage('send');
			message.show();
		}.bind(this)
		
		form.request({onComplete:onCompleteFunction});
	},
	_renderMessage: function(transport){
		var template = new Template('<div id="singlemessagesubjectline"><label>Subject</label><span>:</span><div>#{subject}</div><a>close</a></div><div id="singlemessagefromline"><label>from</label><span>:</span><div>#{from_username}</div></div><div id="singlemessagedateline"><label>date</label><span>:</span><div>#{senton}</div></div><div class="smallbutton2" style="top:6px;">reply</div><div id="singlemessagemessage">#{bodyAsHtml}</div><div class="smallbutton2">reply</div>');
		var msgObject = transport.responseText.evalJSON();
		var render = template.evaluate(msgObject);		
		var msgNode = new Element('div').addClassName('singlemessage').update(render);
		$('whiteboard').insert(msgNode);
		
		// lame, but wait a bit for rendering
		setTimeout(function(){Dvintage.handleScrollBars.init();}, 50);
				
		$('content').down('.singlemessage a').observe('click', this._removeMessage.bind(this));
		$('content').down('.singlemessage .smallbutton2').observe('click', function(){this._getReadyForReplyForm(msgObject)}.bind(this));
        $('content').down('.singlemessage .smallbutton2',1).observe('click', function(){this._getReadyForReplyForm(msgObject)}.bind(this));
		if (this.callbacks['renderMessage']) {
			this.callbacks['renderMessage']();
		}
	},
	_removeMessage: function(){
		$$('.singlemessage').invoke('remove');
		if (this.callbacks['removeMessage']) {
			this.callbacks['removeMessage']();
		}
		// lame, but wait a bit for rendering
		setTimeout(function(){Dvintage.handleScrollBars.init();}, 50);
	},
	_remove: function() {
		$$('.messagesrow').invoke('remove');
		if (this.callbacks['remove']) {
			this.callbacks['remove']();
		}
	},

    _deleteMessage: function(id){
            new Ajax.Request(Subsite.baseHref + 'ajax/profile/myads.html?deletemessage&id' + '=' + id, {});
    },
	render: function(){
		this._remove();
		var row = new Element('tr').addClassName('messagesrow');

        var inbox = '<tr>' +
                              '<td class="messages_cell_from">#{from}</td>' +
                              '<td class="messages_cell_from">#{to}</td>' +
                              '<td class="messages_cell_subject">#{subject}</td>' +
                              '<td class="messages_cell_date">#{date}</td>' +
                              '<td class="messages_cell_delete">delete&nbsp;&nbsp;</td>' +
                              '</tr>';
        var sent = '<tr>' +
                              '<td class="messages_cell_from">#{from}</td>' +
                              '<td class="messages_cell_from">#{to}</td>' +
                              '<td class="messages_cell_subject">#{subject}</td>' +
                              '<td class="messages_cell_date">#{date}</td>' +
                              '<td>&nbsp;</td>' +
                              '</tr>';
        var inboxTemplate = new Template(inbox);
        var sentTemplate = new Template(sent);
		var td = new Element('td', {colspan:'8', className:'messagescell'})
		row.insert(td)
		this.parentNode.insert({after:row})

		var table = new Element('table', {cellspacing:'0', cellpadding:'0'}).addClassName('messages').update('<thead><tr class="messages_headers"><td class="messages_cell_from">from</td><td class="messages_cell_from">to</td><td class="messages_cell_subject">subject</td><td>date</td><td>&nbsp;</td></tr></thead><tbody></tbody>');
		td.insert(table);

        var removeAreYouShureNode = function(){
            var theareyousurenode;
            if (theareyousurenode = $('theareyousurenode')) {
                var td = theareyousurenode.up('td');
                theareyousurenode.remove();
                //td.select('*').invoke('show');
            }
        }

        var askRemoveMsgAction = function(evt, msgid){

            removeAreYouShureNode();

            var removebutton = evt.element();
            var td = removebutton.up('td');
            var row = removebutton.up('tr');
            //var adid = row.readAttribute('adid');
                    
            removebutton.update();

            var areYouShureNode = new Element('span', {id:'theareyousurenode'}).setStyle({fontWeight:'normal'}).update('SURE?&nbsp;&nbsp;');

            var DoRemoveAdAction = function(value, id){
                if(value=='true') {
                    new Ajax.Request( Subsite.baseHref +  'ajax/profile/myads.html?deletemessage&id' + '=' + msgid, {});
                    var tbody = row.up('tbody');
                    Effect.Fade(row);
                    c(tbody.hasChildNodes());
                } else {
                    removeAreYouShureNode();
                    removebutton.update("Delete&nbsp;&nbsp;");
                }
            }
            var insertAsRadio = {
                name:msgid,
                childNodes: [{value:'true',html:'yes'}, {value:'false',html:'no'}]
            }
            var requestRadio = new Dvintage.Radioinput(areYouShureNode,{insertNodes:insertAsRadio});
            requestRadio.setCallBack(DoRemoveAdAction);

            removebutton.appendChild(areYouShureNode);
        }



        var doRender = function(msg) {
            this.canDelete = (this.username != msg.from);

            var render = (this.username == msg.from ? sentTemplate.evaluate(msg):inboxTemplate.evaluate(msg));
			table.down('tbody').insert(render);
			table.down('tbody tr:last-child').observe('click', function(evt){
				var element = evt.element();
				if (element.hasClassName('messages_cell_delete')) {
					askRemoveMsgAction(evt, msg.id);
				} else {
					this._retrieveMessage(msg.id)					
				}
			}.bind(this))
		}.bind(this)


        this.messages.each(doRender);
		if (this.callbacks['render']) {
			this.callbacks['render']();
		}
		
	},
	observe: function (event, callback) {
		this.callbacks[event] = callback;
	}
})


Dvintage.AreYouSureRequester = Class.create({
	initialize:function(){
	
	},
	setNode: function(node){
		this.node = node;
	},
	setCallBack: function(callBack){
		this.callBack = callBack;
	},
	_remove: function() {
		var theareyousurenode;
		if (theareyousurenode = $('theareyousurenode')) {
			var parent = theareyousurenode.up();
			theareyousurenode.remove();
			parent.select('*').invoke('show');
		}		
	},
	show: function(){
		this._remove();	/* just to be sure  */
		this.node.select('*').invoke('hide')		
		var areYouShureNode = new Element('span', {id:'theareyousurenode'}).setStyle({fontWeight:'normal'}).update('ARE YOU SURE?&nbsp;&nbsp;');
		
		var doAction = function(value) {
			if(value=='true') {
				this.callBack();
			} else {
				this._remove();
			}
		}.bind(this)
	
		var insertAsRadio = {
			name:'areyoushure',
			childNodes: [{value:'true',html:'yes'}, {value:'false',html:'no'}]
		}
		
		var requestRadio = new Dvintage.Radioinput(areYouShureNode,{insertNodes:insertAsRadio});
		requestRadio.setCallBack(doAction);
		this.node.insert(areYouShureNode);
	}
	
})



Dvintage.TaskSchedular = Class.create({
	initialize:function(){
		this.haltExecution = false;
		this.functions = [
			function(){Dvintage.handleScrollBars.init()}
		]
		this._wireOnDomLoaded();
	},
	_fireAll:function(){
		if (!this.haltExecution) {
			this.functions.each(function(func){
				func();
			})
		}
	},
	_wireOnDomLoaded:function(){
		document.observe('dom:loaded', this._fireAll.bind(this))
	},
	registerFunction:function(func) {
		this.functions.push(func);
	},
	setHaltExecution:function() {
		this.haltExecution = true;
	},
	
	fireAll:function() {
		this.functions.each(function(func){
			func();
		})
	}
})
Dvintage.taskSchedular = new Dvintage.TaskSchedular();




function roundNumber(number,decimals) {
	var newString;// The new rounded number
	decimals = Number(decimals);
	if (decimals < 1) {
		newString = (Math.round(number)).toString();
	} else {
		var numString = number.toString();
		if (numString.lastIndexOf(".") == -1) {// If there is no decimal point
			numString += ".";// give it one at the end
		}
		var cutoff = numString.lastIndexOf(".") + decimals;// The point at which to truncate the number
		var d1 = Number(numString.substring(cutoff,cutoff+1));// The value of the last decimal place that we'll end up with
		var d2 = Number(numString.substring(cutoff+1,cutoff+2));// The next decimal, after the last one we want
		if (d2 >= 5) {// Do we need to round up at all? If not, the string will just be truncated
			if (d1 == 9 && cutoff > 0) {// If the last digit is 9, find a new cutoff point
				while (cutoff > 0 && (d1 == 9 || isNaN(d1))) {
					if (d1 != ".") {
						cutoff -= 1;
						d1 = Number(numString.substring(cutoff,cutoff+1));
					} else {
						cutoff -= 1;
					}
				}
			}
			d1 += 1;
		} 
		newString = numString.substring(0,cutoff) + d1.toString();
	}
	if (newString.lastIndexOf(".") == -1) {// Do this again, to the new string
		newString += ".";
	}
	var decs = (newString.substring(newString.lastIndexOf(".")+1)).length;
	for(var i=0;i<decimals-decs;i++) newString += "0";
	//var newNumber = Number(newString);// make it a number if you like
	return newString;
}







document.observe('dom:loaded', function () {
	Dvintage.facetdrawer();
	Dvintage.currencySwitcher = new Dvintage.CurrencySwitcher();
	Dvintage.subscribetonewsletterSubmitter();
	Dvintage.searchSubmitter();

	Event.observe($('return-to-top'), "click", function(event) {
		$('main').scrollTo();
		event.stop();
	});
    
	// Create placeholder for banner at the top
	if (typeof(sytListsFavoriteBanner) != "undefined" || (typeof(leaderBordBanners) != "undefined" && leaderBordBanners.length > 0)) {
		$$('body')[0].insert({top: "<div id='banner-placeholder'></div>"});
		
        $$('.greybar').each(function(el){
            el.addClassName('greybar-with-banner');
        });
	}
    
    if (typeof(leaderBordBanners) != "undefined" && leaderBordBanners.length > 0) {
        $('banner-placeholder').insert({top: "<a href='" + leaderBordBanners[0].url + "' id='rotating-banner-link' target='_blank'><img id='rotating-banner' src='" + leaderBordBanners[0].image + "' /></a>"});
        if(leaderBordBanners.length > 1) {
            var adIdx = 1;
            setInterval(function() {
                $('rotating-banner-link').href = leaderBordBanners[adIdx].url;
                $('rotating-banner').src = leaderBordBanners[adIdx].image;
                adIdx = (adIdx + 1) % leaderBordBanners.length;
            }, 10000);
        }
    }
    
    if (typeof(sytListsFavoriteBanner) != "undefined") {
    	$('banner-placeholder').insert({top: "<a href='" + sytListsFavoriteBanner.url + "' id='stylist-banner-link'><img id='stylist-banner' src='" + sytListsFavoriteBanner.image + "' /></a>"});
    }
})

function clickLink(link){
	link = Subsite.baseHref + link;
	location.href = link;
	return false;
}

Dvintage.CountDownLatch = Class.create({
    initialize: function(count, onComplete){
        this.count = count;
        this.onComplete = onComplete;
    },

    countDown: function() {
        this.count--;
        if (this.count <= 0) {
            this.onComplete();
        }
    }
});
