/* Глобальные переменные */

var STR_PAD_LEFT = 1;
var STR_PAD_RIGHT = 2;
var STR_PAD_BOTH = 3;
 
/* Утилитарные функции */

function absPosition(obj) {
    var x = y = 0;
    while(obj) {
        x += obj.offsetLeft;
        y += obj.offsetTop;
        obj = obj.offsetParent;
    }
    return {x:x, y:y};
}

function getinsideWindowWidth()
{
    if(window.innerWidth)
        return window.innerWidth;
    else if(document.body && document.body.clientWidth)
        return document.body.clientWidth;
    else
        return document.body.parentElement.clientWidth;
}

function getinsideWindowHeight()
{
    if(window.innerHeight)
        return window.innerHeight;
    else if(document.body && document.body.clientHeight)
        return document.body.clientHeight;
    else
        return document.body.parentElement.clientHeight;
}

function iframeToolkit(toolkit_name, iframe_name)
{
    if(!document.getElementById(toolkit_name))
        return;

    isie = false;
    if(navigator.userAgent.match(/msie/i))        
        isie = true;
        
    style = new Array(
        "Undo",
        "Redo",
        "Cut",
        "Copy",
        "Paste",
        "Bold",
        "Italic",
        "Underline",
        "StrikeThrough",
        "Superscript",
        "Subscript",
        "JustifyLeft",
        "JustifyCenter",
        "JustifyRight",
        "JustifyFull",
        "=",
        "InsertOrderedList",
        "InsertUnorderedList",
        "Indent",
        "Outdent",
        "^",
        "=",
        "H1",
        "H2",
        "H3",
        "H4",
        "H5",
        "H6",
        "CreateLink",
        "InsertHorizontalRule",
        "InsertTable",
        "InsertImage",
        "ForeColor",
        "BackColor",
        "RemoveFormat"
    );

    var image = new Array(
        "undo",
        "redo",
        "cut",
        "copy",
        "paste",
        "b",
        "i",
        "u",
        "s",
        "sup",
        "sub",
        "l",
        "c",
        "r",
        "j",
        "",
        "ol",
        "ul",
        "in",
        "out",
        "",
        "",
        "h1",
        "h2",
        "h3",
        "h4",
        "h5",
        "h6",
        "a",
        "hr",
        "tab",
        "img",
        "cfg",
        "cbg",
        "F"
    );
    
    var title = new Array(
        "Отменить",
        "Повторить",
        "Вырезать",
        "Копировать",
        "Вставить",
        "Полужирный",
        "Курсив",
        "Подчеркнутый",
        "Перечеркнутый",
        "Степень",
        "Индекс",
        "По левому краю",
        "По центру",
        "По правому краю",
        "По ширине",
        "",
        "Нумерованный список",
        "Маркированный список",
        "Увеличить отступ",
        "Уменьшить отступ",
        "",
        "",
        "Заголовок №1",
        "Заголовок №2",
        "Заголовок №3",
        "Заголовок №4",
        "Заголовок №5",
        "Заголовок №6",
        "Гиперссылка",
        "Линия",
        "Вставить таблицу",
        "Вставить изображение",
        "Цвет шрифта",
        "Цвет фона",
        "Снять форматирование"
    );

    var s = "<TABLE width='100%' cellpadding=0 cellspacing=0 border=0><TR><TD colspan=3>"+
            "<TABLE width='100%' cellpadding=0 cellspacing=0 border=0><TR>";

    for(i in style)
        if(style[i] == "=")
            s += "<TD width='100%'></TD>";
        else if(style[i] == "^")
            s += "</TR></TABLE></TD></TR><TR><TD>"+
                 "<TABLE cellpadding=0 cellspacing=0 border=0><TR><TD>"+
                 "<SELECT class=ib_admin onchange='"+iframe_name+".execCommand(\"fontname\", false, this.value);'>"+
                 "<OPTION value='Arial'>Arial</OPTION>"+
                 "<OPTION value='Courier New'>Courier New</OPTION>"+
                 "<OPTION value='Tahoma'>Tahoma</OPTION>"+
                 "<OPTION value='Times New Roman'>Times New Roman</OPTION>"+
                 "<OPTION value='Verdana' SELECTED>Verdana</OPTION>"+
                 "</SELECT>"+
                 "</TD><TD style='padding-left: 5px;'>"+
                 "<SELECT class=ib_admin onchange='"+iframe_name+".execCommand(\"fontsize\", false, this.value);'>"+
                 "<OPTION value='1'>1</OPTION>"+
                 "<OPTION value='2' SELECTED>2</OPTION>"+
                 "<OPTION value='3'>3</OPTION>"+
                 "<OPTION value='4'>4</OPTION>"+
                 "<OPTION value='5'>5</OPTION>"+
                 "<OPTION value='6'>6</OPTION>"+
                 "<OPTION value='7'>7</OPTION>"+
                 "</SELECT>"+
                 "</TD></TR></TABLE>"+
                 "</TD><TD>"+
                 "<TABLE width='100%' cellpadding=0 cellspacing=0 border=0><TR>";
        else
            s += "<TD style='padding: 1px;'>"+
                 "<BUTTON style='width: 20px; height: 20px; padding: 0px;' onclick=\"iframeSetStyle('"+style[i].toLocaleLowerCase()+"', '"+iframe_name+"', "+iframe_name+")\" title=\""+title[i]+"\">"+
                 "<TABLE width='100%' height='100%' cellpadding=0 cellspacing=0 border=0>"+
                 "<TR><TD align=center>"+
                 "<img style='vertical-align: middle;' src=/i/editor/"+image[i]+".gif>"+
                 "</TD></TR>"+
                 "</TABLE>"+
                 "</BUTTON>"+
                 "</TD>";

    s += "</TR></TABLE></TD></TR></TABLE>";

    document.getElementById(toolkit_name).innerHTML = s;
}

