var irInformers = 1;

var irDoc = document;
var irTPL = new Array();
var irItems = new Array();
var irBlocks = new Array();
var irBlocksID = new Array();

// todo calc visibility when informer above viewarea
function irPosY(obj, y) {
    if (isNaN(y)) y = 0;

    if (!obj) return y;

    y += obj.offsetTop;
    if (obj.offsetParent != null) {
        if (obj.offsetParent.tagName != 'BODY')
            y -= obj.offsetParent.scrollTop;
        return irPosY(obj.offsetParent, y);
    } else if (obj.ownerDocument.parentWindow && obj.ownerDocument.parentWindow.frameElement != null)
        return irPosY(obj.ownerDocument.parentWindow.frameElement, y);
    return y;
}

function irGetPos(blockID, sessID) {
    var tp = irBlocks[blockID];
//todo ???
    if (!tp||tp==null) return;
    var py = irPosY(tp, 0) - window.document.body.scrollTop;
    if (py <= window.document.body.clientHeight) {
        window.clearInterval(tp.interval);
        tp.interval = null;
        irShow(blockID, sessID);
    }
}

function irReplace(from, to, str, pr, po) {
    if (pr == null) pr = "{\\$";
    if (po == null) po = "}";
    var re = new RegExp(pr + from + po, "g");
    return str.replace(re, to);
}

// todo check Nulls
function irItemsBlock(blockID, transUrl, sessID) {
    var tp = irBlocks[blockID];
    tp.innerHTML = "";

    var tpl = irTPL[blockID];
    var items = irItems[blockID];
    var itm, informer = "";
    for (var i = 0; i < items.length; i++) {
        itm = tpl['item'];
        if (i == 0 && tpl['firstItem']) itm = tpl['firstItem'];

        itm = irReplace('itemID', items[i][0], itm);
        itm = irReplace('blockID', blockID, itm);
        itm = irReplace('sessID', sessID, itm);
        itm = irReplace('url', irURL + "click?sid=" + sessID + "&blockID=" + blockID + "&itemID=" + items[i][0], itm);
        itm = irReplace('dt', items[i][1], itm);

        itm = irReplace('title', "<iritem irid='" + items[i][0] + "'>" + items[i][2] + "</iritem>", itm);
        itm = irReplace('announce', items[i][3], itm);

        if (items[i][4] == 0) {
            itm = irReplace('img', irImgURL + "1.gif", itm);
            itm = irReplace('img50', irImgURL + "1.gif", itm);
            itm = irReplace('img100', irImgURL + "1.gif", itm);
        } else {
            var img = items[i][4] + ".jpg";
            itm = irReplace('img', irImgURL + "50x50/" + img, itm);
            itm = irReplace('img50', irImgURL + "50x50/" + img, itm);
            itm = irReplace('img100', irImgURL + "100x100/" + img, itm);
            itm = irReplace('img50x', irImgURL + "50x-1/" + img, itm);
            itm = irReplace('img100x', irImgURL + "100x-1/" + img, itm);
        }
        itm = irReplace('link', items[i][5], itm);
        informer += itm;
    }
    if (tpl['main']) informer = irReplace('content', informer, tpl['main']);

    tp.innerHTML = informer;
    tp.sessID = sessID;
    tp.interval = window.setInterval("irGetPos('" + blockID + "', '" + sessID + "');", irPosTimeout);
}

function irMsgBlock(blockID, msg) {
    if (irBlocks[blockID] != null) irBlocks[blockID].innerHTML = msg;
}

function irFail(msg) {
    for (var i in irBlocks) irBlocks[i].innerHTML = msg;
}


function irEnc(s, u) {
    if (typeof(encodeURIComponent) == 'function') {
        if (u) return encodeURI(s);
        else return encodeURIComponent(s);
    } else {
        return escape(s);
    }
}

function irDec(s) {
    if (typeof(decodeURIComponent) == 'function') {
        return decodeURIComponent(s);
    } else {
        return unescape(s);
    }
}

// block tpl <irBlock id="1"></irBlock>
function irDetect() {
    var blocks = document.getElementsByTagName("IRBLOCK");
    if (blocks != null) {
        var len = blocks.length;
        for (var i = 0; i < len; i++) {
            if (blocks[i].tagName.toUpperCase() != "IRBLOCK") continue;

            var bId = blocks[i].getAttribute("id");
            if (bId == "") bId = blocks[i].getAttribute("ID");

            if (irBlocks[bId] == null) {
                // Hack for grebanyi IE
                var nd = document.createElement("SPAN");
                blocks[i].parentNode.insertBefore(nd, blocks[i]);
                irBlocks[bId] = nd;
                if (bId != "counter") irBlocks[bId].innerHTML = "";
                irBlocksID[irBlocksID.length] = bId;
            }
        }
    }
}

function irLoad() {
    var blist = "";
    var first = true;
    var idLen = irBlocksID.length;

    if (idLen < 1) return;

    for (var i = 0; i < idLen; i++) {
        if (!first) blist += ','; else first = false;
        blist += irEnc(irBlocksID[i]);
    }

    //if (blist == 'counter') return;

    var cs;
    if (irDoc.characterSet) cs = irEnc(irDoc.characterSet);
    else if (irDoc.charset) cs = irEnc(irDoc.charset);

    var sc = document.createElement('script');
    sc.type = 'text/javascript';
    sc.id = "_irloadinfjs";

    sc.src = irURL + "load?sid=" + irID + "&blocks=" + blist +
             "&rnd=" + Math.round(Math.random() * 2147483647) + "&cs=" + cs;
    irDoc.getElementsByTagName('head')[0].appendChild(sc);
}

function irShow(blockID, sessID) {
    var tp = irBlocks[blockID];
    var spans = tp.getElementsByTagName("iritem");

    var items = "";
    var first = true;

    if (spans == null) return;
    for (var i = 0; i < spans.length; i++) {
        var irItem = spans[i].getAttribute("irid");

        if (!first) items += ",";
        if (irItem != null) {
            items += irItem;
        }
        first = false;
    }

    var sc = document.createElement('script');
    sc.type = 'text/javascript';
    sc.id = "_irshowinfjs";
    sc.defer = true;
    sc.src = irURL + 'show?sid=' + irEnc(sessID) + '&blockID=' + blockID + '&itemList=' + irEnc(items) +
             '&rnd=' + Math.round(Math.random() * 2147483647);
    irDoc.getElementsByTagName('head')[0].appendChild(sc);
}

function irClick(itemID, blockID, sessID) {
    var tp = irBlocks[blockID];
    if (!tp) return;
    var spans = tp.getElementsByTagName("iritem");
    if (spans == null) return;

    var sc = document.createElement('script');
    sc.type = 'text/javascript';
    sc.id = "_irclickinfjs";
    //    sc.defer = true;
    sc.src = irURL + 'click?type=direct&sid=' + irEnc(sessID) + '&blockID=' + blockID + '&itemID=' + irEnc(itemID) +
             '&rnd=' + Math.round(Math.random() * 2147483647);
    irDoc.getElementsByTagName('head')[0].appendChild(sc);
}

function irInitInformers() {
    irDetect();
    irLoad();
}