/*!
* Typo.d Projects v1.0
* http://www.yooapps.com/
*
* Copyright 2011, YooApplications AG
*
* Includes jQuery JavaScript Library v1.6.4
* http://jquery.com
* Copyright 2011, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Date: 01.11.2011
*/

var projectsSettings = {
    opacityInactive: 1.0,
    opacityHover: 0.25,
    thumbImageWidth: 140,
    thumbImageHeight: 70,
    numberOfMaxColumns: 6,
    numberOfMaxElements: 36,
    imagesPath: 'fileadmin/kunde/arbeiten/'
}

loadJSONData('fileadmin/kunde/arbeiten/configs/projects.json');

var JSONData = null;

var arrAllProjects = [];
var arrProjects = [];
var divLeft = 0;
var divTop = 0;
var tmpContainer = null;
var tmpImageContainer = null;
var obj = new Object;
var arrBoxCoords = [];
var arrBoxStatus = [];
var arrTmpBoxCoords = [];
var testObject = new Object;
var projectCategory = null;

function loadJSONData(jsonFile){
  if(JSONData == null){
        $.ajax({
            url:jsonFile,
            dataType:'json',
            cache:'false',
            error:
                function(data){
                    $('#project-icons-frame').append('<span>Internal error, JSON File not found!</span>');
                },
            success:
                function(data){
                    JSONData = data;
                    loadProjectData();
                }
        });
  }
}

function calculateCoords(id){
  var row = 0;
  var column = 0;
  var x = 0;
  var y = 0;
  var boxCoords = new Object;
  row = Math.floor(id / projectsSettings.numberOfMaxColumns);
  column = id % projectsSettings.numberOfMaxColumns;
  boxCoords.x = column * 140 + column * 10;
  boxCoords.y = row * 70 + row * 10;
  boxCoords.id = id;
  return boxCoords;
}

function setBoxCoords(){
  if(projectCategory != null && projectCategory != ''){
    $("div#footer-frame").remove();
    projectsSettings.numberOfMaxElements = arrAllProjects.length;
  }
  for(var i = 0; i < projectsSettings.numberOfMaxElements; i++){
    arrBoxCoords.push(calculateCoords(i));
    
    var boxRelation = new Object;
    boxRelation.id = null;
    boxRelation.status = false;
    arrBoxStatus.push(boxRelation);
  }
}

function cleanBoxCoords(){
  for(var i = 0; i < arrBoxCoords.length; i++){
    if(arrBoxStatus[arrBoxCoords[i].id].status == false){
      arrTmpBoxCoords.push(arrBoxCoords[i]);
    }else{
      arrBoxStatus[arrBoxCoords[i].id].status = false;
    }
  }
  arrBoxCoords = arrTmpBoxCoords;
}

function loadProjectData(){
  projectCategory = $("div.content-big div.project-config-category").attr("id");
  
  var booIsCategorySelected = true;
  if(projectCategory == null || projectCategory == ''){
    booIsCategorySelected = false;
  }
  
  for(var i in JSONData['projects']){
    if((booIsCategorySelected && projectCategory == JSONData['projects'][i]['category']) || !booIsCategorySelected){
      obj = new Project;
      obj.setBoxId(i);
      obj.setTitle(JSONData['projects'][i]['title']);
      obj.setCategory(JSONData['projects'][i]['category']);
      obj.setLink(JSONData['projects'][i]['link']);
      obj.setThumbImage(JSONData['projects'][i]['thumb']);
      arrAllProjects.push(obj);
    }
  }
  setBoxCoords();
  if(projectCategory == null || projectCategory == ''){
    for(var i in JSONData['specials']){
      var boxPosition = JSONData['specials'][i]['position'];
      var boxCoords = calculateCoords(boxPosition);
      obj = new Project;
      obj.setBoxId('special-'+i);
      obj.setTitle(JSONData['specials'][i]['title']);
      obj.setCategory(null);
      obj.setLink(JSONData['specials'][i]['link']);
      obj.setThumbImage(JSONData['specials'][i]['thumb']);
      obj.setCoords(boxCoords.x, boxCoords.y);
      arrProjects.push(obj);
      arrBoxStatus[boxCoords.id].id = obj.getBoxId();
      arrBoxStatus[boxCoords.id].status = true;
    }
  }
  cleanBoxCoords();
  var sizeOfElements = projectsSettings.numberOfMaxElements;
  if(projectCategory == null || projectCategory == ''){
    sizeOfElements = sizeOfElements - JSONData['specials'].length;
  }
  for(var i = 0; i < sizeOfElements; i++){
    var randomPos = Math.ceil(arrAllProjects.length * Math.random()) - 1;
    obj = new Project;
    obj.setBoxId(i);
    obj.setTitle(arrAllProjects[randomPos]['title']);
    obj.setCategory(arrAllProjects[randomPos]['category']);
    obj.setLink(arrAllProjects[randomPos]['link']);
    obj.setThumbImage(arrAllProjects[randomPos]['thumb']);
    arrAllProjects.splice(randomPos, 1);
    
    randomPos = Math.ceil(arrBoxCoords.length * Math.random()) - 1;
    obj.setCoords(arrBoxCoords[randomPos].x, arrBoxCoords[randomPos].y);
    arrProjects.push(obj);
    arrBoxStatus[arrBoxCoords[randomPos].id].id = obj.getBoxId();
    arrBoxCoords.splice(randomPos, 1);
  }
  var totalRows = Math.floor(projectsSettings.numberOfMaxElements / projectsSettings.numberOfMaxColumns);
  if(projectsSettings.numberOfMaxElements % projectsSettings.numberOfMaxColumns > 0)
    totalRows++;
  var totalHeightContainer = (totalRows * 80) - 10;
  $("div#project-icons-frame").css('height',totalHeightContainer + 'px');
  showProjectData();
}

