$.extend({
  redirect: function(url){
    window.location.href = '/' + username + '/' + url
  },
  sign: function(data, secret){
    var parameters = [];
    var str = secret;

    for(var key in data)
    {
      if(key != 'sign')
      {
        if($.trim(String(data[key])).length != 0)
        {
          parameters.push(key);
        }
      }
    }

    parameters.sort();

    for(var i=0;i<parameters.length;i++)
    {
      str += parameters[i] + $.trim(String(data[parameters[i]]));
    }

    return $.extend(data,{
      sign: $.md5(str)
    });
  }
});

$.fn.extend({
  checkElement: function(){
    return $(this).length > 0 ? true : false;
  },
  disable: function(){
    $(this).attr('disabled', true);
    return this;
  },
  enable: function(){
    $(this).removeAttr('disabled');

    return this;
  },
  clearFormErrors: function(){
    $(this).find('.msg').remove();
    return this;
  },
  addError: function(code){
    $('<span>').addClass('msg').addClass('png-icon').text(messages.errors[code]).insertAfter(this);

    return this;
  },
  showErrorTip: function(content, parameters){
    $(this).qtip($.extend({
      api: {
        onHide: function(){
          $('.qtip').remove();
        }
      },
      content: content,
      show: 'error',
      style: {
        name: 'red',
        tip: true
      },
      position: {
        corner: {
           target: 'topMiddle',
           tooltip: 'bottomMiddle'
        }

      }
    }, parameters || {})).trigger('error');
  },
  addToJob: function(idx, item){
    if (item.current)
      $('<div id="job' + idx + '"><p>Firma:' + item.employer +
        '</p><p>Pozisyon:' + item.position + '</p><p>Başlangıç: ' + item.time +
          '</p><p><a href="javascript:;" onclick="userProfile.removeJob(' + idx +
            ');">Sil</a></p></div>').appendTo(this);
    else
      $('<div id="job' + idx + '"><p>Firma:' + item.employer +
        '</p><p>Pozisyon:' + item.position + '</p><p><a href="javascript:;" onclick="userProfile.removeJob(' + idx +
            ');">Sil</a></p></div>').appendTo(this);
  },
  addToSchool: function(idx, item){
    if (item.isGraduated)
      $('<div id="school' + idx + '"><p>Okul:' + item.school +
        '</p><p>Bölüm:' + item.department + '</p><p>' + item.year +
          ' Mezunu</p><p><a href="javascript:;" onclick="userProfile.removeSchool(' + idx +
            ');">Sil</a></p></div>').appendTo(this);
    else
      $('<div id="school' + idx + '"><p>Okul:' + item.school +
        '</p><p>Bölüm:' + item.department + '</p><p><a href="javascript:;" onclick="userProfile.removeSchool(' + idx +
            ');">Sil</a></p></div>').appendTo(this);
  },
 mvasLayer: function(parameters){
   var parameters = $.extend({
        'top'     : 'center',
        'left'    : 'center',
        'close'   : true,
        'absolute': false,
        'method' : 'test.echo',
        'isApi'  : true,  // true or false
        'element': false // css selector or element id or false
       }, parameters || {});

   var $self = $(this);
   $self.data('parameters', parameters);

   return $(this).each(function(){
      var $_self = $(this);
       $_self.click(function(e){
           e.stopPropagation();
           params = $self.data('parameters').params;
           if($.isFunction(params)){
             params = params.apply(this, [$(this)]);
           }
            if($self.data('parameters').isApi)
            {
              new Api({
                'method': parameters.method,
                'parameters': params,
                'callback': function(rsp){
                  // TODO: buraya bi bak alem.com gelince :p
                  if (rsp.status == 'ok')
                     $_self.trigger('afterLoad', [$_self, rsp]);
                 },
                'error': function(code, message){
                  if(code == 5555){
                    window.location.href = 'https://www.alem.com/odeme';
                    return ;
                  }
                 }
              });
            }
            else
            {
              param = $self.data('parameters');
              if(!param.element)
              {
                  $_self.trigger('afterLoad', [$_self]);
              }
              else
              {
                 $_self.trigger('afterInsert', [param.element]);
              }
            }
            return false;
         }).bind('afterInsert', function(e, elementId){
            e.stopPropagation();
            $(elementId).css({
              'display'   : 'none',
              'visibility': 'hidden',
              'position'  : 'absolute',
              'top'       : '-10000px',
              'left'      : '-10000px'
            }).show();
            $(elementId).find('.close').remove();
            var oWidth = $(elementId).outerWidth({margin:true});
            var oHeight = $(elementId).outerHeight({margin:true});

            var top  = $self.data('parameters').top;
            var left = $self.data('parameters').left;
            if (left == 'center') {left = Math.max(($(window).width() - oWidth) / 2, 0);}

            if (typeof top == 'string')  {
              top = top == 'center' ? Math.max(($(window).height() - oHeight) / 2, 0) :
                parseInt(top, 10) / 100 * $(window).height();
            }

            if (!$self.data('parameters').absolute)  {
                top += $(window).scrollTop();
                left += $(window).scrollLeft();
            }
            $(elementId).prepend($('<div class="close"></div>').hide().bind('click', function(){
              $close = $(this);
              $(elementId).fadeOut('fast', function(){
                  $self.trigger('OnUnload');
                  if(!$self.data('parameters').element)
                  {
                    $(elementId).remove();
                  }

              });
            }) );
            if($self.data('parameters').close)
            {
              $(elementId).find('.close').show();
            }
            $(elementId).bind('close', function(){
               $(this).find('.close', function(){
                  $(this).trigger('click')
               });
            });
            $(elementId).hide().css({'visibility': ''}).css({'top': top, 'left': left, 'position': 'absolute'}).fadeIn('fast', function(){
              $(this).trigger('OnLoad');
            });
         });
   })
 }
});

