jQuery.core = jQuery.extend(jQuery.core, {
  passport:{

    init:function(){
      jQuery('form.passport').live('submit',jQuery.core.passport.event);
      jQuery('a.passport').live('click',jQuery.core.passport.event);
      return false;
    },

    event:function(){
      var events = jQuery(this).attr('class').match(/(open|call)-([^ ]+)/img);
      if(jQuery(this).is('.disabled') || jQuery(this).parents('.disabled').length > 0) return false;
      if(!events || !events.length || events.length == 0) return this;
      for(var key in events){
        var type = (events[key].match(/(open)-([^ ]+)/img)) ? 'open' : 'call';
        var event = events[key].substring(type.length+1);
        if(typeof jQuery.core.passport[type] != 'undefined' && typeof jQuery.core.passport[type][event] == 'function'){
          var result = jQuery.core.passport[type][event](this);
          if(!result) return false;
        }
      };
      return this;
    },

    session:function(){
      if(jQuery(window).data('jQuery.core.passport.session()') != null) return jQuery(window).data('jQuery.core.passport.session()');
      else{
        var session = false;
        jQuery.ajax({
          url:'/passport/session/',
          async:false,
          success:function(response){session=typeof(response)=='object'?response:false;}
        });
        jQuery(window).data('jQuery.core.passport.session()',session);
        return session;
      }
    },

    isset:function(){
      var session = jQuery.core.passport.session();
      return (session && typeof session == 'object' && typeof session.type == 'string' && jQuery.trim(session.type).length > 0 && jQuery.inArray(session.type,['registered','system']) > -1 && jQuery.inArray(session.type,['registered','system']) !== false) ? true : false;
    },

    response:function(o){
      if(typeof o == 'object' && typeof o.getResponseHeader == 'function' && typeof jsonParse == 'function'){
        var response = o.getResponseHeader('Server-Answer') || false;
        if(response) return jsonParse(response);
      }
      return false;
    },

    action:{

      login:{

        success:function(){
          window.location.reload();
        }

      }

    },

    call:{

      nameAvailability:function(e){
        var o = this, e = e || false;
        if(!e) return false;
        var id = jQuery(e).attr('id') || false;
        if(!id || jQuery('.'+id+'-request').length == 0 || jQuery('.'+id+'-response').length == 0) return false;
        jQuery.ajax({
          type:'POST',
          url:'/passport/nameAvailability/',
          data: {'request':jQuery('.'+id+'-request').attr('value')},
          success:function(response){
            jQuery('.'+id+'-response').html(response);
          },
          error:jQuery.core.passport.open.error
        });
        return false;
      },

      emailAvailability:function(e){
        var o = this, e = e || false;
        if(!e) return false;
        var id = jQuery(e).attr('id') || false;
        if(!id || jQuery('.'+id+'-request').length == 0 || jQuery('.'+id+'-response').length == 0) return false;
        jQuery.ajax({
          type:'POST',
          url:'/passport/emailAvailability/',
          data: {'request':jQuery('.'+id+'-request').attr('value')},
          success:function(response){
            jQuery('.'+id+'-response').html(response);
          },
          error:jQuery.core.passport.open.error
        });
        return false;
      },

      captchaRefresh:function(){
        jQuery('img.passport.captcha').each(function(){
          var src = (jQuery(this).attr('src') && jQuery.trim(jQuery(this).attr('src')).length > 0) ? jQuery.trim(jQuery(this).attr('src')) : false;
          if(src){
            var matches = src.match(/(unique)=([^&]+)/img);
            if(matches) for(var key in matches) src = src.replace(matches[key],'unique='+(Math.random()*100000000000000000));
            else src = src+((src.match(/\?/img))?'&':'?')+'unique='+(Math.random()*100000000000000000);
            jQuery(this).attr('src',src);
          }
        });
      }

    },

    open:{

      message:function(o){
        var options = (typeof o == 'object' && o && typeof o.getResponseHeader == 'undefined') ? o : false;
        var response = (typeof o == 'object' && o && typeof o.getResponseHeader == 'function') ? o : false;
        var defaults = {
          'type':'error',
          'html':'Server request error!<br />Please try later',
          'modal':{
            'minWidth':150,
            'minHeight':40
          }
        };
        var settings = jQuery.extend(defaults,options||{});
        jQuery.modal.close();
        var $container = jQuery('<div class="passportUI"><div class="message"><div class="'+settings['type']+'"></div></div></div>');
        jQuery('.'+settings['type'],$container).html(settings['html'])
        jQuery($container).modal(settings['modal']);
        return jQuery.core.passport.response(response);
      },

      private:function(){
        return (jQuery.core.passport.isset()) ? true : jQuery.core.passport.open.login();
      },

      forgot:function(o){
        jQuery.modal.close();
        jQuery.ajax({
          type:'GET',
          url:'/passport/forgot/',
          success:function(response){
            jQuery('<div class="passportUI"></div>').html(response).modal({minWidth:460,maxWidth:460,maxHeight:311});
            jQuery.core.ajax.init();
          },
          error:jQuery.core.passport.open.message
        });
        return false;
      },

      register:function(o){
        jQuery.modal.close();
        jQuery.ajax({
          type:'GET',
          url:'/passport/register/',
          success:function(response){
            jQuery('<div class="passportUI"></div>').html(response).modal({minWidth:460,maxWidth:460,minHeight:311});
            jQuery.core.ajax.init();
          },
          error:jQuery.core.passport.open.message
        });
        return false;
      },

      login:function(o){
        jQuery.modal.close();
        jQuery.ajax({
          type:'GET',
          url:'/passport/login/',
          success:function(response){
            jQuery('<div class="passportUI"></div>').html(response).modal({minWidth:460,maxWidth:460,minHeight:161});
            jQuery.core.ajax.init();
          },
          error:jQuery.core.passport.open.message
        });
        //jQuery.modal.iframe({url:'http://google.ru',width:'600px',height:'400px',modal:true, close:true, overflow:'hidden'});
        //jQuery('<div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer lectus augue, cursus ac vehicula commodo, scelerisque vitae dui. Duis nisi libero, fermentum id bibendum vel, volutpat vitae odio. In rutrum orci a lacus porttitor eget molestie ante vehicula. In faucibus pulvinar leo eu euismod. Sed neque eros, adipiscing at elementum vitae, feugiat vitae est. Aliquam iaculis arcu vel felis porta rutrum. Nulla ipsum tortor, porta gravida pellentesque quis, auctor a ante. Vivamus nec justo pulvinar sem rutrum feugiat sit amet vel turpis. Vestibulum at lorem vitae sem rutrum facilisis. Ut quam lorem, tincidunt quis fermentum vitae, accumsan vel justo. Nulla ut metus tellus. Nulla turpis augue, mattis sit amet cursus id, iaculis ac lorem.</div>').modal({minWidth:300,minHeight:300,maxWidth:840});
        //console.log(o);
        return false;
      },

      logout:function(){
        jQuery.ajax({
          type:'GET',
          url:'/passport/logout/',
          success:function(response){
            window.location.reload();
          },
          error:jQuery.core.passport.open.message
        });
        return false;
      },

      settings:function(o){
        jQuery.modal.close();
        jQuery.ajax({
          type:'GET',
          url:'/passport/settings/',
          success:function(response){
            jQuery('<div class="passportUI"></div>').html(response).modal({minWidth:460,maxWidth:460,minHeight:476});
            jQuery.core.ajax.init();
          },
          error:jQuery.core.passport.open.message
        });
        return false;
      }

    }

  }
});

jQuery('document').ready(function(){
  jQuery.core.passport.init();
});