var totalWidth = 430;
var selectedColumn = 0;
var maxColumns = 4;
var Preloader = {
  callbacks: [],
  images: [],
  loadedImages: [],
  imagesLoaded: 0,

  add: function(image){
    if (typeof image == 'string') this.images.push(image);
    if (typeof image == 'array' || typeof image == 'object'){
      for (var i=0; i< image.length; i++){
        this.images.push(image[i]);
      }
    }
  },
  onFinish: function(func){
    if (typeof func == 'function') this.callbacks.push(func);
    if (typeof func == 'array' || typeof func == 'object'){
      for (var i=0; i< func.length; i++){
        this.callbacks.push(func[i]);
      }
    }
  },
  load: function(){
    for(var i=0; i<this.images.length; i++){
      this.loadedImages[i] = new Image();
      this.loadedImages[i].onload = function(){ Preloader.checkFinished.apply(Preloader) }
      this.loadedImages[i].src = this.images[i];
    }
  },

  checkFinished: function(){
    this.imagesLoaded++;
    if (this.imagesLoaded == this.images.length) this.fireFinish();
  },
  fireFinish: function(){
    for (var i=0; i<this.callbacks.length; i++){
      this.callbacks[i]();
    }
    this.images = [];
    this.loadedImages = [];
    this.imagesLoaded = 0;
    this.callbacks = [];
  }
}
function searchInArray(array, search) {
  for(var i = 0; i < array.length; i++)
    if(catArray[i] === search)
      return i;
  return -1;
}
function setMenu() {
  document.getElementById('col'+1+'h').onclick = function(){loadPage(catArray[0])};
}
function openMenu(cat/*, subcat*/) {
  openColumn(1);
	return false;
}
function openColumn(n) {
  if(selectedColumn!=n) {
    selectedColumn = n;
  	new Effect.Morph('col'+n+'b', {
	    style: 'margin-right:0',
  	  duration: 0.4
  	});
  } else {
    selectedColumn = 0;
    closeColumn(n);
  }
	return false;
}
function closeColumn(n) {
	new Effect.Morph('col'+n+'b', {
    style: 'margin-right:-'+totalWidth+'px',
	  duration: 0.4
	});
	return false;
}
function showLoader(n) {
  //document.getElementById('l'+n).style.visibility = 'visible';
  Effect.Appear('l'+n, { duration: 0.1 });
}
function hideLoader(n) {
  //document.getElementById('l'+n).style.visibility = 'hidden';
  Effect.Fade('l'+n, { duration: 0.1 });
}
function isFF35() {
  if (navigator.userAgent.indexOf("Firefox/3.5")<0&&navigator.userAgent.indexOf("Shiretoko/3.5")<0) {
    return false;
  } else {
    return true;
  }
}
function loadPage(cat, params/*, subcat*/) {
  var n = searchInArray(catArray,cat)+1;
  if(document.getElementById('col'+n+'b').innerHTML == 'loading' || params != undefined) {
    if(params==undefined) showLoader(n);
  
    var req = null;
    try{
      req = new XMLHttpRequest();
    } catch (ms){
      try{
        req = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (nonms){
        try{
          req = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (failed){
          req = null;
        }
      }  
    }


  
    if (req == null)
      alert('Error creating request object!');
  
    var uri = 'http://www.felix-moeller.net/load/'+(n-1)+','+language;
    //if(params!=undefined) uri += "?"+params;
    //alert("open "+uri);
    req.open("POST", uri, true);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    if(params!=undefined) req.setRequestHeader("Content-length", params.length);
    req.setRequestHeader("Connection", "close");

    /*if (isFF35()){
      req.onload = req.onerror = req.onabort = function(){
        document.getElementById('col'+n+'b').innerHTML = req.responseText;
        hideLoader(n);
        openMenu(cat, subcat);
      };
    } else {*/
      req.onreadystatechange = function(){            
        switch(req.readyState) {
          case 4:
            if(params == undefined) {
              var regex = /<img.*src="([a-zA-Z:/._-]*)">/;
              var m = regex.exec(req.responseText);
              if (m == null) {
                document.getElementById('col'+n+'b').innerHTML = req.responseText;
                hideLoader(n);
                openMenu(cat/*, subcat*/);
              } else {
                var s = new Array();
                for (i = 1; i < m.length; i++) {
                  if (m[i]!='')
                    s.push(m[i]);
                  }
                Preloader.add(s);
                Preloader.onFinish(function(){
                  document.getElementById('col'+n+'b').innerHTML = req.responseText;
                  hideLoader(n);
                  openMenu(cat/*, subcat*/);
                });
                Preloader.load();
              }
            } else {
              switch (req.responseText) {
                case 'sent_true':
                  // WIN
                  //if (document.getElementById('box_success').style.display == 'none') {
                    new Effect.BlindUp('input_form', { duration: 0.5 });
                    new Effect.BlindDown('box_success', { duration: 0.5, queue: 'end' });
                  /*} else {
                    new Effect.BlindUp('box_success', { duration: 0.5 });
                  }*/
                break;
                case 'sent_false':
                  formEnable();
                  new Effect.BlindDown('box_warning', { duration: 0.3 });
                break;
                case 'sent_already':
                  formEnable();
                  new Effect.BlindDown('box_warning_already', { duration: 0.3 });
                break;
                default:
                  alert('error! '+req.responseText);
                break;
              }
            }
          break;
        
          default:
            return false;
          break;     
        }
      };
    //}
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    if(params==undefined)
      req.send(null);
    else
      req.send(params);
  } else {
    openMenu(cat/*, subcat*/);
  }
}
function visitAnchor() {
  if (location.hash!="") {
    var regex = /#([A-Za-z0-9_]*)\/?([A-Za-z0-9_]*)?/;
    regex.exec(location.hash);
    if(RegExp.$1!="" && RegExp.$2!="") {
        var cat = RegExp.$1;
        var subcat = RegExp.$2;
        loadPage(cat/*, subcat*/);
    } else if(RegExp.$1!="") {
        var cat = RegExp.$1;
        loadPage(cat);
    }
  }
}
function init() {
  setMenu();
  visitAnchor();
}
function highlight(target) {
	new Effect.Highlight(target, {
		startcolor: '#FFDEBB',
		endcolor: '#ffffff'
		});
	return false;
}
function formCheckFilled(target) {
  if (document.getElementById(target).value == "") {
	  return false;
  } else {
	  return true;
  }
}
function formCheckMail(target){	
  var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
  if(pattern.test(document.getElementById(target).value)){
	  return true;
  } else {
	  return false;
  }
}
function elementDisable(target) {
  document.getElementById(target).disabled = true;
	new Effect.Morph(target, {
	  style: 'background-color:#DDD',
	  duration: 0.3
	});
  return false;
}
function elementEnable(target) {
  document.getElementById(target).disabled = false;
	new Effect.Morph(target, {
	  style: 'background-color:#FFF',
	  duration: 0.3
	});
  return false;
}
function formDisable() {
  //document.getElementById('l_send').style.visibility = 'visible';
  Effect.Appear('l_send', { duration: 0.1 });
  elementDisable('name');
  elementDisable('email');
  elementDisable('subject');
  elementDisable('message');
  return false;
}
function formEnable() {
  //document.getElementById('l_send').style.visibility = 'hidden';
  Effect.Fade('l_send', { duration: 0.1 });
  elementEnable('name');
  elementEnable('email');
  elementEnable('subject');
  elementEnable('message');
  return false;
}

function sendMail() {
  var fault = false;
  //alert("start sending!");

  // IE fix
  this.blur();

  // check if input is correct
  // ...
  if(!formCheckFilled('name')) {
    highlight('name');
    fault = true;
  }
  if(!formCheckMail('email')) {
    highlight('email');
    fault = true;
  }
  if(!formCheckFilled('subject')) {
    highlight('subject');
    fault = true;
  }
  if(!formCheckFilled('message')) {
    highlight('message');
    fault = true;
  }


  // name, mail, subject, message, btn_send
  // disable inputs & submit button
  if (!fault) {
  
    formDisable();

    //document.getElementById('btn_send').className = 'button_deactivated';
    //document.getElementById('btn_send').onclick = '';
    
    // GET PARAMS
    var params = "";
    params += "name=";
    params += document.getElementById('name').value;
    params += "&email=";
    params += document.getElementById('email').value;
    params += "&subject=";
    params += document.getElementById('subject').value;
    params += "&message=";
    params += document.getElementById('message').value;
    
    loadPage(catArray[0], params);

  }



  // when finished...
  //document.getElementById('l_send').style.visibility = 'hidden';

  //alert("stop sending!");
  //return false;
}

function slide(el, count, direction, big) {
  var m = parseInt(document.getElementById(el).style.marginLeft);
  if(isNaN(m)) m = 0;
  if(big)
    var q = 1008;
  else
    var q = 351;
  var pos = Math.round(m/q);
  if (direction) {
    m = (pos+1)*q;
    if (m > 0)
      m = 0;
    if (m >= 0)
      hideOverlay('prev_'+el);
    showOverlay('next_'+el);
  } else {
    m = (pos-1)*q;
    if (m < -(q * (count - 1)))
      m = -(q * (count - 1));
    if (m <= -(q * (count - 1)))
      hideOverlay('next_'+el);
    showOverlay('prev_'+el);
  }
	new Effect.Morph(el, {
   style: 'margin-left:'+m+'px;',
	 duration: 0.3,
   queue: 'end'
	});
	return false;
}
function hideOverlay(el) {
  document.getElementById(el).style.visibility = 'hidden';
}
function showOverlay(el) {
  document.getElementById(el).style.visibility = 'visible';
}
function zoom(id, image, count) {
  Effect.Appear(id+'l', { duration: 0.5 });
  var m = parseInt(document.getElementById(id).style.marginLeft);
  if(isNaN(m)) m = 0;
  var q = 351;
  var pos = Math.round(m/q);
  var imgfolder = 'http://felix-moeller.net/img/db/';
  document.getElementById('imgbig').innerHTML = '<img id="imgslide" src="'+imgfolder+image+'" alt="img" />';
  document.getElementById('imgbig').style.marginLeft = 1008*pos+'px';
  document.getElementById('imgbig').onLoad = function() {overlay(true);};
  document.getElementById('prev_imgbig').onclick = function(){slide('imgbig',count,true,true);}
  document.getElementById('next_imgbig').onclick = function(){slide('imgbig',count,false,true);}
  
  var n = -(pos-1);
  if (n >= count)
    hideOverlay('next_imgbig');
  else
    showOverlay('next_imgbig');

  if (n <= 1)
    hideOverlay('prev_imgbig');
  else
    showOverlay('prev_imgbig');
  
  
  Preloader.add(imgfolder+image);
  Preloader.onFinish(function(){
    overlay(true);
    Effect.Fade(id+'l', { duration: 0.5 });
  });
  Preloader.load();
}
function overlay(display) {
  if(display) {
    document.getElementById('overlay').style.visibility = 'visible';
    Effect.Appear('overlay', { duration: 0.3 });
	} else {
    Effect.Fade('overlay', { duration: 0.3 });
	}
}

