function moveToLayoutScope(element, target){
  element=$(element);
  target=$(target);
  targetOffsets = target.cumulativeOffset();
  targetOffsets[1]-=((screen.height-700)/2);
  targetOffsets.left-=(screen.width-950)/2;
  element.setStyle({
	top:targetOffsets[1]+'px',
	left:targetOffsets.left+'px'});
}

function softTween(t, tf){
  return -2*Math.pow(t,3)/Math.pow(tf,3)+3*Math.pow(t,2)/Math.pow(tf,2);
}

Effect.scrollLayout = function(element) {
  var options = arguments[1] || { },
  scrollOffsets = document.viewport.getScrollOffsets(),
  elementOffsets = $(element).cumulativeOffset();

  if (options.offset) elementOffsets[1] += options.offset;
  o=scrollOffsets.left;
  options.duration=3;

  elementOffsets[1]-=(screen.height-700)/2;
  elementOffsets.left-=(screen.width-950)/2;

  if(scrollOffsets.top==elementOffsets[1]){
	elementOffsets[1]+=2;}

  return new Effect.Tween(null,
	0,
	options.duration,
    options,
    function(p){ 
	  fc=1;
	  distance = elementOffsets[1]-scrollOffsets.top;
	  if(distance<0){
		distance*=-1;
		fc=-1;}
	  p=scrollOffsets.top+distance*softTween(p, options.duration)*fc
	  YadvRate=(p-scrollOffsets.top)/(elementOffsets[1]-scrollOffsets.top);
	  o=scrollOffsets.left+(elementOffsets.left-scrollOffsets.left)*YadvRate; 
	  scrollTo(o, p.round());
  });
};

var divScrollMethods = {
  smoothScroll : function(element, options) {
	var settings = new Object.extend({
			distance: 0,
			target: null,
			horizontal: false,
			duration: 3},options||{});

	if(settings.target){
	  target= element.down('.'+settings.target); //TODO: better reference method, ADD try

	  //console.log(target.cumulativeOffset());
	  distance = settings.horizontal ? target.offsetLeft-element.scrollLeft : target.offsetTop-element.scrollTop;
	  //console.log(settings.horizontal ? 'distance ('+distance+')= target.x ('+target.offsetLeft+') - container.Xscroll ('+element.scrollLeft+') ': 'distance ('+distance+')= target.y ('+target.offsetTop+') - container.Yscroll ('+element.scrollTop+') ');
	} else {
	  distance=settings.distance;}

	ipos = settings.horizontal ? element.scrollLeft/*-element.offsetLeft*/:element.scrollTop||-element.offsetTop;
	if(ipos<0)
	  ipos=0;
	
	//console.log(settings.horizontal ? 'i ('+ipos+') = scrollLeft ('+element.scrollLeft+')':'i ('+ipos+') = scrollTop ('+element.scrollTop+') - offsetTop('+element.offsetTop+')');
	maxpos = settings.horizontal ? element.scrollWidth:element.scrollHeight;
	fpos = ipos+distance;

	if(fpos<0){
	  distance=ipos*-1;
	} else if (fpos>maxpos) {
	  distance=maxpos;}
	
	//console.log('i ('+ipos+') + distance ('+distance+') ='+fpos+' (max='+maxpos+')');
	settings.distance=distance;
	fc=1;
	return new Effect.Tween(null,
	  0,
	  settings.duration,
	  options,
	  function(p){
	  
		if(distance<0){
		  distance*=-1;
		  fc=-1;}
	  if(settings.horizontal)
		element.scrollLeft=ipos+softTween(p, settings.duration)*distance*fc;
	  else
		element.scrollTop=ipos+softTween(p, settings.duration)*distance*fc;
	});
  }
};

Element.addMethods('DIV', divScrollMethods);

function insertShadow(){
  ['top', 'right', 'bottom', 'left'].each(function(s){})
}
function popProject(){
	var youtubehtml='<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/VCODE&hl=es&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/VCODE&hl=es&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>';
	$$('a[type=video]').each(function(s){
		s.observe('click', function(e){
			TINY.box.show('<div class="video-player">'+youtubehtml.replace(/VCODE/gi, this.readAttribute('rel'))+'<a href="#" class="close" onclick="TINY.box.hide(); return false;"></a></div>',0,656,659,0);
			Event.stop(e);},false)
});}

document.observe("dom:loaded", function() {
  //navigation
  $$('.nav li a').each(function(s){
	s.observe('click', function(e){
	  Effect.scrollLayout(this.readAttribute('rel'));
		//window.location='#'+this.readAttribute('rel');
	  Event.stop(e);}, false)
		
  });

  // home menu
  $$('#home .menu a').each(function(s){
	s.observe('click', function(e){
	  this.up('ul').next().smoothScroll({'target' : this.readAttribute('rel'), 'horizontal': true});
	  Event.stop(e);}, false)
  });

  //services menu
  $$('#services .menu a').each(function(s){
	s.observe('click', function(e){
	  this.up('.slides').smoothScroll({'target' : this.readAttribute('rel'), 'horizontal': true});
	  Event.stop(e);}, false)
  });

  //contact menu
  $$('#contact .menu a').each(function(s){
	s.observe('click', function(e){
	  this.up('div').next().smoothScroll({'target' : this.readAttribute('rel')});
	  Event.stop(e);}, false)
  });

  //portfolio menu
  $('portfolio').down('.left-arrow').observe('click', function(e){
	this.up('div').previous().smoothScroll({'distance': -325, 'horizontal': true});
  Event.stop(e);}, false);
  $('portfolio').down('.right-arrow').observe('click', function(e){
	this.up('div').previous().smoothScroll({'distance': 325, 'horizontal': true});
  Event.stop(e);}, false);
  $$('#portfolio .list .container a').each(function(s){
		s.observe('click', function(e){
			$$('#portfolio .list .container li.selected').each(function(s){s.removeClassName('selected')});
			this.up('li').addClassName('selected');
			new Ajax.Updater('project', s.readAttribute('href'), {
				onComplete: function(){popProject()}});
			Event.stop(e);}, false);});
  $$('#portfolio .list .container li').each(function(s){
		s.observe('mouseover', function(e){
			this.addClassName('hover');
		});
		s.observe('mouseout', function(e){
			this.removeClassName('hover');
		});
	});
	popProject();


  //contact form
  $('contact').down('.contact form').observe('submit', function(e){
	new Ajax.Request(this.readAttribute('action'),
	  {
		method: 'post',
		asynchronous:true, 
		evalScripts:true, 
		parameters: Form.serialize(this),
		onComplete: function(){ alert('mensaje enviado, muchas gracias por contactarnos') }
	  }
	);
	Event.stop(e);
  });
  
  //initial scroll
  Effect.scrollLayout('home');
});
