function showPicture(link) {
    galleryImage = document.getElementById('gallery-image');
    if (galleryImage) {
        var loading = document.createElement('div');
        loading.className = 'loading';
        galleryImage.appendChild(loading);
        var newImg = new Image();
        newImg.src = link.href;
        var lks = link.parentNode.getElementsByTagName('a');
        for (var i=0; i<lks.length; i++) if (lks[i].className == 'active') lks[i].className = '';
        link.className = 'active';
        if (newImg.complete) {
            galleryImage.innerHTML = "";
            galleryImage.appendChild(newImg);
        } else {
            newImg.onload = function() {
                galleryImage.innerHTML = "";
                galleryImage.appendChild(this);
            }
        }
    }
    return false;
}

AL = function() {
    this.loader = new CL.loader(this, '/ajax/', 'POST', []);
}
AL.prototype = {
    setupAjaxLinks: function(cntPlaceId) {
        var self = this;
        var contentArea = document.getElementById('contentArea');
        var reloadArea = (cntPlaceId) ? document.getElementById(cntPlaceId) : contentArea;
        if ((contentArea) && (reloadArea)) {
            this.contentArea = contentArea;
            this.reloadArea = reloadArea;
            var links = contentArea.getElementsByTagName('a');
            for (var i=0; i<links.length; i++) {
                var notInText = true;
                var p = links[i];
                while ((p = p.parentNode) && (p != contentArea)) if (p.className.match(/text/)) { notInText = false; break; }
                if ((!links[i].onclick) && (notInText) && (links[i].target != '_blank')) {
                    links[i].onclick = function() { return self.openAjaxLink(this); }
                }
            }
        }
    },
    openAjaxLink: function(link) {
        this.loader.requestParams = [];
        if (link.href.match(/(.*?)\?(.*)/)) {
            var queryString = RegExp.$2;
            var requestParams = queryString.split('&');
            if (requestParams.length > 0) this.loader.requestParams = requestParams;
        }
        this.loader.requestParams.push('request_string='+escape(link.href));
        this.loader.sendRequest();
        var loading = document.createElement('div');
        loading.className = 'loading';
        this.reloadArea.appendChild(loading);
        return false;
    },
    ajaxUpdate: function(request) {
        this.reloadArea.innerHTML = request.responseText;
        if (this.reloadArea == this.contentArea) this.setupAjaxLinks();
    },
    handleError: function() {
        alert('error');
    }
}



CL = new Object();
CL.READY_STATE_UNINITIALIZED = 0;
CL.READY_STATE_LOADING = 1;
CL.READY_STATE_LOADED = 2;
CL.READY_STATE_INTERACTIVE = 3;
CL.READY_STATE_COMPLETE = 4;

CL.loader = function(component, url, method, requestParams) {
    this.component = component;
    this.url = url;
    this.requestParams = requestParams;
    this.method = method;
}

CL.loader.prototype = {
    getTransport: function() {
        var transport;
        if (window.XMLHttpRequest) {
            transport = new XMLHttpRequest(); 
        } else if (window.ActiveXObject) {
            try {
                transport = new ActiveXObject('Msxml2.XMLHTTP');
            } catch(err) {
                transport = new ActiveXObject('Microsoft.XMLHTTP');
            }
        }
        return transport;
    },
    sendRequest: function() {
        var requestParams = [];
        for (var i=0; i<arguments.length; i++) {
            requestParams.push(arguments[i]);
        }
        var request = this.getTransport();
        request.open(this.method, this.url, true);
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        var oThis = this;
        request.onreadystatechange = function() {
            oThis.handleAjaxResponse(request);
        }
        request.send(this.queryString(requestParams));
    },
    queryString: function(args) {
        var requestParams = [];
        for (var i=0; i<this.requestParams.length; i++) { 
            requestParams.push(this.requestParams[i]);
        }
        for (var i=0; i<args.length; i++) {
            requestParams.push(args[i]);
        }
        var queryString = "";
        if (requestParams && requestParams.length > 0) {
            for (var i=0; i<requestParams.length; i++) {
                queryString += requestParams[i] + '&';
            }
            queryString = queryString.substring(0, queryString.length-1);
        }
        return queryString;
    },
    handleAjaxResponse: function(request) {
        if (request.readyState == CL.READY_STATE_COMPLETE) {
            if (this.isSuccess(request)) {
                this.component.ajaxUpdate(request);
            } else {
                this.component.handleError(request);
            }
        }
        if (request.readyState == CL.READY_STATE_LOADING) {
            if (typeof(this.component.ajaxLoading)=='function') { 
                this.component.ajaxLoading(request);
            }
        }
    },
    isSuccess: function(request) {
        return request.status == 0 || (request.status >= 200 && request.status < 300);
    }
};

CL.xmlSet = function(xmlElement) {
    var len = xmlElement.childNodes.length;
    for (var i=0; i<len; i++) {
        var attrName = xmlElement.childNodes[i].tagName;
        var attrValue = CL.textContent(xmlElement.childNodes[i]);
        this[attrName] = attrValue;
    }
}

CL.textContent = function(xmlElement) { 
    var cnt;
    if (xmlElement.text!=undefined) { cnt = xmlElement.text; } else
    if (xmlElement.textContent!=undefined) { cnt = xmlElement.textContent; } else
    { cnt=xmlElement.firstChild.nodeValue; }
    return cnt;
}

// escape setup (for cp1251 character encoding) -- remove this block if use utf8
CL.setupEscape = function() {
    var trans = [];
    for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350; // ГЂ-ГџГ -Гї
    trans[0x401] = 0xA8;    // ЕЎ
    trans[0x451] = 0xB8;    // Еѕ
    var escapeOrig = window.escape;
    window.escape = function(str) {
        str = str.toString();
        var ret = [];
        for (var i = 0; i < str.length; i++) {
            var n = str.charCodeAt(i);
            if (typeof trans[n] != 'undefined')
            n = trans[n];
            if (n <= 0xFF)
            ret.push(n);
        }
        return escapeOrig(String.fromCharCode.apply(null, ret));
    }
}
CL.setupEscape();

CL.showLoadingState = function(canvas) {
}

CL.hideLoadingState = function(canvas) {
}


activeLoader = new AL();
