ResizeObj = {}

ResizeObj.obj = document.getElementById('ImageContainer'); 
ResizeObj._timer = null; 
ResizeObj._tweenRunning = null; 
ResizeObj._origW = null;
ResizeObj._origH = null;
ResizeObj._origTop = null;
ResizeObj._origLeft = null;
ResizeObj._endW = null;
ResizeObj._endH = null;


ResizeObj.sizeTo = function(w,h){ // set the size of the element
    ResizeObj.obj.style.width = w+'px'; 
    ResizeObj.obj.style.height = h+'px'; 
}
ResizeObj.moveTo = function(x,y){ // move the element to a new position
    ResizeObj.obj.style.left = x+"px";
    ResizeObj.obj.style.top  = y+"px";
}
ResizeObj.moveBy = function(x,y){ // move the element to a new position relative to it's current position
    ResizeObj.obj.style.left = ResizeObj.getLeft()+x+"px";
    ResizeObj.obj.style.top  = ResizeObj.getTop()+y+"px";
}
ResizeObj.getLeft = function(){ // left position of the element
    return parseInt(ResizeObj.obj.style.left || 0);
}
ResizeObj.getTop = function(){ // top position of the element
    return parseInt(ResizeObj.obj.style.top || 0);
}
 
ResizeObj.tweenTo = function(method, start, end, time){ // time-based animation, with multiple easing methods
// method: a function that takes 4 arguments: time, start, change, and duration
// start: array of starting width, height dimensions [w, h]
// end: array of ending width, height dimensions [w, h]
// time: number of 'frames' it takes to get to the end position
        
    if(!ResizeObj._tweenRunning){
        ResizeObj._tweenTime = 0;
        var s = '['+start.toString()+']';
        var e = '['+end.toString()+']';
        ResizeObj._timer = setInterval('ResizeObj.tweenTo('+method+','+s+','+e+','+time+')', 33);
        ResizeObj._tweenRunning = true;
    }
    if(++ResizeObj._tweenTime > time){
        ResizeObj.cancelTween();
    }else{
        var w = method(ResizeObj._tweenTime, start[0], end[0]-start[0], time);
        var h = method(ResizeObj._tweenTime, start[1], end[1]-start[1], time);

        var diffX = Math.round(w-ResizeObj._origW);
        var diffY = Math.round(h-ResizeObj._origH);
        var moveTop  = ResizeObj._origTop-(Math.round(diffY/2));
        var moveLeft = ResizeObj._origLeft-(Math.round(diffX/2));
        //if ((w <= ResizeObj._endW) && (h <= ResizeObj._endH)) {
            ResizeObj.moveTo(moveLeft,moveTop); 
            
            ResizeObj.sizeTo(w,h);
        //}
    }
}
ResizeObj.cancelTween = function(){ // cancel the tweenTo method
    clearInterval(this._timer);
    ResizeObj._timer = null;
    ResizeObj._tweenRunning = false;
    ResizeObj._startFade = true;
}

// -> Easing Equations by Robert Penner - robertpenner.com -
linearTween = function(t, b, c, d){
    return c*t/d + b;
}
easeInQuad = function(t, b, c, d){
    t /= d;
    return c*t*t + b;
}
easeOutQuad = function(t, b, c, d){
    t /= d;
    return -c * t*(t-2) + b;
}
easeInOutQuad = function(t, b, c, d){
    t /= d/2;
    if (t < 1) return c/2*t*t + b;
    t--;
    return -c/2 * (t*(t-2) - 1) + b;
}
easeInExpo = function(t, b, c, d){
    return c * Math.pow( 2, 10 * (t/d - 1) ) + b;
}
easeOutExpo = function(t, b, c, d){
    return c * ( -Math.pow( 2, -10 * t/d ) + 1 ) + b;
}


 



function windowsOffsetX(){ // x irányú scroll
    var offsetX = 0;

    //IE
    if(!window.pageYOffset)
    {
        //strict mode
        if(!(document.documentElement.scrollTop == 0))
        {
            offsetX = document.documentElement.scrollLeft;
        }
        //quirks mode
        else
        {
            offsetX = document.body.scrollLeft;
        }
    }
    //w3c
    else
    {
        offsetX = window.pageXOffset;
    }
    return offsetX;
}

