ZeroClipboard.setMoviePath('/swf/ZeroClipboard.swf');

window.op_embed = {
	init: function(options) {
		if(!options)
			this.options = {
				color: '#61B4EF',
				width: 200,
				maxWidth: 300,
				minWidth: 175
			}
		else
			this.options = options;
		
		this.elems.input.onclick = this.elems.card_input.onclick = function() {
			this.select();
		}
		
		this.elems.copy.onclick = this.elems.card_copy.onclick = function() {
			return false;
		}
		
		this.elems.toggle.onclick = function() {
			var show = this.className!='active';
			if(show) {
				$(op_embed.elems.settings).css({display:'block',opacity:0}).animate({opacity:1});
				op_embed.elems.iframe.style.marginLeft = 'auto';
				this.className = 'active';
			}
			else {
				op_embed.elems.settings.style.display = 'none';
				//Fix for weird Chrome bug:
				op_embed.elems.iframe.style.marginLeft = ($(op_embed.elems.iframe).parent().width()-parseInt(op_embed.elems.iframe.style.width))/2+'px';
				this.className = '';
			}
		}
		
		$(this.elems.color).ColorPicker({
			color: '000000',
			onChange: function(hsb, hex, rgb) {
				op_embed.options.color = '#'+hex;
				op_embed.update();
			}
		});
		
		this.elems.width.onmousedown = function(e) {
			op_embed.slide = true;
			op_embed.slideStart = e.pageX;
			op_embed.slideValue = parseInt(this.innerHTML);
			
			op_embed.slideFunc = function(e) {
				var newval = op_embed.slideValue + e.pageX - op_embed.slideStart;
				if(newval<op_embed.options.minWidth)
					newval = op_embed.options.minWidth;
				else if(newval>op_embed.options.maxWidth)
					newval = op_embed.options.maxWidth;
				
				op_embed.elems.width.innerHTML = newval;
				op_embed.options.width = newval;
				op_embed.update();
			}
			op_embed.slideFuncKill = function() {
				delete op_embed.slide;
				document.body.removeEventListener('mousemove', op_embed.slideFunc, false);
			}
			
			document.body.addEventListener('mousemove', op_embed.slideFunc, false);
			
			return false;
		}
		document.body.onclick = function() {
			if(op_embed.slide)
				op_embed.slideFuncKill();
		}
		document.body.onmouseup = function() {
			if(op_embed.slide)
				op_embed.slideFuncKill();
		}
		
		/*this.elems.width.onkeydown = function(e) {
			var k = e.keyCode;
			if(k==37 || k==38 || k==39 || k==40) {
				var newval = parseInt(op_embed.elems.width.innerHTML);
				if(k==37 || k==40)
					newval--;
				if(k==38 || k==39)
					newval++;
				
				if(newval<op_embed.options.minWidth)
					newval = op_embed.options.minWidth;
				else if(newval>op_embed.options.maxWidth)
					newval = op_embed.options.maxWidth;
				
				op_embed.elems.width.innerHTML = newval;
				op_embed.options.width = newval;
				op_embed.update();
			}
			else
				return false;
		}*/
		
		if(!this.clip)
		{
			this.clip = new ZeroClipboard.Client();
			this.clip.glue(this.elems.copy.id);
			this.clip.addEventListener('onComplete', function(){
				op_embed.elems.copy.innerHTML = 'Copied!';
			});
		}
		else
		{
			this.clip.glue(this.elems.copy.id);
			this.clip.show();
		}
		
		if(!this.clip_card)
		{
			this.clip_card = new ZeroClipboard.Client();
			this.clip_card.glue(this.elems.card_copy.id);
			this.clip_card.setText(this.elems.card_input.value);
			this.clip_card.addEventListener('onComplete', function(){
				op_embed.elems.card_copy.innerHTML = 'Copied!';
			});
		}
		else
		{
			this.clip_card.glue(this.elems.card_copy.id);
			this.clip_card.show();
		}
		
		$(window).hashchange(function(){
			op_embed.clip.hide();
			op_embed.clip_card.hide();
		});
		
		this.update();
	},
	update: function() {
		this.elems.color.style.background = this.options.color;
		this.elems.iframe.src = widget_url+this.options.color;
		this.elems.iframe.style.width = this.options.width+'px';
		this.elems.input.value = '<iframe src="'+widget_url+this.options.color+'" frameborder="0" allowtransparency="yes" width="'+this.options.width+'" height="70"></iframe><br /><a href="'+base_url+username+'">'+name+'</a> on <a href="'+base_url+'">OnePage: Interactive Contact Cards</a>.';
		this.clip.setText(this.elems.input.value);
	}
};
