﻿function from_bookmarklet() {
	if(location.search.match(/\?u=(.+)/)){
    	$('flickr-uri').value = RegExp.$1;
    }
}
Event.observe(window, 'load', from_bookmarklet);

/** resolve user name to flickr user ID **/
function show_error(what, msg) {
	$('flickr-'+what+'-error').innerHTML = msg.escapeHTML();
}

function name2id(username) {
	show_error('uri', _['MESSAGE_RESOLVING_USERNAME']);
	var	ajax = new Ajax.Request(
		'/api/name2id.py', {
			method:	"GET",
			parameters:	{ name: username },
			onSuccess: function(transport) {
				show_error('uri', '');
				$('flickr-uri').value = 'http://www.flickr.com/photos/'+transport.responseText;
				setTimeout(function() {
					$('flickr-display').click();
				}, 0);
			},
			onFailure: function(transport) {
				show_error('uri', _['MESSAGE_NAME2ID_FAILED']);
			}
		}
	);
	return undefined;
}

/** widget building **/
function get_params() {
	// check url
	var	ok = true;
	var	result = {};
	var	flashvar = "tag=rainbow";

	size = $A(['width', 'height']).map(function(what) {
		var	val = parseInt($('flickr-'+what).value);
		if(!val) {
			ok = false;
			show_error(what, _['ERROR_MUST_BE_A_NUMBER']);
		}
		return val;
	});

	flashvar = get_flashvar();
	if(!flashvar)
		ok = false;
	
	return {
		ok:	ok,
		flashvar: flashvar,
		size: size
	};
}

function get_flashvar() {
	var	uri = $('flickr-uri').value;
	if(uri.match(/http:\/\/(www\.|)flickr\.com\/photos\//)){
		uri = RegExp.rightContext;
	} else {
		$('flickr-uri-error').innerHTML = _['ERROR_NOT_A_FLICKR_URI'];
		return;
	}

	if(uri.match(/tags\/([^\/]+)\/?/)) {				// tag
		return 'tag='+RegExp.$1;
	} else if(uri.match(/[^\/]+\/sets\/([^\/]+)\/?/)) {	// photo set
		return 'sets='+RegExp.$1;
	} else if(uri.match(/([^\/]+)\/?/)) {				// user
		var	username = RegExp.$1;
		
		if(!username.match(/[0-9]+@.*/)) {
			// resolve userID
			name2id(username);
			return undefined;
		}
		
		return 'user='+username;
	}
	
	$('flickr-uri-error').innerHTML = _['ERROR_NON_SUPPORTED_FLICKR_URI'];
	return undefined;
}

var WIDGET_SCRIPT = new Template(
'<script type="text/javascript">flows_style = {' +
'\tflashvar: "#{flashvar}",' +
'\twidth: #{width},' +
'\theight: #{height}'+
'}</script>' +
'<script type="text/javascript"src="http://flickrflow.com/js/flickrflow.js?#{id}"></script>'
);
var FLASH_TEMPLATE = new Template('<object id="flickrFlow" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="#{width}" height="#{height}" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"><param name="movie" value="flickrFlow.swf?1" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="wmode" value="transparent"/><param name="flashVars" value="#{flashvar}" /><embed src="flickrFlow.swf?1" name="flickrFlow" quality="high" bgcolor="#FFFFFF" width="#{width}" height="#{height}" align="middle" play="true" loop="false" quality="high" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" flashVars="#{flashvar}"></embed></object>');
function display() {
	/// get parameters
	var	params = get_params();

	if(!params['ok']) {
		// invalid param
		return;
	}
	
	$A(['uri', 'width', 'height']).each(function(what) {
		show_error(what, '');
		$('flickr-'+what).blur();
	});

	/// show preview
	show_preview(params['flashvar'], params['size']);
}

/** generate user specific id **/
function gen_id() {
	var	id = (new Date()).getTime()+'';
	id.replace('.', '_');
	return id;
}

/** preview interface **/
function show_preview(flashvar, size) {
	var	params = {
		flashvar:	flashvar,
		width:	size[0],
		height:	size[1],
		id:		gen_id()
	};
	$('preview-flow-inner').innerHTML = FLASH_TEMPLATE.evaluate(params);
	$('code-area').innerHTML = WIDGET_SCRIPT.evaluate(params).escapeHTML();

	Element.hide($('flickrflow-example').getElementsByTagName('DIV')[0]);
	$('psb-transparent').click();
	$('preview').show();
	$('tool').setOpacity(0.2);
	
	if(Prototype.Browser.IE) {
		if(navigator.userAgent.match(/MSIE 6\.0/)) {
			// is IE6
			var	width = $('container').clientWidth || $('container').scrollWidth;
			$('preview').setStyle({width: width+'px'});
		}
	}
}

function close_preview() {
	$('preview').hide();
	$('tool').setOpacity(1);
	Element.show($('flickrflow-example').getElementsByTagName('DIV')[0]);
}

function select_code() {
	$('code-area').select();
}

function init_preview_radio() {
	$A($('preivew-select-background').getElementsByTagName('input')).each(function(node){
		Event.observe(node, 'click', select_background.bindAsEventListener());
	});
}
Event.observe(window, 'load', init_preview_radio);

function select_background(event) {
	var	color = Event.element(event).value;
	$('preview-flow-inner').className = 'pb-'+color;
}