function windowsOffsetY(){ // y irányú scroll
    var offsetY = 0;

    //IE
    if(!window.pageYOffset)
    {
        //strict mode
        if(!(document.documentElement.scrollTop == 0))
        {
            offsetY = document.documentElement.scrollTop;
        }
        //quirks mode
        else
        {
            offsetY = document.body.scrollTop;
        }
    }
    //w3c
    else
    {
        offsetY = window.pageYOffset;
    }
    return offsetY;
}


function windowsWidth(){ //ablakméret szélesség
    var w = 0;
    //IE
    if(!window.innerWidth)
    {
        //strict mode
        if(!(document.documentElement.clientWidth == 0))
        {
            w = document.documentElement.clientWidth;
        }
        //quirks mode
        else
        {
            w = document.body.clientWidth;
        }
    }
    //w3c
    else
    {
        w = window.innerWidth;
    }
    return w;
}

function windowsHeight(){ //ablakméret magasság
    var h = 0;
    //IE
    if(!window.innerWidth)
    {
        //strict mode
        if(!(document.documentElement.clientWidth == 0))
        {
            h = document.documentElement.clientHeight;
        }
        //quirks mode
        else
        {
            h = document.body.clientHeight;
        }
    }
    //w3c
    else
    {
        h = window.innerHeight;
    }
    return h;
}


function ScrollLeft(){ // x irányú scroll
    var offsetX = 0;

    //IE
    if(!window.pageYOffset)
    {
        //strict mode
        if(!(document.documentElement.scrollLeft == 0))
        {
            offsetX = document.documentElement.scrollLeft;
        }
        //quirks mode
        else
        {
            offsetX = document.body.scrollLeft;
        }
    }
    //w3c
    else
    {
        offsetX = window.pageXOffset;
    }
    return offsetX;
}

function ScrollTop(){ // y irányú scroll
    var offsetY = 0;

    //IE
    if(!window.pageYOffset)
    {
        //strict mode
        if(!(document.documentElement.scrollTop == 0))
        {
            offsetY = document.documentElement.scrollTop;
        }
        //quirks mode
        else
        {
            offsetY = document.body.scrollTop;
        }
    }
    //w3c
    else
    {
        offsetY = window.pageYOffset;
    }
    return offsetY;
}


function FullHeight(){ // ablak teljes m?rete
    if (windowsHeight() > document.documentElement.scrollHeight) {
        return  windowsHeight();
    }
    return document.documentElement.scrollHeight;
}

function FullWidth(){ // ablak teljes m?rete
    //return document.documentElement.clientWidth;
    return document.documentElement.scrollWidth;
    if (windowsWidth() > document.documentElement.scrollWidth) {
        return  windowsWidth();
    }
    return document.documentElement.scrollWidth;
}
  
function toggleObjects(action) {    
    var selects = document.getElementsByTagName('object');    
    if(action == 'hide') 
    {        
        for(i=0; i < selects.length; i++) 
        {            
            selects[i].style.visibility='hidden';        
        }    
    } 
    else if(action == 'show') 
    {        
        for(i=0; i < selects.length; i++) 
        {            
            selects[i].style.visibility='visible';        
        }    
    }
}

function toggleSelects(action) {    
    var selects = document.getElementsByTagName('select');    
    if(action == 'hide') 
    {        
        for(i=0; i < selects.length; i++) 
        {            
            selects[i].style.display='none';        
        }    
    } 
    else if(action == 'show') 
    {        
        for(i=0; i < selects.length; i++) 
        {            
            selects[i].style.display='';        
        }    
    }
}

function fadeIn(obj, level, speed, callback)
{
  if (level === undefined) var level = 100;
  if (speed === undefined) var speed = 70;

  ChangeOpacity(null,obj,0);
  for (var i=0; i<=level; i++)
  {
//    setTimeout(ChangeOpacity(i*10,obj), speed*i);
    setTimeout(bind(ChangeOpacity,  obj, i), speed*i);
  }
//  if (callback) setTimeout(callback, speed*(i+1));
}

