(function($){ $.fn.OpenID = function(method){ var $this = this; var settings = { conteiner: $this, helper: $('sup.openid-help > *'), providers: { openid : { name : 'OpenID', label : 'Введите ваш OpenID.', url : '{username}' }, myopenid : { name : 'MyOpenID', label : 'Введите ваше имя пользователя на MyOpenID.', url : 'http://{username}.myopenid.com/' }, vkontakte : { name : 'ВКонтакте', url : 'http://vkontakteid.ru/' }, yandex : { name : 'Яндекс', url : 'http://openid.yandex.ru' }, mailru : { name : 'Mail.ru', label: 'Введите ваш email.', url : 'http://{username}' }, /*rambler : { name : 'Рамблер', url : 'http://www.rambler.ru' },*/ google : { name : 'Google', url : 'https://www.google.com/accounts/o8/id' }, yahoo : { name : 'Yahoo', url : 'http://me.yahoo.com/' } }, ico_path: OPTS.URL.STATIC + 'templates/images/openid-ico/{provider}.ico.png', form_action: '/auth/openid', auth_widow: { width: (($(window).width() / 2) > 800 ? ($(window).width() / 2) : 800), height: (($(window).height() / 2) > 449 ? ($(window).height() / 2) : 449), left: function(){return (($(window).width() - settings.auth_widow.width) / 2)}, top: function(){return (($(window).height() - settings.auth_widow.height) / 2)}, menubar: 'no', toolbar: 'no', location: 'no', directories: 'no', status: 'no', resizable: 'no', scrollbars: 'yes' } }; var methods = { init: function(config){ if (config && typeof(config) == 'object') { $.extend(settings, config); } settings.conteiner.html(''); methods.form = settings.conteiner.parents("form"); methods.input_provider = $(''); methods.input_action = $(''); methods.input_box = $('
'); methods.input_username = $('input[name=username]',methods.input_box); methods.input_submit = $('input[type=button]',methods.input_box).bind('click', function(){ var auth_window = window.open(settings.form_action + '?' + methods.form.serialize(), 'auth_window', $.param(settings.auth_widow).split('&').join(',')); auth_window.focus(); // if(auth_window.onclose){ // alert(1); // } //methods.form.unbind('submit'); //methods.form.attr('action', settings.form_action).submit(); return false; }); methods.input_label = $('b',methods.input_box); for(var service in settings.providers){ settings.conteiner.append(methods.makeIco(service)); } var wtf_openid = $('#popup-wtf-openid').Popup(); settings.helper.bind('click',function(){ wtf_openid.Popup('show',{ title:'Что такое OpenID?', content: 'OpenID — это сервис который позволяет вам входить на разные не связанные между собой веб-сайты пользуясь одной учетной записью.
' + 'OpenID можно использовать для регистрации на веб-сайте. Вам не придётся заполнять формы, вводить каптчу (проверочный код с картинки) и проходить по ссылкам из письма для подтверждения регистрации. Вся процедура сокращается до двух кликов: ' + 'выбрать OpenID оператора и разрешить оператору передавать ваши данные на наш веб-сайт.
' }); return false; }); settings.conteiner .append(methods.input_provider) .append(methods.input_action) .append(methods.input_box); }, makeIco: function(service){ var providers = settings.providers; var alt = 'войти с ' + providers[service].name; var src = settings.ico_path.replace('{provider}', service); var ico = $(''); ico.bind('click', function(){ methods.input_provider.val(providers[service].url); if(providers[service].label != undefined){ methods.setProviderUrl(service); methods.input_username.css("background-image", "url(" + src + ")").val(''); methods.input_label.text(providers[service].label); methods.input_box.slideDown(); } else { methods.input_submit.click(); methods.input_box.slideUp(); } return false; }); return ico; }, setProviderUrl: function(service){ var provider = settings.providers[service].url; methods.input_box.keyup(function(event){ var value = methods.input_username.val(); if(value == ''){ methods.input_submit.attr('disabled','disabled'); } else { methods.input_submit.removeAttr('disabled'); } var username; switch (service) { case 'mailru': username = methods.input_username.val().replace('@', '.id.'); break; default: username = methods.input_username.val(); break; } methods.input_provider.val(provider.replace('{username}', username)); }) } } if ( methods[method] ) { return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { $.error( 'Метод ' + method + ' не существует в jQuery.OpenID' ); } return $this; } })(jQuery); $(document).ready(function(){ //$('.openid_container:empty').OpenID(); $('.openid_container:empty').each(function(){ $(this).OpenID(); }); });