var preview = {

 timer : null,
 isLoaded : false,
 isLoading : false,
 isScrollEvent : false,
 isLoadCreate : false,
 margines : 10,
 id_pr : 'preview-photo',
 id_text : 'preview-text',
 textMargin : 0,
 id_div : 'preview',
 img_obj : '',
 img_path : '',
 image : null,
 load_id : 'load-image',
 text : '',
 loadTrial : 0,
 maxTrial : 300,
 msgTrial : 200,
 msgLoad : ['ładowanie zdjęcia...','brak połączenia z serwerem...'],

//-------------------------------------------------------------------------------
 start : function(obj,path,text)
 {
  preview.clear();
  preview.load(obj,path,text);
 },
//-------------------------------------------------------------------------------
 load : function(obj,path,text)
 {
  preview.createLoad(mouseMove.x,mouseMove.y);

  preview_img = document.getElementById(preview.id_pr);
  preview_div = document.getElementById(preview.id_div);

  if(preview_img && preview_div)
  {
   if(!preview.isScrollEvent) 
   {
	 preview.isScrollEvent = true;
	 preview.setScroll();
   }

   if(preview.img_path == '') preview.img_path = path;
   if(preview.img_obj == '') preview.img_obj = obj;
   if(text != undefined) preview.text = text;

   if(preview.image == null)
   {
    preview.image = new Image();
    preview.image.src = preview.img_path;
   }

   if(!preview.image.complete)
   {
    if(preview.loadTrial > preview.maxTrial)
    {
      preview.clear();
      return;
    }
    else{
     preview.loadTrial++;
     preview.timer = window.setTimeout(preview.load,50);
    }
    //--
   }
   else
   {
    preview_img.src = preview.img_path;

    if(preview.timer) window.clearTimeout(preview.timer);

    preview.centerObj();

    preview.timer = null;
    preview.img_path = '';
    preview.img_obj = '';

    preview.setText(preview.image.width);

    //preview_div.style.display = 'inline';
    //preview_div.style.width = parseInt(preview.image.width + preview.margines) + 'px';

    preview_div.style.visibility = 'visible';

    preview.loadTrial = 0;
    preview.image = null;
    preview.hideLoad();
   }
  //--
  }
 },
//-------------------------------------------------------------------------------
 centerObj : function() 
 {
     var scroll = preview.getPositionScroll();
     var pos = preview.windowSize();

    centerLewa = preview.size(preview_img)[0];
    centerGora = preview.size(preview_img)[1];
	//alert(centerLewa  + ' x ' + centerGora);

	var xSide = mouseMove.x;
	var ySide = mouseMove.y;

	var xSide = centerLewa;
	var ySide = centerGora;

    var lewaSuma = parseInt(xSide + preview_div.clientWidth);
    var goraSuma = parseInt(ySide + preview_div.clientHeight);

    //alert('div: ' + preview_div.clientHeight + 'x' + preview_div.clientWidth + '\nscroll: ' + scroll[0] + ' x ' + scroll[1] + '\nmouse:' + mouseMove.x + 'x' + mouseMove.y + '\nokno: ' + pos[0] + 'x' + pos[1]);
    var suma_1 = parseInt(preview_div.clientWidth + scroll[0] + xSide);
    var suma_2 = parseInt(preview_div.clientHeight + scroll[1] + ySide);

    //alert('div: ' + preview_div.clientWidth + 'x' + preview_div.clientHeight + '\nscroll: ' + scroll[0] + ' x ' + scroll[1] + '\nmouse:' + mouseMove.x + 'x' + mouseMove.y +  '\n\n' + suma_1 + 'x' + suma_2 + '\n\nokno: ' + pos[0] + 'x' + pos[1]);

    var lewaX = xSide + scroll[0];
    var goraY = ySide + scroll[1];
    var odstep = 0;

    //if(lewaSuma > (pos[0] + scroll[0])) lewaX = xSide - (lewaSuma - pos[0] + odstep) + scroll[0];
    //if(goraSuma > (pos[1] + scroll[1])) goraY = ySide - (goraSuma - pos[1] + odstep) + scroll[1];

    //if(lewaSuma > pos[0]) lewaX = mouseMove.x - (lewaSuma - pos[0] + preview.margines) + scroll[0];
    //if(goraSuma > pos[1]) goraY = mouseMove.y - (goraSuma - pos[1] + preview.margines) + scroll[1];

    preview_div.style.left = (lewaX < 1 ? 0 : lewaX) + 'px';
    preview_div.style.top = (goraY < 1 ? 0 : goraY) + 'px';

 },
 //-------------------------------------------------------------------------------
 clear : function()
 {
  if(preview.timer) window.clearTimeout(preview.timer);

  preview.hide();
  preview.loadTrial = 0;

  preview.timer = null;
  preview.img_path = '';
  preview.img_obj = '';
  preview.image = null;
  preview.hideLoad();
 },
//-------------------------------------------------------------------------------
 hide : function()
 {
  preview_div = document.getElementById(preview.id_div);
  preview_img = document.getElementById(preview.id_pr);

  if(preview_div && preview_img)
  {
   preview_div.style.visibility = 'hidden';
   preview_img.src = "";
  }
 },
//-------------------------------------------------------------------------------
 size : function(img)
 {
  position = [0,0];
  if(img)
  {
   var w = preview.windowSize()[0];
   var h = preview.windowSize()[1];

   //alert(w + ' x ' + screen.width);
   //alert(h + ' x ' + screen.height);

   var img_w = img.width;
   var img_h = img.height;

   //alert('zdjecie:' + img_w + ' x ' + img_h);
   var lewa = parseFloat((w - img_w) / 2);
   var gora = parseFloat((h - img_h) / 2) - 20;
   //var gora = 40;

   position = [lewa,gora];

  }
   return position;
 },
//-------------------------------------------------------------------------------------------------
setScroll : function()
{
   if(window.addEventListener)  { window.addEventListener("scroll",preview.runScroll,false);  }
   else if(window.attachEvent)  { window.attachEvent("onscroll",preview.runScroll,false);  }
},
//-------------------------------------------------------------------------------------------------
runScroll : function()
{
  preview_div = document.getElementById(preview.id_div); 
  if(preview_div && preview_div.style.visibility == 'visible')
  {
    preview.centerObj();
  }
},
//-------------------------------------------------------------------------------------------------
 createLoad : function(lewa,top)
 {
  div = document.getElementById(preview.load_id);
  if(div)
  {
   div.style.left = lewa + 'px';
   div.style.top = top + 'px';

   var txtElement = div.getElementsByTagName("SPAN");
   if(txtElement.length == 0)
   {
     el = document.createElement("SPAN");
     el.innerHTML = this.msgLoad[0];
     div.appendChild(el);
   }

   if(preview.loadTrial > preview.msgTrial) 
   {
	    txtElement[0].innerHTML = this.msgLoad[1]; 
   }
   else{
    div.style.display = 'inline';
    preview.isLoading = true;
    txtElement[0].innerHTML = this.msgLoad[0]; 
   }


  }
  //--
 },
//-------------------------------------------------------------------------------
 setText : function(width)
 {
  div = document.getElementById(preview.id_text);
  if(div)
  {
   //preview.textMargin
   div.style.width = parseInt(width + preview.textMargin) + 'px';
   div.innerHTML = preview.text;
   preview.text = '';
  }
 },
//-------------------------------------------------------------------------------
 hideLoad : function()
 {
   div = document.getElementById(preview.load_id);
   if(div)
   {
     div.style.display = 'none';
     preview.isLoading = false;
   }
 },
//-------------------------------------------------------------------------------
  windowSize : function () {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  //window.alert( 'Width = ' + myWidth );
  //window.alert( 'Height = ' + myHeight );
  return [myWidth, myHeight];
},
//-------------------------------------------------------------------------------
 getPositionScroll : function()
 {
  var position = [0, 0];
  if (typeof window.pageYOffset != 'undefined')
  {
   position = [window.pageXOffset, window.pageYOffset];
  }
  else if (typeof document.documentElement.scrollTop != 'undefined' && document.documentElement.scrollTop > 0)
  {
   position = [document.documentElement.scrollLeft,document.documentElement.scrollTop];
  }
  else if (typeof document.body.scrollTop != 'undefined')
  {
   position = [document.body.scrollLeft,document.body.scrollTop];
  }
  return position;
}
//-------------------------------------------------------------------------------
}

