/// <reference path="jquery-1.3.2.js" />

/*
Simple OpenID Plugin
http://code.google.com/p/openid-selector/

This code is licenced under the New BSD License.

Customised for DigitallyCreated specifically by Daniel Chambers with inspiration from StackOverflow's version.
*/


var providers_large = {
	myopenid: {
		name: 'MyOpenID',
		label: 'Enter your MyOpenID username',
		url: 'http://{username}.myopenid.com/'
	},
	google: {
		name: 'Google',
		url: 'https://www.google.com/accounts/o8/id'
	},
	yahoo: {
		name: 'Yahoo',
		url: 'http://yahoo.com/'
	},
	aol: {
		name: 'AOL',
		label: 'Enter your AOL screenname',
		url: 'http://openid.aol.com/{username}/'
	}
};
var providers_small = {
    livejournal: {
        name: 'LiveJournal',
        label: 'Enter your Livejournal username',
        url: 'http://{username}.livejournal.com/'
    },
    flickr: {
        name: 'Flickr',        
        label: 'Enter your Flickr username',
        url: 'http://flickr.com/{username}/'
    },
    technorati: {
        name: 'Technorati',
        label: 'Enter your Technorati username',
        url: 'http://technorati.com/people/technorati/{username}/'
    },
    wordpress: {
        name: 'Wordpress',
        label: 'Enter your Wordpress.com username',
        url: 'http://{username}.wordpress.com/'
    },
    blogger: {
        name: 'Blogger',
        label: 'Your Blogger account',
        url: 'http://{username}.blogspot.com/'
    },
    verisign: {
        name: 'Verisign',
        label: 'Your Verisign username',
        url: 'http://{username}.pip.verisignlabs.com/'
    },
    vidoop: {
        name: 'Vidoop',
        label: 'Your Vidoop username',
        url: 'http://{username}.myvidoop.com/'
    },
    verisign: {
        name: 'Verisign',
        label: 'Your Verisign username',
        url: 'http://{username}.pip.verisignlabs.com/'
    },
    claimid: {
        name: 'ClaimID',
        label: 'Your ClaimID username',
        url: 'http://claimid.com/{username}'
    },
	clickpass: {
        name: 'ClickPass',
        label: 'Your ClickPass username',
        url: 'http://clickpass.com/public/{username}'
    }

};
var providers = $.extend({}, providers_large, providers_small);

var openid = {

	cookie_expires: 6 * 30, // 6 months.
	cookie_name: 'openid_provider',
	cookie_path: '/',

	img_path: '../../Content/Images/',

	input_id: null,
	provider_url: null,

	init: function(input_id)
	{

		// turn off hourglass
		$('body').css('cursor', 'default');
		$('#openid_submit').css('cursor', 'default');

		// enable submit button on form
		$('input[type=submit]').removeAttr('disabled');

		var openid_btns = $('#openid_btns');

		this.input_id = input_id;

		$('#openid_choice').show();
		$('#openid_input_area').empty();

		// add box for each provider
		for (id in providers_large)
		{
			openid_btns.append(this.getBoxHTML(providers_large[id], 'large', '.png'));
		}
		if (providers_small)
		{
			openid_btns.append('<br>');
			for (id in providers_small)
			{
				openid_btns.append(this.getBoxHTML(providers_small[id], 'small', '.png'));
			}
		}

		$('#openid_form').submit(this.submitx);

		var box_id = this.readCookie();
		if (box_id)
		{
			this.signin(box_id, true);
		}

		var that = this;
		$("#openid_submit").click(function()
		{
			that.unsetCookie();
		});
	},

	getBoxHTML: function(provider, box_size, image_ext)
	{
		var box_id_unlowered = provider["name"];
		var box_id = box_id_unlowered.toLowerCase();

		return '<a title="' + provider["name"] + '" href="javascript: openid.signin(\'' + box_id + '\');"' +
        		' style="background: #FFF url(' + this.img_path + "OpenID-" + box_id + "Logo" + image_ext + ') no-repeat center center" ' +
        		'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
	},

	/* provider image click */
	signin: function(box_id, onload)
	{

		var provider = providers[box_id];
		if (!provider) { return; }

		this.highlight(box_id);
		this.setCookie(box_id);

		if (box_id == 'openid')
		{
			$('#openid_input_area').empty();
			this.setOpenIdUrl("");
			$("#openid_identifier").focus();
			return;
		}

		// prompt user for input?
		if (provider['label'])
		{
			this.useInputBox(provider);
			this.provider_url = provider['url'];
		}
		else
		{
			$("#openid_input_area").empty();
			this.setOpenIdUrl(provider['url']);
			this.provider_url = null;
			if (!onload)
			{
				$('.' + box_id).css('cursor', 'wait');
				$('#openid_form').submit();
			}
		}
	},

	/* Sign-in button click */
	submitx: function()
	{
		if ($('#openid_username').val() == "") return true;

		// set up hourglass on body
		$('body').css('cursor', 'wait');
		$('#openid_submit').css('cursor', 'wait');
		// disable submit button on form
		$('#openid_form input[type=submit]', this).attr('disabled', 'disabled');

		var url = openid.provider_url;
		if (url)
		{
			url = url.replace('{username}', $('#openid_username').val());
			openid.setOpenIdUrl(url);
		}
		return true;
	},

	setOpenIdUrl: function(url)
	{
		var hidden = $('#' + this.input_id);
		hidden.val(url);
	},

	highlight: function(box_id)
	{

		// remove previous highlight.
		var highlight = $('.openid_highlight');
		if (highlight)
		{
			highlight.removeClass('openid_highlight');
		}
		// add new highlight.
		$('.' + box_id).addClass('openid_highlight');
	},

	setCookie: function(value)
	{

		var date = new Date();
		date.setTime(date.getTime() + (this.cookie_expires * 24 * 60 * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();

		document.cookie = this.cookie_name + "=" + value + expires + "; path=" + this.cookie_path;
	},

	unsetCookie: function()
	{
		var date = new Date();
		date.setTime(date.getTime() - (this.cookie_expires * 24 * 60 * 60 * 1000)); //Expire in the past to force a now expire
		var expires = "; expires=" + date.toGMTString();

		document.cookie = this.cookie_name + "=" + expires + "; path=" + this.cookie_path;
	},

	readCookie: function()
	{
		var nameEQ = this.cookie_name + "=";
		var ca = document.cookie.split(';');
		for (var i = 0; i < ca.length; i++)
		{
			var c = ca[i];
			while (c.charAt(0) == ' ') c = c.substring(1, c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
		}
		return null;
	},

	useInputBox: function(provider)
	{

		var input_area = $('#openid_input_area');

		var html = '';
		var id = 'openid_username';
		var value = '';
		var label = provider['label'];
		var style = '';

		if (label)
		{
			html = '<p class="NoSpacing">' + label + ':</p>';
		}
		html += '<input id="' + id + '" type="text" style="' + style + '" name="' + id + '" value="' + value + '" /> ' +
					'<input id="openid_username_submit" type="submit" value="Sign In"/>';

		input_area.empty();
		input_area.append(html);

		$('#' + id).focus();
	}
};
