
/*-------------------------------------------------------------------------------------*/
_alphaSequence = [];


function initPage(preloadImages)
{
    preloadImages = false;
    if (preloadImages)
         psiLoadImages(slideTop);
    else slideTop();
}


/*-------------------------------------------------------------------------------------*/
var _psiCallback, _psiSiteImages, _psiCounter;

function psiLoadImages(callback)
{
    _psiCallback = callback;
    _psiSiteImages = psiGetSiteImages(true, false);
    _psiCounter = 0;

    //if (_psiCounter == 0) return psiImageDone();

    var img, imgSrc, seed = (new Date).getTime();

    for (source in _psiSiteImages)
    {    trace("image: "+source);
        if (isObject(_psiSiteImages[source]))
        {
            _psiCounter++;
            //imgSrc = _psiSiteImages[imgIdx].src;
            _psiSiteImages[source].src = imgSrc = _psiSiteImages[source].src;
            //_psiSiteImages[imgIdx].src = imgSrc;
            _psiSiteImages[source].onload = _psiSiteImages[source].onabort = _psiSiteImages[source].onerror = psiImageDone;
            continue;
        }
        _psiCounter++;
        img = new Image();
        img.onload = img.onabort = img.onerror = psiImageDone;
        img.src = source + "?" + seed;
    }
}


function trace(msg)
{
    $("trace").innerHTML += msg + "<br />";
}


/*-------------------------------------------------------------------------------------*/
function psiImageDone(e)
{      trace(_psiCounter);
    _psiCounter--;
    if (_psiCounter == 0)
        if (isFunction(_psiCallback)) {
            return _psiCallback();
        }
}


/*-------------------------------------------------------------------------------------*/
function psiGetSiteImages(cssImages, htmlImages)
{
    var images = [], urlGarbage = new RegExp("something", "g");
    urlGarbage.compile("\"|\\.\\./|url\\(", "gi");

    if (cssImages)
    {
        var sheet, rules, sheetIdx, ruleIdx, found, i,
            imgPattern = new RegExp('url\\(([^\)]*)', "ig");

        for (var sheetIdx = 0; sheetIdx < document.styleSheets.length; sheetIdx++) with (document.styleSheets)
        {
            sheet = item(sheetIdx);
            if (sheet.cssText)
            {
                found = sheet.cssText.match(imgPattern);
                for (i in found) if (isString(found[i]) && i > 0)
                    images[found[i].replace(urlGarbage, "")] = 1;
            }
            else for (ruleIdx = 0; ruleIdx < sheet.cssRules.length; ruleIdx++) with (sheet.cssRules[ruleIdx])
            {
                found = cssText.match(imgPattern);
                for (i in found) if (isString(found[i]))
                    images[found[i].replace(urlGarbage, "")] = 1;
            }
        }
    }

    if (htmlImages)
    {
        var elements = document.body.getElementsByTagName("img");
        for (var i in elements)
            if (isObject(elements[i]) && !isUndefined(elements[i].src))
                images.push(elements[i]);
    }

    return images;
}


/*-------------------------------------------------------------------------------------*/
function slideTop()
{
    //$("preload-info").parentNode.removeChild($("preload-info"));
    $("main-table").style.display = "block";
    setTimeout('transformElementAlpha("topimg", 0.15, 1, 90)', 500);
    setTimeout('transformElementAlpha("logo", 0.08  , 1, 90)', 1400);
    setTimeout('transformElementAlpha("location", 0.08, 1, 90)', 1400);

    for (i in _alphaSequence)
        setTimeout('transformElementAlpha("'+_alphaSequence[i][0]+'", '+_alphaSequence[i][1]+', '+_alphaSequence[i][2]+', '+_alphaSequence[i][3]+')', _alphaSequence[i][4]);
}


/*-------------------------------------------------------------------------------------*/
function deletePortfolio(pid)
{
    if (confirm('Usunąć portfolio?'))
        document.location = '?a=deleteportfolio&pid=' + pid;
}

/*-------------------------------------------------------------------------------------*/
function deleteGalleryImage(gid, iid)
{
    if (confirm('Usunąć obraz?'))
        document.location = '?a=deletegalleryimage&gid=' + encodeURIComponent(gid) + "&iid=" + encodeURIComponent(iid) + "#gallery";
}

/*-------------------------------------------------------------------------------------*/
function showHideElement(el)
{
    if (!$(el)) return;
    var el = $(el);
    el.style.display = (el.style.display == "none") ? "block" : "none";
}

/*-------------------------------------------------------------------------------------*/
var _viewedImg, _pWindowW = 640, _pWindowH = 480, _wndTimer;

