// $Revision: 10257 $

//var IS_DRISTOPAL = false;

var BASE_DAMOCHKA  = '/';
var BASE_STATIC    = '/static/';
var SCRIPTS_FOLDER = BASE_STATIC+'js/';
var STYLES_FOLDER  = BASE_STATIC+'styles/';
var IMAGES_FOLDER  = BASE_STATIC+'pics/';
var HTML_FOLDER    = BASE_STATIC+'html/';
var XML_FOLDER     = BASE_STATIC+'xml/';
var VIDEO_PLAYER   = BASE_DAMOCHKA + 'video_player/?movie=';

// enum Gender
var GENDER_ANY     =  '0';
var GENDER_MALE    =  '1';
var GENDER_FEMALE  =  '2';

// enum Type
var TYPE_USER      =  '1';
var TYPE_BUSINESS  =  '2';
var TYPE_VIP       =  '3';
var TYPE_DEFAULT   = TYPE_USER;

var __HTML_PARSER_ARG   =  1;
var __HTML_PARSER_CLONE =  2;
var __HTML_PARSER_FUNC  =  4;
var __HTML_PARSER_BLANK =  8;
var __HTML_PARSER_RUN   = 16;
var __HTML_PARSER_LOCAL = 32;
var __HTML_PARSER_ALL   = 
    __HTML_PARSER_ARG   + 
    __HTML_PARSER_CLONE +
    __HTML_PARSER_FUNC  +
    __HTML_PARSER_BLANK +
    __HTML_PARSER_RUN   
;

var __arg_    = '__arg_'     ;
var   root_   =   'root_'    ;
var __clone_  = '__clone_'   ;
var __func_   = '__func_'    ;
var __blank_  = '__is_blank_';

var __html_parser_variables;
var __html_parser_clones   ;
var __html_parser_functions;
var __html_parser_blanks   ;

if(!__html_parser_variables) __html_parser_variables = new Array();
if(!__html_parser_clones   ) __html_parser_clones    = new Array();
if(!__html_parser_functions) __html_parser_functions = new Array();
if(!__html_parser_blanks   ) __html_parser_blanks    = new Array();

///////////////////////////
function __html_is_blank(name, block) {
    if(!__html_parser_variables[name].innerHTML || (__html_parser_variables[name].innerHTML == '0')) {
        block.style.display = 'none';
    }
}

function __html_clone(name, patt) {
    name = name || '';

    try {
        eval('var list = __html_LIST_' + name);
    } catch (e) {
        patt.style.display = '';
        return;
    }
    
    patt = patt || __html_parser_clones[name];
    patt.style.display = 'none';
    
    if(!is_non_blank_array_or_object(list)) return;
    
    var i; for(i = 0; i < list.length; i++) {
        __html_clone_pattern(__HTML_PARSER_ALL & ~__HTML_PARSER_RUN, list[i].key, i, name, patt, list);
    }
}

function __html_clone_pattern(flags, id, i, name, patt, list) {
    id   = id   ||  0;
    name = name || '';
    
    if(!list) try {
        eval('var list = __html_LIST_' + name);
    } catch (e) {
        return;
    }

    patt = patt || __html_parser_clones[name];    
    var root = __html_parser_variables[root_ + name];
    
    if(!is_non_blank_array_or_object(list) || !patt || !root) return;
   
    try {
        eval ('var item = func_' + name + '(__HTML_PARSER_ARG, id, i, name, patt, list)');
    } catch(e) {
        alert(e);
        return;
    }
    
    item = root.appendChild(item);
    
    __html_parser(
        item, 
        (((__HTML_PARSER_ALL | __HTML_PARSER_LOCAL) & ~__HTML_PARSER_ARG) & flags)
        , 
        '', 
        id, 
        true
    );

    __html_parser_clones[name + id] = item;
}
///////////////////////////