function before(s){
  var x = 1800;
  var di = parseInt(new Date().getTime() / 1000);
    if (s <= 0){
      return [
        'Bir süredir görünmedi.',
        'offline'
      ];
    }

    diff = di - s;

    if (x >= diff){
      return [
        'Şu anda çevrimiçi!',
        'online'
      ];
    }

    m = parseInt(diff / 60);
    if (m > 60){
      h = parseInt(m / 60);
      if (h > 24){
        d = parseInt(h / 24);
        if (d > 25){
          return [
            'Bir süredir görünmedi.',
            'offline'
          ];
        } else if (d > 6) {
          w = parseInt(d / 7);
          return [
            w + ' hafta önce buradaydı.',
            'offline'
          ];
        } else{
          return [
            d + ' gün önce buradaydı.',
            'offline'
          ];
        }
      } else{
        return [
          h + ' saat önce buradaydı.',
          'offline'
        ];
      }
    } else {
      return [
        m + ' dakika önce buradaydı.',
        'offline'
      ];
    }
}

function made(s){
  var di = parseInt(new Date().getTime() / 1000);
    if (s <= 0){
      return 'Uzun zaman önce';
    }

    diff = di - s;

    m = parseInt(diff / 60);
    if (m > 60){
      h = parseInt(m / 60);
      if (h > 24){
        d = parseInt(h / 24);
        if (d > 25){
          return 'Uzun zaman önce';
        } else if (d > 6) {
          w = parseInt(d / 7);
          return w + ' hafta önce';
        } else{
          return d + ' gün önce';
        }
      } else{
        return h + ' saat önce';
      }
    } else {
      return m + ' dakika önce';
    }
}