function i2hx(i) {
    i *= 51;
    if(i < 16) 
        return "0"+i.toString(16);
    else 
        return i.toString(16);
}

function iframeSetStyle(style, iframe_name, iframeobj)
{
    var commonStyle = "<style>" +
                      "body, td {font-family: Verdana, sans-serif; font-size: 11px;} " +
                      "form {margin-top: 0px; margin-bottom: 0px;} " +
                      "textarea, input {font-weight: normal; font-size: 11px; color: black; font-family: Tahoma, Arial; margin-top: 0px; margin-bottom: 0px; border-style: solid; border-width: 1px; border-color: #666666;} " +
                      "</style>";

    if(style.match(/inserttable/i)) {
    
        var Form = "<html><head><title>Вставка таблицы</title>"+commonStyle+"</head>" +
                   "<script language='JavaScript'>" +
                   "function AddTbl() { " +
                   "   var nTable = '<TABLE width='+document.forms['tblf'].elements['width'].value+' height='+document.forms['tblf'].elements['height'].value+' cellpadding='+document.forms['tblf'].elements['padding'].value+' cellspacing='+document.forms['tblf'].elements['spacing'].value+' border='+document.forms['tblf'].elements['border'].value+' bgcolor=#'+document.forms['tblf'].elements['bgcolor'].value+'>';" +
                   "   for(r=0; r<document.forms['tblf'].elements['rows'].value; r++) {" +
                   "       nTable += '<tr>';" +
                   "       for(c=0; c<document.forms['tblf'].elements['cols'].value; c++)" +
                   "           nTable += '<td></td>';" +
                   "       nTable += '</tr>';" +
                   "   }" +
                   "   nTable += '</TABLE>';" +
                   "   body = new String(window.opener."+iframe_name+".body.outerHTML);"+
                   "   body = body.substr(0, body.indexOf('</BODY>'));"+
                   "   html = window.opener."+iframe_name+".all.tags('head')[0].outerHTML+body+nTable+'</BODY>';"+
                   "   window.opener."+iframe_name+".open();" +
                   "   window.opener."+iframe_name+".write(html);" +
                   "   window.opener."+iframe_name+".close();" +
                   "   window.close();" +
                   "}"+
                   "</script>" +
                   "<body topmargin=0 leftmargin=0>" +
                   "<br><form id=tblf><table width=100%>" +
                   "<tr><td>Ширина таблицы</td><td><input size=15 name=width value='100%'></td></tr>" +
                   "<tr><td>Высота таблицы</td><td><input size=15 name=height value='200'></td></tr>" +
                   "<tr><td>Количество столбцов</td><td><input size=15 name=cols value='5'></td></tr>" +
                   "<tr><td>Количество строк</td><td><input size=15 name=rows value='2'></td></tr>" +
                   "<tr><td>Ширина бордюра</td><td><input size=15 name=border value='1'></td></tr>" +
                   "<tr><td>Отступ</td><td><input size=15 name=padding value='2'></td></tr>" +
                   "<tr><td>Расстояние между ячейками</td><td><input size=15 name=spacing value='1'></td></tr>" +
                   "<tr><td>Цвет фона</td><td><input size=15 name=bgcolor value='FFFFFF' maxlength=6></td></tr>" +
                   "<tr><td colspan=2><input type=button value=Вставить style='width:100%' OnClick=\"AddTbl();\"></td></tr>" +
                   "</table></form>\n" +
                   "</body></html>";

        TabPanel = window.open("","TabPanel","dependent=1,width=300,height=220,status=yes");
        TabPanel.moveBy(200, 200);
        TabPanel.document.open();
        TabPanel.document.write(Form);
        TabPanel.document.close();
        
    } else if (style.match(/insertimage/i)) {
    
        var Form = "<html><head>"+commonStyle+"<title>Загрузка изображения</title></head>" +
                   "<body leftmargin=0 rightmargin=0 topmargin=0 bottommargin=0 marginwidth=0 marginheight=0>" +
                   "<form action='/scope/libraries/uploadimg.php' method='POST' enctype='multipart/form-data' id='imgform'>" +
                   "<input type='file' name='img' style='width: 400px;'><br>" +
                   "<input type='hidden' name='iframe' value='"+iframe_name+"'>" +
                   "<input type='submit' value='OK' style='width: 400px;'>" +
                   "</form>" +
                   "</body><html>";
            
        ImgPanel = open("", "ImgPanel", "dependent=1,width=400,height=10,status=no,toolbar=no,menubar=no,location=no,resizable=yes");
        ImgPanel.moveBy(200, 200);
        ImgPanel.document.open();
        ImgPanel.document.write(Form);
        ImgPanel.document.close();
        
    } else if (style.match(/^createlink$/i)) {
    
        iframeobj.execCommand('CreateLink', false, prompt('Введите адрес', 'http://'));
        
    } else if (style.match(/forecolor|backcolor/i)) {
    
        var Form = "<html><head>"+commonStyle+"<title>Палитра</title></head>"+
                   "<body leftmargin=0 rightmargin=0 topmargin=0 bottommargin=0 marginwidth=0 marginheight=0>"+
                   "<table width='360' height='100' cellpadding='0' cellspacing='0' border='0'><tr><td height='40'>" +
                   "<form name=clr>" +
                   "&nbsp;<input type=text name=colr style='width:40;height:30' readonly>&nbsp;" +
                   "<input type=text name=colr_hex style='width:60' value=#ffffff>" +
                   "</form>" +
                   "</td></tr><tr><td><table width='360' height='60' cellpadding='0' cellspacing='0' border='0'>";
                   
        var i = 0;
        for(r=0; r<6; r++)
            for(g=0; g<6; g++)
                for(b=0; b<6; b++){
                    if(i == 0) 
                        Form += "<tr>";
                    colr = i2hx(r)+i2hx(g)+i2hx(b);
                    Form += "<td width=10 height=10 bgcolor=#"+colr+" onclick=\"window.opener."+iframe_name+".execCommand('"+style+"',false,'#"+colr+"'); window.close();\""+" onmouseover=\"document.forms['clr'].elements['colr'].style.background='#"+colr+"';document.forms['clr'].elements['colr_hex'].value='#"+colr+"'\">"+
                            "<img src=/i/content/editor/1x1.gif height=10 border=0></td>";
                    i++;
                    if(i == 36) {
                        Form += "</tr>";
                        i = 0;
                    }
                }
        Form += "</table></td><tr><table></body><html>";

        ColorPanel = open('', 'ColorPanel', 'dependent=1,width=360,height=80,status=yes,toolbar=no,menubar=no,location=no,resizable=no');
        ColorPanel.moveBy(200, 200);
        ColorPanel.document.open();
        ColorPanel.document.write(Form);
        ColorPanel.document.close();
        
    } else if (style.match(/h1|h2|h3|h4|h5|h6/i)) {
    
        iframeobj.execCommand("FormatBlock", true, "<"+style+">");
        
    } else {
    
        iframeobj.execCommand(style, false, null);
        
    }
}

