/**
 * @author Alexander Farkas
 * v. 1.02
 */
(function($) {
  $.extend($.fx.step,{
      backgroundPosition: function(fx) {
            if (fx.state === 0 && typeof fx.end == 'string') {
                var start = $.curCSS(fx.elem,'backgroundPosition');
                start = toArray(start);
                fx.start = [start[0],start[2]];
                var end = toArray(fx.end);
                fx.end = [end[0],end[2]];
                fx.unit = [end[1],end[3]];
      }
            var nowPosX = [];
            nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
            nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];           
            fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];
            
           function toArray(strg){
               strg = strg.replace(/left|top/g,'0px');
               strg = strg.replace(/right|bottom/g,'100%');
               strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
               var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
               return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
           }
        }
  });
})(jQuery);

//////////////////////////////////////////////////////////////////

if($.browser.msie && /^6/.test($.browser.version))
{
  //IE6
  
  try {
    document.execCommand("BackgroundImageCache", false, true);
  }catch(e){}
  
  isIE6 = true;
}
else isIE6 = false;

var dirName = '/';

/*getQSP = function(queryString)
{
  queryString = queryString.replace(/^.*\?/,'');
  
  var chunks = queryString.split('&'), rez = {};
  
  for(var i in chunks)
  {
    var pair = chunks[i].split('=');
    
    rez[pair[0]] = (pair.length == 2) ? pair[1] : '';
  }
  
  return rez;
}*/

getQSP = function(queryString)
{
  var rez1 = (new RegExp('/realisations/([^/]+)/([0-9]*|.*)$')).exec(queryString), rez2 = {};
  
  if(rez1)
  {
    if(1 in rez1)
      rez2['tags'] = rez1[1];
    
    if((2 in rez1) && (rez1[2] !== ''))
    {
      if(rez1[2] == parseInt(rez1[2]))
        rez2['page'] = rez1[2];
      else
        rez2['projet'] = rez1[2];
    }
  }
    
  return rez2;
}

var $_GET = getQSP(document.location.href);