function date ( format, timestamp ) {
    var that = this,
        jsdate = (        (typeof timestamp === 'undefined') ? new Date() :
        (timestamp instanceof Date) ? new Date(timestamp) :
        new Date(timestamp * 1000)
    ),
        formatChr = /\\?([a-z])/gi,        formatChrCb = function (t, s) {
            return f[t] ? f[t]() : s;
        },
        _pad = function (n, c) {
            if ((n = n + "").length < c) {return new Array((++c) - n.length).join("0") + n;
            } else {
                return n;
            }
        },        txt_words = ["Pzr", "Pts", "Sal", "Çar", "Per", "Cum", "Cts",
        "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz",
        "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
        txt_ordin = {1: ".", 2: ".", 3: ".", 21: ".", 22: ".", 23: ".", 31: "."},
        f = {
            d: function () {
                return _pad(f.j(), 2);
            },
            D: function () {
              return f.l().slice(0, 3);
            },
            j: function () {
                return jsdate.getDate();
            },            l: function () {
                return txt_words[f.w()] + 'day';
            },
            N: function () {
                return f.w() || 7;},
            S: function () {
                return txt_ordin[f.j()] || 'th';
            },
            w: function () {
              return jsdate.getDay();
            },
            z: function () {
                return (jsdate - new Date(f.Y(), 0, 1)) / 864e5 >> 0;
            },
            W: function () {
                var c = new Date(f.Y(), f.n() - 1, f.j() - f.N() + 3);
                return 1 + Math.round((c - (new Date(c.getFullYear(), 0, 4))) / 864e5 / 7);
            },
            F: function () {
                return txt_words[6 + f.n()];},
            m: function () {
                return _pad(f.n(), 2);
            },
            M: function () {return f.F().slice(0, 3);
            },
            n: function () {
                return jsdate.getMonth() + 1;
            },            t: function () {
                return (new Date(f.Y(), f.n() + 1, 0)).getDate();
            },
            L: function () {
                var y = f.Y();
                return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0;
            },
            o: function () {
              return f.Y() + (f.n() === 12 && f.W() < 9 ? -1 : (f.n() === 1 && f.W() > 9 ? 1 : 0));
            },
            Y: function () {
                return jsdate.getFullYear();
            },            y: function () {
                return (jsdate.getFullYear() + "").slice(2);
            },
            a: function () {
                return jsdate.getHours() > 11 ? "pm" : "am";
            },
            A: function () {
                return f.a().toUpperCase();},
            B: function () {
                return _pad(Math.floor(((jsdate.getUTCHours() * 36e2) + (jsdate.getUTCMinutes() * 60) +
                                        jsdate.getUTCSeconds() + 36e2) / 86.4) % 1e3, 3);
            },            g: function () {
                return jsdate.getHours() % 12 || 12;
            },
            G: function () {
                return jsdate.getHours();},
            h: function () {
                return _pad(f.g(), 2);
            },
            H: function () {return _pad(f.G(), 2);
            },
            i: function () {
                return _pad(jsdate.getMinutes(), 2);
            },            s: function () {
                return _pad(jsdate.getSeconds(), 2);
            },
            u: function () {
                return _pad(jsdate.getMilliseconds() * 1000, 6);
            },
            e: function () {
              return 'UTC';
            },
            I: function () {
            },
            O: function () {
                var a = jsdate.getTimezoneOffset();
                return (a > 0 ? "-" : "+") + _pad(Math.abs(a / 60 * 100), 4);},
            P: function () {
                var O = f.O();
                return (O.substr(0, 3) + ":" + O.substr(3, 2));
            },            T: function () {

                return 'UTC';},
            Z: function () {
                return -jsdate.getTimezoneOffset() * 60;
            },
            c: function () {
                return 'Y-m-d\\Th:i:sP'.replace(formatChr, formatChrCb);
            },
            r: function () {return 'D, d M Y H:i:s O'.replace(formatChr, formatChrCb);
            },
            U: function () {
                return Math.round(jsdate.getTime() / 1000);
            }};
    return format.replace(formatChr, formatChrCb);
}

function addCompliant(id, t, msg){
  new Api({
    'method': 'compliant.add',
    parameters: {
      'id': id,
      'type': t,
      'message': msg
    },
    error: function(code, message){
    },
    callback: function(rsp){
      if(rsp.status == 'ok')
      {
        $('#o-report').hide();
      }
    }
  });
}