function iframeSave(iframeobj, hidden)
{          
    document.getElementById(hidden).value = iframeobj.body.innerHTML;
}

function hintInit(Hint, ID)
{
    var object = document.getElementById(ID);

    object.setAttribute('hint', Hint);
    if(object.value == '') {
        object.value = Hint;
        object.style.color = '#969696';
        object.setAttribute('hinted', 1);
    } else
        object.setAttribute('hinted', 0);
}

function hintInitOnForm(Hint, ID, FormID)
{
    var object = document.forms[FormID].elements[ID];

    object.setAttribute('hint', Hint);
    if(object.value == '') {
        object.value = Hint;
        object.style.color = '#969696';
        object.setAttribute('hinted', 1);
    } else
        object.setAttribute('hinted', 0);
}

function hintOnFocus(object)
{
    if(object.getAttribute('hinted') == 1) {
        object.value = '';
        object.style.color = '#002857';
        object.setAttribute('hinted', 0);
    }
}

function hintOnBlur(object)
{
    if(object.value == '') {
        object.value = object.getAttribute('hint');
        object.style.color = '#969696';
        object.setAttribute('hinted', 1);
    }
}

function hintClear(str)
{
    var elements = str.split(',');

    for(i=0; i<elements.length; i=i+1) {
        var object = document.getElementById(elements[i].replace(/ /g, ''));
        if(object && object.getAttribute('hinted') == 1) {
            object.value = '';
            object.style.color = '#002857';
            object.setAttribute('hinted', 0);
        }
    }
}