function showProjectData(){
  for(var i = 0; i < arrProjects.length; i++){
    var boxCoords = arrProjects[i].getCoords();
    tmpContainer = $("<div></div>").attr("class","project-item");
    tmpContainer.css("opacity",projectsSettings.opacityInactive);
    tmpContainer.attr("id",arrProjects[i].getBoxId());
    tmpContainer.css("left",boxCoords.x+"px");
    tmpContainer.css("top",boxCoords.y+"px");    
    tmpContainer.append($("<a></a>").attr("href",arrProjects[i].getLink()));    
    tmpImageContainer = $("<img />");
    tmpImageContainer.attr("width",projectsSettings.thumbImageWidth);
    tmpImageContainer.attr("height",projectsSettings.thumbImageHeight);
    tmpImageContainer.attr("src",projectsSettings.imagesPath+arrProjects[i].getThumbImage());
    tmpContainer.append(tmpImageContainer);
    $("#project-icons-frame").append(tmpContainer);
  }  
  showContainerRainGrow();
}

function showContainerRainGrow(){
  var numberOfColumns = 0;
  var numberOfRows = 0;
  var row = 0;
  var column = 0;
  var delayCoefficient = 0;
  if(projectsSettings.numberOfMaxColumns > arrProjects.length)
    numberOfColumns = arrProjects.length;
  else
    numberOfColumns = projectsSettings.numberOfMaxColumns;
  if(arrProjects.length % projectsSettings.numberOfMaxColumns == 0)
    numberOfRows = arrProjects.length / projectsSettings.numberOfMaxColumns;
  else
    numberOfRows = Math.floor(arrProjects.length / projectsSettings.numberOfMaxColumns);
  
  for(var i = 0; i < numberOfColumns; i++){
    column = i;
    var cObj = new Object;
    cObj.row = row;
    cObj.column = column;
    showContainerRainCrowElement(cObj,delayCoefficient);
    delayCoefficient++;
  }
  for(var i = 1; i < numberOfRows; i++){
    row = i;
    var cObj = new Object;
    cObj.row = row;
    cObj.column = column;
    showContainerRainCrowElement(cObj,delayCoefficient);
    delayCoefficient++;
  }
}

function showContainerRainCrowElement(pObj,delayCoefficient){
  var boxId = pObj.row * 6 + pObj.column;
  if(boxId < arrBoxStatus.length && !arrBoxStatus[boxId].status){
    var boxIdentifier = arrBoxStatus[boxId].id;
    $("div#"+boxIdentifier).delay(delayCoefficient*75).fadeIn(2000, function(){
      setProjectLink(boxIdentifier);
    });
    if(pObj.column > 0){
      boxId = (pObj.row + 1) * 6 + (pObj.column - 1);
      if(boxId < arrBoxStatus.length){
        pObj.row = pObj.row + 1;
        pObj.column = pObj.column - 1;
        showContainerRainCrowElement(pObj,delayCoefficient);
      }
    }
  }
}

function showContainer(id){
  var boxId = arrProjects[id].getBoxId();
  var boxCoords = arrProjects[id].getCoords();
  $("div#"+boxId).fadeIn(0).animate({left:boxCoords.x, top:boxCoords.y}, 1500, function(){
    setProjectLink(boxId);
  });
}

function setProjectLink(containerID){
  $("div#"+containerID).click(function(){
    location.href = $("div#"+containerID).find('a').attr('href');
  });
  $("div#"+containerID).hover(function(){
    //$("div#"+containerID).css('opacity',projectsSettings.opacityHover);
    $("div#"+containerID).fadeTo(300, projectsSettings.opacityHover);
  },function(){
    //$("div#"+containerID).css('opacity',projectsSettings.opacityInactive);
    $("div#"+containerID).fadeTo(300, projectsSettings.opacityInactive);
  });
}

function Project(){
  this.title = null;
  this.category = null;
  this.link = null;
  this.thumb = null;
  this.coords = new Object;
  this.boxId = 'project-item-';
  
  this.setTitle = function(title){ this.title = title; }  
  this.getTitle = function(){ return this.title; }
  
  this.setCategory = function(category){ this.category = category; }  
  this.getCategory = function(){ return this.category; }
  
  this.setLink = function(link){ this.link = link; }  
  this.getLink = function(){ return this.link; }
  
  this.setThumbImage = function(thumb){ this.thumb = thumb; }  
  this.getThumbImage = function(){ return this.thumb; }
  
  this.setThumbImage = function(thumb){ this.thumb = thumb; }  
  this.getThumbImage = function(){ return this.thumb; }
  
  this.setCoords = function(x,y){
    this.coords.x = x;
    this.coords.y = y;
  }
  this.getCoords = function(){ return this.coords; }
  
  this.setBoxId = function(boxId){ this.boxId += boxId; }
  this.getBoxId = function(){ return this.boxId; }
}
