var imagePreview_imgWidth = -1;
var imagePreview_imgHeight = -1;

function openImagePreview(imageUrl, w, h, filename, urn)
{
    var img = new Image();
    img.src = imageUrl;
    img.width = w;
    img.Height = h;

    imagePreview_imgWidth = w;
    imagePreview_imgHeight = h;

    var imagepreviewOverlay = document.getElementById('imagepreview-overlay');
    var imagepreviewWrap = document.getElementById('imagepreview-wrap');
    var imagepreviewInner = document.getElementById('imagepreview-inner');
    var imagepreviewImg = document.getElementById('imagepreview-img');

    if (imagepreviewOverlay && imagepreviewWrap && imagepreviewInner && imagepreviewImg)
    {
        var imgTooltip = '';
        if (filename && filename.length > 0)
        {
            imgTooltip = filename;
        }
        if (urn && urn.length > 0)
        {
            if (imgTooltip.length > 0)
            {
                imgTooltip = imgTooltip + '\n';
                imgTooltip = imgTooltip + urn;
            }
        }
        imagepreviewImg.src = img.src;
        imagepreviewImg.title = imgTooltip;
        imagepreviewImg.alt = imgTooltip;

        imagepreviewInner.style.height = img.height;
        imagepreviewInner.style.width = img.width;

        resizeImagePreview();

        imagepreviewWrap.style.display = 'block';
        imagepreviewOverlay.style.display = 'block';
    }
}

function resizeImagePreview()
{
    var imagepreviewOverlay = document.getElementById('imagepreview-overlay');
    var imagepreviewWrap = document.getElementById('imagepreview-wrap');
    var imagepreviewInner = document.getElementById('imagepreview-inner');
    var imagepreviewImg = document.getElementById('imagepreview-img');

    if (imagepreviewOverlay && imagepreviewWrap && imagepreviewInner && imagepreviewImg)
    {
        var frameWidth = 10;

        var wh = GetBowserWidthHeight();
        var areaWidth = wh[0];
        var areaHeight = wh[1];

        var xy = GetBowserScrollXY();
        var scrX = xy[0];
        var scrY = xy[1];

        var imgW = imagePreview_imgWidth;
        var imgH = imagePreview_imgHeight;

        if (imgW < 0) { imgW = parseInt(imagepreviewInner.style.width); }
        if (imgH < 0) { imgH = parseInt(imagepreviewInner.style.height); }

        if (isNaN(imgW)) { imgW = 0; }
        if (isNaN(imgH)) { imgH = 0; }

        if (imgW > 0 && imgH > 0)
        {
            var maxWidth = areaWidth - 50;
            var maxHeight = areaHeight - 50;

            if (imgW > maxWidth || imgH > maxHeight)
            {
                var kvotW = ((1000 * imgW) / (1000 * maxWidth));
                var kvotH = ((1000 * imgH) / (1000 * maxHeight));

                var kvot = (kvotH > kvotW) ? kvotH : kvotW;

                imgW = parseInt(((1000*imgW) / kvot) / 1000);
                imgH = parseInt(((1000*imgH) / kvot) / 1000);
            }
        }

        var overlayWidth = scrX + areaWidth;
        var overlayHeight = scrY + areaHeight;

        var frm = document.getElementById('Form');
        if (frm)
        {
            overlayWidth = frm.clientWidth;
            overlayHeight = frm.clientHeight;
        }

        imagepreviewInner.style.top = frameWidth;
        imagepreviewInner.style.left = frameWidth;
        imagepreviewInner.style.height = imgH;
        imagepreviewInner.style.width = imgW;
        
        imagepreviewWrap.style.top = scrY + ((areaHeight - imgH) / 2) - frameWidth;
        imagepreviewWrap.style.left = scrX + ((areaWidth - imgW) / 2) - frameWidth;
        imagepreviewWrap.style.height = imgH + (frameWidth * 2);
        imagepreviewWrap.style.width = imgW + (frameWidth * 2);

        if (GetBehavior() != 'IE')
        {
            imagepreviewOverlay.style.position = 'fixed';
        }
        imagepreviewOverlay.style.width = overlayWidth;
        imagepreviewOverlay.style.height = overlayHeight;
    }
}

function resizeImagePreviewOnWindowResize()
{
    var imagepreviewOverlay = document.getElementById('imagepreview-overlay');
    var imagepreviewWrap = document.getElementById('imagepreview-wrap');

    if (imagepreviewOverlay && imagepreviewWrap)
    {
        if (imagepreviewOverlay.style.display == 'block' || imagepreviewWrap.style.display == 'block')
        {
            resizeImagePreview();
        }
    }
}

function closeImagePreview()
{
    var imagepreviewOverlay = document.getElementById('imagepreview-overlay');
    var imagepreviewWrap = document.getElementById('imagepreview-wrap');
    var imagepreviewInner = document.getElementById('imagepreview-inner');
    var imagepreviewImg = document.getElementById('imagepreview-img');

    imagePreview_imgWidth = -1;
    imagePreview_imgHeight = -1;

    if (imagepreviewOverlay && imagepreviewWrap)
    {
        if (imagepreviewImg)
        {
            imagepreviewImg.src = null;
            imagepreviewImg.title = null;
            imagepreviewImg.alt = null;
        }

        if (imagepreviewInner)
        {
            imagepreviewInner.style.top = null;
            imagepreviewInner.style.left = null;
            imagepreviewInner.style.height = null;
            imagepreviewInner.style.width = null;
        }

        imagepreviewWrap.style.top = null;
        imagepreviewWrap.style.left = null;
        imagepreviewWrap.style.height = null;
        imagepreviewWrap.style.width = null;
        imagepreviewWrap.style.display = 'none';

        imagepreviewOverlay.style.display = 'none';
    }
}

function GetBowserWidthHeight()
{
    var x = 0, y = 0;
    var w = 0, s = 0;

    if (self.innerHeight)
    {
        x = self.innerWidth;
        y = self.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight)
    {
        x = document.documentElement.clientWidth;
        y = document.documentElement.clientHeight;
    }
    else if (document.body)
    {
        x = document.body.clientWidth;
        y = document.body.clientHeight;
    }
    
    return [x, y];
}

function GetBowserScrollXY()
{
    var scrOfX = 0, scrOfY = 0;
    if (typeof(window.pageYOffset) == 'number')
    {
        scrOfY = window.pageYOffset;
        scrOfX = window.pageXOffset;
    }
    else if (document.body && (document.body.scrollLeft || document.body.scrollTop))
    {
        scrOfY = document.body.scrollTop;
        scrOfX = document.body.scrollLeft;
    }
    else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
    {
        scrOfY = document.documentElement.scrollTop;
        scrOfX = document.documentElement.scrollLeft;
    }

    return [scrOfX, scrOfY];
}

function GetBehavior()
{
    if (self.innerHeight)
    {
        //Mozilla compliant
        return 'Mozilla';
    }
    else if (document.documentElement && document.documentElement.clientHeight)
    {
        //DOM compliant
        return 'DOM';
    }
    else if (document.body)
    {
        //IE standards compliant mode
        return 'IE';
    }

    return '';
}


var addEvent = function (elem, type, eventHandle)
{
    if (elem == null || elem == undefined) return;

    if (elem.addEventListener)
    {
        elem.addEventListener(type, eventHandle, false);
    }
    else if (elem.attachEvent)
    {
        elem.attachEvent("on" + type, eventHandle);
    }
};

addEvent(window, "resize", function () { resizeImagePreview(); });