function hintClearForm(formid)
{
    for(i=0; i<document.forms[formid].elements.length; i++) {
        var element = document.forms[formid].elements[i];
        
        if(element.getAttribute('hinted') == 1) {
            element.value = "";
            element.style.color = '#002857';
            element.setAttribute('hinted', 0);
        }
    }
}

function createPostForm(action)
{
    form = document.createElement("form");
    form.action = action||"";
    form.method = "post";
    
    return form;
}

function createHidden(sName, sValue)
{
    var oField   = document.createElement('input');
    oField.type  = 'hidden';
    oField.name  = sName;
    oField.value = sValue;
    return oField;
}

function trim(str, chars)
{
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars)
{
    chars = chars || "\\s";
    if(str)
        return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
        
    return "";        
}

function rtrim(str, chars)
{
    chars = chars || "\\s";
    if(str)
        return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
        
    return "";
}

function formatAmount(n)
{
    if(n == "")
        return "";
        
    var s = new String(n);
    s = s.replace(/\./g, ',');
    
    p = s.indexOf(",");
    if(p >= 0)
        s = s.substr(0, p+3);
    else
        s = s+",00";
    
    i = s.indexOf(",")-1;
    for(c=0;i>=0;i--,c++)
        if(c > 2) {
            s = s.substr(0, i+1)+" "+s.substr(i+1);
            c = 0;
        }    
        
    p = s.indexOf(",");
    if(p < 0)
        s += ",";
    p = 2-(s.length-s.indexOf(",")-1);
    for(i=0;i<p;i++)
        s += "0";
        
    if(s[0] == ",")
        s = "0"+s;
    
    return s;
}

function isLocalCharacters(v)
{
    var p = "абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
    var attention = false;
    for(i=0;i<v.length;i++)
        for(j=0;j<p.length;j++)
        if(v.charCodeAt(i) == p.charCodeAt(j)) {
            attention = true;
            break;
        }
        
    return attention;
}

function reloadFrame(object)
{
    object.src = object.src;
}

function pad(str, len, pad, dir) 
{ 
    if (typeof(len) == "undefined") { var len = 0; }
    if (typeof(pad) == "undefined") { var pad = ' '; }
    if (typeof(dir) == "undefined") { var dir = STR_PAD_RIGHT; }
 
    if (len + 1 >= str.length) { 
        switch (dir){ 
            case STR_PAD_LEFT:
                str = Array(len + 1 - str.length).join(pad) + str;
                break;
 
            case STR_PAD_BOTH:
                var right = Math.ceil((padlen = len - str.length) / 2);
                var left = padlen - right;
                str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
                break;
 
            default:
                str = str + Array(len + 1 - str.length).join(pad);
                break;
 
        }
    }
 
    return str; 
}

