function Overlay() {
  var self = this;
  this.wind = $(window);
  this.jax_space = $(document.body);
  this.jax_space.append('<div class="overlay"></div>')
  this.overlay = this.jax_space.children(':last');
  
  this.set_width = function() {
    self.overlay.width(self.wind.width());
    self.overlay.height(self.wind.height());
  }
  
  this.get_gone = function() {
    new Fade_fad(self.overlay, 0, 400);
  }
  this.wind.bind('resize', this.set_width);
  this.set_width();
  new Fade_fad(this.overlay, 0.9);
}

function Fade_fad(element, opac, durat, func) {
  switch (arguments.length) {
    case 0 :
      return;
    case 1 :
      opac = 1;
    case 2 :
      durat = 1050;
    case 3 :
      if (opac != 0) {
        func = new Function();
      } else {
        func = function() {element.remove();}
      }
    default :
      break;
  }
  element.animate({
    opacity: opac
  }, {duration: durat, 
    easing: "easeOutQuart",
    queue: false,
    complete: func
  });
}

function Slide_in(element, filling, durat, high) {
  switch (arguments.length) {
    case 0 :
      return;
    case 2 :
      durat = 1050;
    case 3 :
      high = filling.show().outerHeight(true, true);
    default :
      break;
  }
  element.animate({
    height: high
  }, {duration: durat, 
    easing: "easeOutQuart",
    queue: false,
    complete: function() {
      new Fade_fad(filling, 1, 300, function() {$(this).css('opacity','');});
    }
  });
}

function Iter_out(element) {
  for (var i = 0; i < element.length; i++) {
    element.eq(i).data('iter', i);
  }
  return element;
}



function Popin(element) {
  var self = this;
  this.pages = element;
  this.jax_space = $('#jax_content');
  this.popin = null;
  this.close_box = null;
  this.pop_cont = null;
  this.popers = new Array();
  this.active_path = '';
  
  
  this.close_up = function() {
    new Fade_fad(self.popin, 0);
    self.overlay.get_gone();
    self.popers = new Array();
  }
  
  this.button_out = function(e) {
    e.preventDefault();
    if (self.current_wrap.data('iter') == $(this).data('iter')) {
      return;
    }
    new Fade_fad(self.wrappers.eq(self.current_wrap.data('iter')), 0, 250);
    new Slide_in(self.pop_cont, self.wrappers.eq($(this).data('iter')).appendTo(self.pop_cont));
    self.current_wrap = $(this);
  }
  
  this.move_on = function(e) {
    e.preventDefault();
    var iter_id = $(e.currentTarget).data('iter_id');
    if (iter_id == undefined) {
      return false;
    }
    if (!self.popers[iter_id].poped) {
      return false;
    }
    self.pre_poped_filter(self.active_path, function(iter) {
      self.popers[iter].page.animate({
        left: - self.pop_cont.outerWidth(true)
      }, {duration: 350, 
        easing: "easeOutQuart",
        queue: false,
        complete: function() {
          $(this).removeAttr('style');
        }
      });
    });
    self.popers[iter_id].page.css({display: 'block', left: self.pop_cont.outerWidth(true)}).animate({
        left: 20
      }, {duration: 350, 
        easing: "easeOutQuart",
        queue: false
      });
      self.pop_cont.animate({
        height: self.popers[iter_id].page.outerHeight(true)
      }, {duration: 350, 
        easing: "easeOutQuart",
        queue: false
      });
    self.active_path = self.popers[iter_id].bomarang;
  }
  
  this.wrap_up = function(html) {
    self.pop_cont.append('<div class="wrap"></div>');
    return self.pop_cont.children(':last').html(html);
  }
  
  this.pre_poped_filter = function(refrence, addition) {
    for (var i = 0; i < self.popers.length; i++) {
      if (self.popers[i].bomarang == refrence) {
        addition(i);
        return false;
      }
    }
    return true;
  }
  
  this.wrap_go = function(html) {
    var temp_wrap = self.wrap_up(html);
    var linkup = new Linker(temp_wrap);
    function pre_poped(index) {
      var me = this;
      return self.pre_poped_filter($(this).attr('href'), function(iter) {
        self.popers[iter].linkers.push(me);
        self.popers[iter].linkers.data('iter_id', iter);
        self.popers[iter].linkers.bind('click', self.move_on);
      }); 
    }
    if (this.url == self.active_path) {
      temp_wrap.show();
      self.pop_cont.animate({
        height: temp_wrap.outerHeight(true)
      }, {duration: 350, 
        easing: "easeOutQuart",
        queue: false
      });
    }
    self.pre_poped_filter(this.url, function(iter) {
      self.popers[iter].page = temp_wrap;
      self.popers[iter].linkers.children('img.preload').remove();
      self.popers[iter].poped = true;
    });
    self.get_all_pages(temp_wrap.find('a').filter(linkup.popin_filter).filter(pre_poped), true);
  }
  
  this.correct_display = function(refrence) {
    $.ajax({
      url: refrence,
      success: self.wrap_go
    });
  }
  
  this.get_all_pages = function(elements, preload) {
    var i_start = self.popers.length;
    if (elements.length < 1) return false;
    for (var i = i_start; i < elements.length + i_start; i++) {
      self.popers[i] = new Object();
      self.popers[i].linkers = elements.eq(i - i_start);
      if (preload) {
        self.popers[i].linkers.append('<img src="/images/global/ajax-loader.gif" alt="preloader" class ="preload" />');
      }
      self.popers[i].linkers.bind('click', self.move_on);
      self.popers[i].bomarang = self.popers[i].linkers.attr('href');
      self.popers[i].poped = false;
      self.correct_display(self.popers[i].bomarang);
    }
  }
  
  this.setup_popin = function(html) {
    self.jax_space.append(html); 
    self.popin = self.jax_space.children(':last');
    self.pop_cont = self.popin.children('.content')
    
    self.close_box = self.popin.children('.title').children('img');
    self.close_box.bind('click', self.close_up);
    
    new Fade_fad(self.popin);
  }
  
  this.starter = function() {
    self.overlay = new Overlay();
    self.setup_popin('<div class="popin_box deskman column main"><div class="title"><h3>'+''+'</h3> <img src="/images/global/icons/close.png" alt="Close Popin" /></div><div class="content"></div></div>');
    self.get_all_pages(self.pages, false);
    self.popers[0].linkers.eq(0).unbind('click', self.move_on);
  }
  
  this.click_start = function(e) {
    e.preventDefault();
    self.active_path = $(e.currentTarget).attr('href');
    self.starter();
  }
  
  this.quickstart = function(refrence) {
    self.active_path = refrence;
    self.starter();
  }
  
  this.pages.bind('click', this.click_start);
}