$(document).ready(function()
{
  if(isIE6)
    $('img.alpha').each(function()
    {
      var src = $(this).attr('src');
      var newSrc = dirName + 'writable/versions/.templates/wideal_2-upload-blank.gif';
      
      var imgHeight = $(this).height();
      var imgWidth = $(this).width();
      
      $(this).attr('src',newSrc);
      
      $(this).css(
      {
        'height': imgHeight,
        'width': imgWidth,
        'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "'),sizingMethod='scale'"
      });
    });
  
  if(!isIE6) $('div.coins').each(function()
  {
    var divInfo = $(this),
    backImage = divInfo.css('backgroundImage'),
    posState = divInfo.css('position'),
    cornerImage = backImage.replace(/\.([^.]+)$/,'_coin.$1'),
    spanStyle = 'position:absolute;background-image:' + cornerImage.replace(/"/g,'') + ';width:5px;height:5px;'
    ;
    
    if(posState != 'absolute')
      divInfo.css('position','relative');
    
    divInfo.append(
    '<span style="' + spanStyle + 'background-position:top left;top:0;left:0;"></span>' +
    '<span style="' + spanStyle + 'background-position:top right;top:0;right:0;"></span>' +
    '<span style="' + spanStyle + 'background-position:bottom left;bottom:0;left:0;"></span>' +
    '<span style="' + spanStyle + 'background-position:bottom right;bottom:0;right:0;"></span>'
    );
  });
  
  var piedId = 'template-pied',
  
  regPied = new RegExp(piedId + '$'),
  
  piedEl = $('#' + piedId);
  
  $('a').each(function()
  {
    var jLink = $(this);
    
    if(regPied.test(jLink.attr('href')))
      jLink.click(function()
      {
        var scrollHeight, windowHeight = $(window).height(), htmlEl = (function()
        {
          //recherche de l'élément scrollable
          
          //alert([$('body')[0].scrollHeight,windowHeight]);
          
          var scrollEl = $('html'),oldScrollTop = scrollEl[0].scrollTop;
          
          scrollEl[0].scrollTop += 1;
          
          if(scrollEl[0].scrollTop == oldScrollTop)//still the same, so not writable
            scrollEl = $('body');
          else
            scrollEl[0].scrollTop = oldScrollTop;
          
          scrollHeight = scrollEl[0].scrollHeight;
          
          return scrollEl;
        })(), parentEl = jLink.parent().parent();
        
        if(parentEl.hasClass('interet'))
        {
          var rez = / ([^ ]+)$/.exec(parentEl.attr('class'));
          
          if(1 in rez)
          {
            piedEl.find('select').val(rez[1]);
          }
        }
        
        htmlEl.animate({scrollTop: (scrollHeight - windowHeight)},1000,function()
        {
          piedEl.find('input').eq(0).focus();
        });
        
        return false;
      });
  });
  
  piedEl.find('form').submit(function()
  {
    //try{
    
    var formEl = $(this);
    
    var insertFormStatus = function(el,formEl)
    {
      var statusPs = formEl.parent().find('p.status').not('.stagiaires');
      
      if(statusPs.length)
        statusPs.replaceWith(el);
      else
        formEl.before(el);
      
      formEl.parent().find('p.stagiaires').hide();
    }
    
    var targetUrl = formEl.attr('action');
    
    insertFormStatus('<p class="status loading">Chargement...</p>',formEl);
    
    $.ajax({
      url: targetUrl,
      type: 'POST',
      dataType: "html",
      data: formEl.serializeArray(),
      complete: function(xmlResponse,state)
      {
        if(state == 'success')
        {
          var textResp = xmlResponse.responseText.replace(/<script(.|\s)*?\/script>/g, "");
          
          var tempDiv = $('<div/>').append(textResp);
          
          var statusP = tempDiv.find('p.status').eq(0);
          
          insertFormStatus(statusP,formEl);
          
          if(statusP.hasClass('success'))
          {
            //formEl.find('input,select,textarea').not('input[type=submit]').val('');
            
            formEl.css({visibility:'hidden'});
          }
        }
      }
    });
    
    //}catch(e){console.log(e);}
    
    return false;
  }).find('select').change(function()
  {
    var $select = $(this);
    
    if($select.val() === 'stage')
    {
      piedEl.find('p.stagiaires').show();
    }
  });
  
  var portfolio = $('#version-portfolio'), preventClick = false;
  
  if(portfolio.length)
  {
    var cache = {}, thisHref, transitionType = 0,imageCache = {};
    
    var doRequest = function(href,successCallback)
    {
      $.ajax({
        url: href,
        type: 'GET',
        dataType: "html",
        timeout: 10000,
        success: successCallback,
        error: function(XMLHttpRequest, textStatus, errorThrown)
        {
          //textStatus : null, "timeout", "error", "notmodified" or "parsererror"
          alert('La requête n\'a pu aboutir. Vérifiez votre connectivité à Internet.');
        }
      });
    }
    
    var initialCacheIndex;
    
    if(!('tags' in $_GET))
      initialCacheIndex = '/realisations/site/';
    else
    {
      initialCacheIndex = '/realisations/' + $_GET['tags'] + '/';
      
      if('projet' in $_GET)
        initialCacheIndex += $_GET['projet']
      else if('page' in $_GET)
        initialCacheIndex += $_GET['page']
    }
    
    cache[initialCacheIndex] = portfolio.parent().html();
    
    
    var simpleLoad = function(data,expr)
    {
      portfolio.find(expr).html(data.find(expr).html());
    }
    
    var successFunction = function(data,state,fromCache)
    {
      if(typeof fromCache == 'undefined')
      {
        var textResp = data.replace(/<script(.|\s)*?\/script>/g, "");
        
        var tempDiv = $('<div/>').append(textResp);
        
        data = tempDiv.find('#version-portfolio');
        
        cache[thisHref] = data.parent().html();
      }
      else
        data = $(data);
      
      switch(transitionType)
      {
        case 0:
          portfolio.html(data.html());
          
          preventClick = false;
        break;
        case 1:
          portfolio.find('p.navigation').html(data.find('p.navigation').html());
          
          var newdetail = data.find('div.detail');
          
          newdetail.css({
            left: '880px'//newdetail.outerWidth()
          });
          
          portfolio.find('div.detail').eq(0).parent().append(newdetail);
          
          newdetail.animate({left:0},500,function(){portfolio.find('div.detail').eq(0).remove();});
        break;
        case 2:
          portfolio.find('p.navigation').html(data.find('p.navigation').html());
          
          var newdetail = data.find('div.detail');
          
          portfolio.find('div.detail').eq(0).parent().append(newdetail.hide());
          
          newdetail.show(500,function(){portfolio.find('div.detail').eq(0).remove();});
        break;
        case 3:
          simpleLoad(data,'ul.type_projets');
          simpleLoad(data,'p.navigation');
          simpleLoad(data,'ul.navigation_miniatures');
          
          portfolio.find('p.navigation').html(data.find('p.navigation').html());
          
          var newdetail = data.find('div.detail').css({
            zIndex: 40
          });
          
          portfolio.find('div.detail').eq(0).parent().append(newdetail.css('opacity','0'));
          
          newdetail.animate({opacity:1},500,function(){portfolio.find('div.detail').eq(0).remove();preventClick = false;});
        break;
        case 4:case 5:
          simpleLoad(data,'p.navigation');
          simpleLoad(data,'ul.navigation_miniatures');
          
          var newdetail = data.find('div.detail');
          
          newdetail.css({
            zIndex: 20
          });
          
          var olddetail = portfolio.find('div.detail').eq(0).css({
            zIndex: 30
          });
          
          olddetail.parent().append(newdetail);
          
          olddetail.animate({left:(transitionType == 5) ? '880px' : '-880px'},500,function(){$(this).remove();preventClick = false;});
        break;
      }
    }
    
    portfolio.click(function(e)
    {
      if(preventClick) return false;
      
      var target = $(e.target);
      
      transitionType = 0;
      
      if(target.is('img'))
        target = target.parent();
      
      if(target.is('a'))
      {
        thisHref = target.attr('href');
        
        var newGet = getQSP(thisHref);
        
        if(!('tags' in newGet))
          return true;
        
        preventClick = true;
        
        if(('projet' in $_GET) && ('projet' in newGet))
        {
          //navigation d'un projet à l'autre
          
          if(target.hasClass('suiv'))
            transitionType = 4;
          else if(target.hasClass('prec'))
            transitionType = 5;
          else
            transitionType = 3;
        }
        
        var doLoad = function()
        {
          if(thisHref in cache)
            successFunction(cache[thisHref],'success',true);
          else
            doRequest(thisHref,successFunction);
        }
        
        if(('projet' in newGet) && imageCache && imageCache[$_GET['tags']] && imageCache[$_GET['tags']][newGet['projet']])
        {
          $('<img>').load(doLoad).attr('src',imageCache[$_GET['tags']][newGet['projet']]);
        }
        else
          doLoad();
        
        $_GET = newGet;
        
        if(('projet' in $_GET) && ('tags' in $_GET))
        {
          if(!($_GET['tags'] in imageCache))
          {
            imageCache[$_GET['tags']] = {};
            
            $.ajax({
              url: dirName + 'writable/versions/wideal/index-upload-script.php?imgList&tags=' + $_GET['tags'],
              type: 'GET',
              dataType: "xml",
              timeout: 10000,
              success: function(data,state)
              {
                $(data).find('image').each(function()
                {
                  var image = $(this);
                  
                  imageCache[$_GET['tags']][image.attr('id')] = image.text();
                });
              },
              error: function(XMLHttpRequest, textStatus, errorThrown)
              {
                //textStatus : null, "timeout", "error", "notmodified" or "parsererror"
              }
            });
          }
        }
        
        return false;
      }
    });
  }
  
  /*.mouseover(function(e)
  {
    var target = $(e.target);
    
    
    if(target.is('img') && target.parent().parent().parent().is('ul.navigation_miniatures'))
    {
      var parentUl = target.parent().parent().parent();
      
      var position = target.position();
      
      //parentUl.stop().animate({backgroundPosition: (position['left'] - 10) + 'px 0'},300);
      
      parentUl.css({backgroundPosition: (position['left'] - 10) + 'px 0'});
    }
  });*/
  
  /*.find('a.suiv').each(function()
  {
    //preloading the "next" page
    
    var thisHref = $(this).attr('href');
    
    if(!(thisHref in cache))
      doRequest(thisHref,function(data,state)
      {
        successFunction(data,state,thisHref,true);
      });
  });*/
});