function bind(fn)
{
    var args = [];
    for (var n=1; n<arguments.length; n++) args.push(arguments[n]);
    return function(e) { return fn.apply(this, [e].concat(args)); };
}

    
function ChangeOpacity(e, id, opacity)
{
    var object = id.style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

var ImageBoxer = 
{
    element: document.getElementById("ImageBoxDiv"),
    myimage: new Image(),
    img_url: "",
    img_array: new Array(),
    img_index: null,
    titles_array: new Array(),
    init: function()
    {
        document.onkeypress = ImageBoxer.checkPress;
        ImageBoxer.element.onclick = ImageBoxer.hide;
        ImageLoader.element.onclick = ImageBoxer.hide;
        ImageBoxer.myimage.onload = ImageBoxer.ImageLoaded;
        
    },
    checkPress: function(e)
    {
        document.onkeypress = "";
        ImageBoxer.hide();
    },
    hide: function()
    {
        ChangeOpacity(null,ImageBoxer.element,0)
        ImageConatinerObj.hide();
        ImageBoxer.element.style.display = 'none';
        toggleSelects('show');
        toggleObjects('show');
        Sidebar.hide();
        ImageTitleBarObj.hide();
    },
    show: function(url,index,imgs,titles)
    {
        //alert(url + '-'+index+'-'+imgs);
        ImageBoxer.img_url = url;
        ImageBoxer.img_index = index;
        ImageBoxer.img_array = imgs.split(',');
        ImageBoxer.titles_array = titles.split(',');;
        
        ImageBoxer.element.style.width = FullWidth() +"px";
        ImageBoxer.element.style.height = FullHeight() +"px";
        
        Sidebar.hide();
        ImageTitleBarObj.hide();

        ImageBoxer.init();
        toggleSelects('hide');
        toggleObjects('hide');

        
        ImageLoader.hide();
        
        LoadAjaxLoader.show();

        
        ImageConatinerObj.waiting();

        
        var akt_img = ImageBoxer.img_url + ImageBoxer.img_array[ImageBoxer.img_index];
        
        ImageBoxer.imgName = akt_img;
        
        var a = setTimeout(ImageBoxer.LoadImage,200);
        
        if (ImageBoxer.element.style.display != 'block')
        {
            ImageBoxer.element.style.display = 'block';
            ChangeOpacity(null, ImageBoxer.element, 0);
            fadeIn(ImageBoxer.element, 80, 7, "callback");
        }
       
    },
    LoadImage: function() 
    {
            ImageBoxer.myimage.src = ImageBoxer.imgName;
    },
    ImageLoaded: function()
    {
        ImageConatinerObj.show(ImageBoxer.myimage);
    } 
        
}

var ImageConatinerObj = 
{
    element: document.getElementById("ImageContainer"),
    myimage: new Image(),
    show: function(img) 
    {
      ImageConatinerObj.resize();
      ImageConatinerObj.myimage = img;
      setTimeout(ImageConatinerObj.LoadImage,1200);
    },
    LoadImage: function()
    {
      ImageLoader.show(ImageConatinerObj.myimage.src);
      LoadAjaxLoader.hide();
      ImageLoader.element.style.visibility = 'visible';
      fadeIn(ImageLoader.element, 100, 10, "callback");
      Sidebar.show();
      ImageTitleBarObj.show();
    },
    hide: function()
    {
        ImageConatinerObj.element.style.display = 'none';
    },
    resize: function()
    {
     if (ImageConatinerObj.element.style.height) 
     {
        ResizeObj._origH = parseInt(ImageConatinerObj.element.style.height);
        ResizeObj._origW = parseInt(ImageConatinerObj.element.style.width);
     }
     else
     {
        ResizeObj._origH = 200;
        ResizeObj._origW = 200;
     }

      ResizeObj._endW = parseInt(ImageBoxer.myimage.width);
      ResizeObj._endH = parseInt(ImageBoxer.myimage.height)+40;

      ResizeObj._origTop = parseInt(ImageConatinerObj.element.style.top);
      ResizeObj._origLeft = parseInt(ImageConatinerObj.element.style.left);
      ResizeObj.tweenTo(easeOutQuad, [ResizeObj._origW, ResizeObj._origH], [ResizeObj._endW,ResizeObj._endH], 25);      
    },
    waiting: function()
    {
      var windw = windowsWidth();
      var windh = windowsHeight();
      var offsetx = windowsOffsetX();
      var offsety = windowsOffsetY();

      var _top=0;
      var _left=0;
      
      
     if (ImageConatinerObj.element.style.height) 
     {
        var box_h = parseInt(ImageConatinerObj.element.style.height);
        var box_w = parseInt(ImageConatinerObj.element.style.width);
     }
     else
     {
        var box_h = 200;
        var box_w = 200;
     }
        //alert(box_h+'-'+box_w);
      _left=Math.round((windw-box_w)/2)+offsetx;
      _top=Math.round((windh-box_h)/2)+offsety;
      //alert(_top+'-'+_left);
      ImageConatinerObj.element.style.top  = _top  +"px";
      ImageConatinerObj.element.style.left = _left +"px";
      
      ImageConatinerObj.element.style.display = 'block';      

    }
   
}
var ImageLoader = 
{
    element: document.getElementById("ImageBox_image"),
    show: function(img) 
    {
      ImageLoader.element.src = img;
      ImageLoader.element.style.display = 'block';
    },
    hide: function() 
    {
      ImageLoader.element.style.display = 'none';
    }

}
var LoadAjaxLoader = 
{
    element: document.getElementById("LoadContainer"),
    show: function() 
    {
        var windw = windowsWidth();
        var windh = windowsHeight();
        var offsetx = windowsOffsetX();
        var offsety = windowsOffsetY();

        var _top=0;
        var _left=0;

        _left=Math.round((windw-100)/2)+offsetx;
        _top=Math.round((windh-100)/2)+offsety;

        LoadAjaxLoader.element.style.top  = _top +"px";
        LoadAjaxLoader.element.style.left = _left +"px";
        LoadAjaxLoader.element.style.display = 'block';
    },
    hide: function() 
    {
      LoadAjaxLoader.element.style.display = 'none';
    }
}

var ImageTitleBarObj = 
{
    element: document.getElementById("ImageTitleBar"),
    show: function() 
    {
      document.getElementById("ImageTitle").innerHTML = ImageBoxer.titles_array[ImageBoxer.img_index];
      ImageTitleBarObj.element.style.visibility = 'visible';
    },
    hide: function() 
    {
      ImageTitleBarObj.element.style.visibility = 'hidden';
    }
}


var Sidebar = 
{
    element: document.getElementById("LinkContainer"),
    show: function() 
    {
        Sidebar.element.style.display = 'block';
        document.getElementById("PrevLink").onclick = Sidebar.prev;
        document.getElementById("NextLink").onclick = Sidebar.next;
    },
    hide: function() 
    {
        Sidebar.element.style.display = 'none';
    },
    next: function()
    {
  //      alert(ImageBoxer.img_index);
       var akt_array = ImageBoxer.img_array.toString();
       var titles_array = ImageBoxer.titles_array.toString();
       
       if (parseInt(ImageBoxer.img_index) == ImageBoxer.img_array.length-1) 
       {
            var akt_index = 0;
       } 
       else
       {
            var akt_index = parseInt(ImageBoxer.img_index)+1;
       }
       
       ImageBoxer.show(ImageBoxer.img_url,akt_index,akt_array,titles_array);
    },
    prev: function()
    {
       var akt_array = ImageBoxer.img_array.toString();
       var titles_array = ImageBoxer.titles_array.toString();
       
       if (parseInt(ImageBoxer.img_index) == 0)
       {
            var akt_index = ImageBoxer.img_array.length-1;
       }
       else
       {
            var akt_index = parseInt(ImageBoxer.img_index)-1;
       }
       
       ImageBoxer.show(ImageBoxer.img_url,akt_index,akt_array,titles_array);
    }

        
}