function showGalleryImage(imagePath, bShowNav)
{
    var wnd = $('presentation-window'),
        wndBody = $('presentation-window-body'),
        wndNav = $('presentation-window-nav');

    if (wndNav)
        wndNav.style.display = bShowNav ? 'block' : 'none';

    if (!wnd) {
        _viewedImg.onload = null;
        alert("Błąd. Nie odnaleziono okna prezentacyjnego.");
    }

    wnd.style.zIndex = 2;

    if (_viewedImg)
        _viewedImg.onload = null;

    _viewedImg = new Image();
    _viewedImg.className = "presentation-image";
    _viewedImg.id = "presentation-image";
    _viewedImg.onload = showImage;
    _viewedImg.error = _viewedImg.onabort = hideGalleryImage;
    _viewedImg._state = 0;

    setOpacity(_viewedImg, 0);

    blockSite(true);

    wndBody.innerHTML = "<div class=\"loading-info\"><h1 style='padding: 5px; margin: 0px;'>Ładuję <span>obraz...</span></h1></div>";
    setOpacity(wnd, 1);
    wnd.style.display = "block";
    centerWindow(wnd);

    _viewedImg.src = imagePath;
}

/*-------------------------------------------------------------------------------------*/
function showImage()
{
    var wnd = $('presentation-window'),
        wndBody = $('presentation-window-body');
    wndBody.innerHTML = "";

    var ratio = Math.min(_pWindowW / _viewedImg.width, _pWindowH / _viewedImg.height);
    _viewedImg.width = Math.round(ratio * _viewedImg.width);
    _viewedImg.height = Math.round(ratio * _viewedImg.height);

    wndBody.appendChild(_viewedImg);
    wndBody.innerHTML += "<div style=\"padding: 5px;\"><small>Kliknij aby zamknąć</small></div>";
    centerWindow(wnd);

    transformElementAlpha("presentation-image", 0.08, 1, 50);
}


/*-------------------------------------------------------------------------------------*/
function hideGalleryImage(aElement)
{
    $('presentation-window').style.display = "none";
    blockSite(false);
}


/*-------------------------------------------------------------------------------------*/
function unblockSite(block)
{
    var blockScreen = $('site-block');
    if (!blockScreen) return;
    blockScreen.style.display = "none";
}


/*-------------------------------------------------------------------------------------*/
function blockSite(block)
{
    var blockScreen = $('site-block');
    if (!blockScreen) return;

    if (block)
    {
         blockScreen.style.display = "block";
         blockScreen.style.width   = document.body.offsetWidth  + "px";
         //blockScreen.style.height  = document.body.offsetHeight + "px";
         //ansformElementAlpha("site-block", 0.15, 0.45, 30);
         setOpacity('site-block', 0.5);
    }
    else {
        //blockScreen.style.display = "none";
        transformElementAlpha("site-block", 1, 0, 20, unblockSite);
    }
}

/*-------------------------------------------------------------------------------------*/

_ajax = new AJAX();

function getContactForm()
{
    blockSite(true);

    var cfw = $("contact-form-window");
    if (cfw)
    {
//    }|'[p.m;p
        $("contact-form").reset();
        cfw.style.display = "block";
        centerWindow(cfw);
        return;
    }

    _ajax.sendRequest('mod=contact&a=getcontactform', 'GET', _onContactForm);
    var info = $("info-window");
    info.style.top = -9999;
    info.style.display = "block";
    centerWindow(info);
}


function _onContactForm(xhrThread)
{
    $("info-window").style.display = "none";
    var cf = document.createElement("div");
    cf.innerHTML = xhrThread.fXhr.responseText;
    cf.style.display = "none";
    cf.id = "contact-form-window";
    cf.style.position = "absolute";
    cf.style.top = "-9999px";
    cf.style.left = "-9999px";
    document.body.appendChild(cf);
    cf.style.display = "block";
    cf.style.zIndex = 3;
    centerWindow(cf);
    dragging_RegisterObject("contact-form-header", "contact-form-window", false);
}

function closeContactForm()
{
    $("contact-form-window").style.display = "none";
    blockSite(false);
}


function checkContactForm()
{
    var f = $('contact-form');
    try {
        if (!/^\s*[a-z0-9]+[\w\-\.]*@([\w\-]+\.)+[a-z]+\s*$/.test(f.email_replyto.value))
        {
            alert("Proszę wpisać poprawny adres e-mail.");
            return false;
        }
        if (f.email_subject.value == '' || f.email_sender.value == '' || f.email_replyto.value == '' || f.email_msg.value == '')
        {
            alert("Wszystkie pola są wymagane. Proszę uzupełnić formularz i spróbować ponownie.");
            return false;
        }
    }
    catch (e) {}

    return true;
}


/*-------------------------------------------------------------------------------------*/
var _alphaTransformThreads = [];

function transformElementAlpha(aElement, aStep, aLimit, aInterval, aCallback, aUserData)
{
    var thread = false;

    if (!$(aElement)) return;

    if (isArray(_alphaTransformThreads[aElement]))
    {
        clearTimeout(_alphaTransformThreads[aElement]['timer']);
        thread = _alphaTransformThreads[aElement];
    }
    else
    {
        thread = [];

        _alphaTransformThreads[aElement] = thread;
    }

    thread['element'] = aElement;
    thread['timer'] = 0;
    thread['callback'] = aCallback;
    thread['userdata'] = aUserData;

    _transformElementAlpha(aElement, aStep, aLimit, aInterval);
}