function getBetween(data, startTag, finishTag)
{
    var p1 = data.indexOf(startTag);
    
    if(p1 >= 0) {
        var p2 = data.indexOf(finishTag, p1+startTag.length);
        if(p2 >= 0)
            return data.substring(p1+startTag.length, p2);
    }
}

function parseDate(stringDate, mode)
{
    if(!mode)
        mode = 1;

    stringDate = stringDate.replace(/[^0-9.]/g, "0");

    var dateArray = stringDate.split(".");

    switch(mode) {
        case 1:
        case 4:
        case 8:
            if(dateArray.length != 3)
                return;
            return new Date(dateArray[2], dateArray[1]-1, dateArray[0]);
        case 2:
        case 3:
        case 5:
        case 6:
        case 7:
            if(dateArray.length != 2)
                return;
            return new Date(dateArray[1], dateArray[0]-1, 1);
    }
}

function stringDate(d, mode)
{
    if(!mode)
        mode = 1;

    switch(mode) {
        case 1:
        case 4:
            return pad(new String(d.getDate()), 2, "0", STR_PAD_LEFT)+"."+
                pad(new String(d.getMonth()+1), 2, "0", STR_PAD_LEFT)+"."+d.getFullYear();
        case 2:
        case 3:
        case 5:
        case 6:
        case 7:
            return pad(new String(d.getMonth()+1), 2, "0", STR_PAD_LEFT)+"."+d.getFullYear();
        case 8:
            return pad(new String(d.getMonth()+1), 2, "0", STR_PAD_LEFT)+"/"+
                pad(new String(d.getFullYear()-2000), 2, "0", STR_PAD_LEFT);
    }
}

function toRussianDay(day)
{
    if(--day == -1)
        day = 6;
        
    return day;
}

function getMiniWeekday(day)
{
    switch(day) {
        case 0: return "Пн";
        case 1: return "Вт";
        case 2: return "Ср";
        case 3: return "Чт";
        case 4: return "Пт";
        case 5: return "Сб";
        case 6: return "Вс";
    }
}

function getMiniMonth(month)
{
    switch(month) {
        case 0: return "Янв";
        case 1: return "Фев";
        case 2: return "Мар";
        case 3: return "Апр";
        case 4: return "Май";
        case 5: return "Июн";
        case 6: return "Июл";
        case 7: return "Авг";
        case 8: return "Сен";
        case 9: return "Окт";
        case 10: return "Ноя";
        case 11: return "Дек";
    }
}

function getMonth(month)
{
    switch(month) {
        case 0: return "Январь";
        case 1: return "Февраль";
        case 2: return "Март";
        case 3: return "Апрель";
        case 4: return "Май";
        case 5: return "Июнь";
        case 6: return "Июль";
        case 7: return "Август";
        case 8: return "Сентябрь";
        case 9: return "Октябрь";
        case 10: return "Ноябрь";
        case 11: return "Декабрь";
    }
}

function shieldSplitter(value)
{
    if(value)
        return value.replace(/:/g, "\\:");
    else
        return "";
}

function splitValue(value)
{
    var value_arr = [];
    
    value = value+":";

    for(var i=0,j=0,c=0;i<value.length;i++)
        if(value.substr(i,1) == ":" && (i == 0 || value.substr(i-1,1) != "\\")) {
            value_arr[c++] = value.substr(j, i-j).replace(/\\:/g, ":");
            j = i + 1;
        }
        
    return value_arr;
}

function printit(button)
{
    button.style.display = "none";

    switch(navigator.appName) {
        case "Netscape":
        case "Opera":
            window.print();
            break;
        default:
            var WebBrowser = '<object id="WebBrowser1" width=0 height=0 classid="clsid:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
            document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
            WebBrowser1.ExecWB(6, 1);
    }
}

function createNavigateForm(fire, action)
{
    var form = document.createElement("form");
    
    form.action = action||"";
    form.method = "post";
    form.appendChild(createHidden("mode", "navigate"));
    form.appendChild(createHidden("fire", fire));
    
    return form;
}