///////////////////////////
function __html_parser(doc, flags, prefix, postfix, is_changed) {
    flags      = flags      || __HTML_PARSER_ALL;
    prefix     = prefix     || '';
    postfix    = postfix    || '';
    is_changed = is_changed || false;
    
    var name, block, block_index, index, i, dublicate;
    
    var clones = new Array();
    var funcs  = new Array();
    var blanks = new Array();
    
    var blocks = doc.getElementsByTagName('*');
    
    for(index in blocks) {
        block = blocks[index];
        if((typeof(block) == 'object') && block.id && (block.id != '')) {
            if((flags & __HTML_PARSER_ARG) && block.id.match(__arg_)) {
                name = block.id.replace(__arg_  , '');
                if(is_changed) {
                    block.id = __arg_ + prefix + name + postfix;
                }
                __html_parser_variables[prefix + name + postfix] = block;
            } 
            else
            if((flags & __HTML_PARSER_CLONE) && block.id.match(__clone_)) {
                name = block.id.replace(__clone_, '');
                if(is_changed) {
                    block.id = __clone_ + prefix + name + postfix;
                }
                __html_parser_clones[prefix + name + postfix] = block;

                if((flags & __HTML_PARSER_RUN)) {
                    clones[prefix + name + postfix] = block;
                }
            }
            else 
            if((flags & __HTML_PARSER_FUNC) && block.id.match(__func_)) {
                name = block.id.replace(__func_ , '');
                if(is_changed) {
                    block.id = __func_ + prefix + name + postfix;
                }
                
                i = {f_index: prefix + postfix, f_block: block};
                
                dublicate = false;
                if(!(__html_parser_functions[name])) {
                    __html_parser_functions[name] = new Array();
                } else {
                    for(block_index in __html_parser_functions[name]) {
                        if(__html_parser_functions[name][block_index].f_index == i.f_index) {
                            dublicate = true;
                            break;
                        }
                    }
                }
                if(!dublicate) __html_parser_functions[name].push(i);
                
                if(!dublicate && (flags & __HTML_PARSER_RUN) && (flags & __HTML_PARSER_LOCAL)) {
                    if(!(funcs[name]))
                        funcs[name] = new Array();
                    funcs[name].push(i);
                }
            } 
            else 
            if((flags & __HTML_PARSER_BLANK) && block.id.match(__blank_)) {
                name = block.id.replace(__blank_, '');
                if(is_changed) {
                    block.id = __blank_ + prefix + name + postfix;
                }
                __html_parser_blanks[prefix + name + postfix] = block;
                
                if((flags & __HTML_PARSER_RUN) && (flags & __HTML_PARSER_LOCAL)) {
                    blanks[prefix + name + postfix] = block;
                }
            }
        }
    }

    if(!(flags & __HTML_PARSER_RUN)) return;
    
    if(flags & __HTML_PARSER_CLONE) {
        for(name in clones) {
            __html_clone(name, clones[name]);
        }
    }

    if(flags & __HTML_PARSER_FUNC) {
        if(!(flags & __HTML_PARSER_LOCAL)) funcs = __html_parser_functions;
        for(name in funcs) {
            for(index in funcs[name]) {
                try {
                    // func_name('index', block, 'func_name', func_name)
                    i = funcs[name][index].f_index;
                    if(i == '') i = index;
                    eval (name + '(i, funcs[name][index].f_block, name, ' + name + ')');
                } catch(e) {
                    alert(e);
                }
            }
        }
    }
    
    if(flags & __HTML_PARSER_BLANK) {
        if(!(flags & __HTML_PARSER_LOCAL)) blanks = __html_parser_blanks;
        for(name in blanks) {
            __html_is_blank(name, blanks[name]);
        }
    }
}

function __html_parse_block(doc, flags, prefix, postfix, is_changed) {
    flags      = flags      || __HTML_PARSER_ARG;
    prefix     = prefix     || '';
    postfix    = postfix    || '';
    is_changed = is_changed || false;
    
    var name, block, index;
    
    var parse_blocks = new Array();
    
    var blocks = doc.getElementsByTagName('*');
    
    var type;
    switch(flags) {
        case __HTML_PARSER_ARG  :
            type = __arg_       ;
        break;
        case __HTML_PARSER_CLONE:
            type = __clone_     ;
        break;
        case __HTML_PARSER_FUNC :
            type = __func_      ;
        break;
        case __HTML_PARSER_BLANK:
            type = __is_blank_  ;
        break;
        default:
            return parse_blocks;
    }
    
    for(name in blocks) {
        block = blocks[name];
        if((typeof(block) == 'object') && block.id && block.id != '') {
            if(block.id.match(type)) {
                name = block.id.replace(type, '');
                if(is_changed) {
                    block.id = type + prefix + name + postfix;
                }
                parse_blocks[prefix + name + postfix] = block;
            }
        }
    }
    
    return parse_blocks;
}
///////////////////////////