/*-------------------------------------------------------------------------------------*/
function _transformElementAlpha(aElement, aStep, aLimit, aInterval)
{
    var obj = $(aElement), opac;

    if (!isArray(_alphaTransformThreads[aElement]) || !obj || !obj.style)
        return;

    opac = getOpacity(aElement);

    if (isNaN(opac)) return;

    if (opac < aLimit)
    {
        if (opac + aStep >= aLimit)
        {
            setOpacity(aElement, aLimit);
            if (isFunction(_alphaTransformThreads[aElement]['callback']))
                _alphaTransformThreads[aElement]['callback'](aElement, _alphaTransformThreads[aElement]['userdata']);
            return;
        }
        setOpacity(aElement, opac + aStep);
    }
    else
    {
        if (opac - aStep <= aLimit)
        {
            setOpacity(aElement, aLimit);
            if (isFunction(_alphaTransformThreads[aElement]['callback']))
                _alphaTransformThreads[aElement]['callback'](aElement, _alphaTransformThreads[aElement]['userdata']);
            return;
        }
        setOpacity(aElement, opac - aStep);
    }

    _alphaTransformThreads[aElement]['timer'] = setTimeout("_transformElementAlpha('"+aElement+"', "+aStep+", "+aLimit+", "+aInterval+")", aInterval);
}


/*-------------------------------------------------------------------------------------*/
function setOpacity(aElement, aOpacity)
{
    try
    {
        with ($(aElement))
        {
            style.filter = "alpha(opacity="+(aOpacity * 100)+")";
            style.opacity = aOpacity;
        }
    }
    catch (e) {}
}


/*-------------------------------------------------------------------------------------*/
function getOpacity(aElement)
{
    try {
        var o = toInt($(aElement).style.filter.match(/.*alpha\s*\(opacity\s*\=\s*([0-9]*).*/i)[1]) / 100;
    }
    catch (e) {
        return parseFloat(getStyleProp($(aElement), 'opacity'));
    }

    return o;
}

var _requestStart, _requestResponse = "";

/*-------------------------------------------------------------------------------------*/
function loadModule(module, params)
{
    _requestStart = new Date();
    blockSite(true);
    _ajax.sendRequest('mod='+module+'&'+(params ? params : ""), 'GET', _onLoadModule);
    var info = $("loading-window");
    info.style.top = -9999;
    info.style.display = "block";
    centerWindow(info);
}

/*-------------------------------------------------------------------------------------*/
function _onLoadModule(xhrThread)
{
    _requestResponse = xhrThread.fXhr.responseText;

    var d = new Date();

    if (d.getTime() - _requestStart.getTime() < 1400)
        setTimeout("_finishLoadingModule()", 1400 - (d.getTime() - _requestStart.getTime()));
    else
    {
        _finishLoadingModule()
    }
}

/*-------------------------------------------------------------------------------------*/
function _finishLoadingModule()
{
    $("module-content").innerHTML = _requestResponse;

    var scripts = $("module-content").getElementsByTagName('script');
    for (var i in scripts)
        try {window.eval(scripts[i].innerHTML); } catch (e) {};

    blockSite(false);
    $("loading-window").style.display = "none";

    decodeEmailLinks();
    try {
        $("location").innerHTML = $("current-module").innerHTML;
        $("nojs-message").style.display = "none";
    }
    catch (e) {}
}


var _aGalleries = [];
/*-------------------------------------------------------------------------------------*/
function showGalleryItem(sGalleryName, iIndex)
{
    var nav = $('presentation-window-nav');
    if (nav)
    {
        var prevBtn = $('presentation-window-prev'),
            nextBtn = $('presentation-window-next');
        if (prevBtn)
        {
            prevBtn.style.display = _aGalleries[sGalleryName][iIndex - 1] ? '' : 'none';
            prevBtn.onclick = new Function("showGalleryItem('"+sGalleryName+"', "+(iIndex-1)+"); return false;");
        }
        if (nextBtn)
        {
            nextBtn.style.display = _aGalleries[sGalleryName][iIndex + 1] ? '' : 'none';
            nextBtn.onclick = new Function("showGalleryItem('"+sGalleryName+"', "+(iIndex+1)+"); return false;");
        }
    }
    showGalleryImage(_aGalleries[sGalleryName][iIndex], true);
}
/*-------------------------------------------------------------------------------------*/
function checkEmailSyntax(aEmail)
{
    return /^\s*[a-z0-9]+[\w\-\.]*@([\w\-]+\.)+[a-z]+\s*$/i.test(aEmail);
};
/*-------------------------------------------------------------------------------------*/
function checkContactForm()
{
    var f = $('contact-form');
    try {
        if (f.email_sender.value == '' || f.email_replyto.value == '' || f.email_msg.value == ''|| f.email_subject.value == '')
        {
            alert("Proszę uzupełnić wymagane pola i spróbować ponownie.");
            return false;
        }
        if (!checkEmailSyntax(f.email_replyto.value))
        {
            alert("Proszę wpisać poprawny adres e-mail.");
            return false;
        }
    }
    catch (e) {}

    return true;
}