///////////////////////////
function is_non_blank_array_or_object(variable) {
    return (
        (typeof  variable == 'array'  && (variable.length)) ||
        (typeof  variable == 'object' && (variable.length || variable.array_length))
    );
}

function table_row_cell(pattern) {
    return (Detect.IE() && !Detect.OPERA()) ?  
                                          'block' : (
         (pattern.nodeName == 'TR') ?  'table-row' : (
         (pattern.nodeName == 'TD' ||
          pattern.nodeName == 'TH') ? 'table-cell' : 
                                          'block'
    ));    
}
///////////////////////////

///////////////////////////////////////
function resizeIFRAME(name) {
    clearTimeout(this.name);
    var i, childNodes, scrollHeight = 0, elem = document.getElementById(name);
    
    if( elem.contentWindow && 
        elem.contentWindow.document &&
        elem.contentWindow.document.documentElement &&
        elem.contentWindow.document.documentElement.childNodes &&
        (elem.contentWindow.document.loaded || !Detect.MOZILLA())// Хак, в Мозиле по-частям выводится высота IFRAME
    ) {
        childNodes = elem.contentWindow.document.documentElement.childNodes;
        for(i in childNodes) {
            if(childNodes[i] && childNodes[i].nodeName == 'BODY') {
                scrollHeight = childNodes[i].scrollHeight;
                break;
            }
        }
    }
    
    if(scrollHeight) {
        elem.setAttribute('height', scrollHeight);
        return elem;
    } else {
        this.name = setTimeout('resizeIFRAME("'+name+'")', 500);
        return false;
    }
}

function drawIFRAME(src, name) {
    document.writeln('<iframe src="'+src+'" id="'+name+'" width="100%" frameborder="0" scrolling="No"></iframe>');
    resizeIFRAME(name);
}
///////////////////////////////////////

///////////////////////////////////////
function nicklink(uid, block, link, nickname, online, gender, type) {
    var html = '';
    if(uid == 0) uid = '';
    
    online = online || (
        __html_parser_variables['online' + uid] ?
        __html_parser_variables['online' + uid].innerHTML : '');
            
    type = type || (
        __html_parser_variables['status' + uid] ?
        __html_parser_variables['status' + uid].innerHTML : '');
        
    if(
        (typeof(online) == 'boolean') ||
        (online === 'true' ) || 
        (online === 'false')
    ) {
        html += draw_flower(uid, online, type);
    }
    
    if(link) {
        html += link;        
    } else {
        var nickclass = '';
        
        nickname = nickname || (
            __html_parser_variables['nickname' + uid] ?
            __html_parser_variables['nickname' + uid].innerHTML : '');

        switch(type) {
            case TYPE_BUSINESS:
                nickclass = 'business';    
            break;
            case TYPE_VIP     :
                nickclass = 'vip_';    
            case TYPE_USER    :
            case TYPE_DEFAULT :
            default:
                gender = gender || (
                    __html_parser_variables['gender' + uid] ?
                    __html_parser_variables['gender' + uid].innerHTML : '');
                switch(gender) {
                    case GENDER_FEMALE:
                        nickclass += 'woman';    
                    break;
                    case GENDER_MALE  :
                    case GENDER_ANY   :
                    default:
                        nickclass += 'man'  ;    
                }
        }
        
        html += '<a href ="javascript:openUserInfo('+uid+')" class="'+nickclass+'">'+(nickname)+'</a>';
    }
    
    if(typeof(block) == 'object') {
        block.innerHTML = html;
    }
    
    return html;
}

function nicklink_in_block(uid, block) {return nicklink(uid, block);}
///////////////////////////////////////

var SETTINGS_JS = true;
