﻿



////////////////////////////////////////////////////////////////////////////////

var css = {
    /**
    * Проверка на наличие класса у эл-та
    * @param obj Object ссылка на эл-т DOM
    * @param class_string String имя класса
    */
    hasClass: function(obj, class_string) {
        var classes = obj.className
        var cls_array = classes.toString().split(' ')
        for (var i in cls_array) {
            if (cls_array[i] == class_string) {
                return true
            }
        }
        return false
    },
    /**
    * Удаление класса у элемента
    * (на деле удаляет из св-ва className все найденные подстроки)
    */
    removeClass: function(obj, class_string) {
        var regex = new RegExp(class_string, "ig")
        obj.className = obj.className.toString().replace(regex, '')
    },
    /**
    * Добавление класса элементу
    */
    addClass: function(obj, class_string) {
        if (!css.hasClass(obj, class_string)) {
            obj.className += ' ' + class_string
        }
    }
}

var Shadower = {
    shadow_image_src: '../Content/Images/shadow.png',
    targets: null,
    container: null,
    init: function() {
        if (this.targets == null) {
            this.targets = Sizzle('.needshadow')
        }
        if (this.container == null) {
            this.container = document.createElement('div')
            this.container.id = 'shadows'
            document.body.appendChild(this.container)
            for (var i in this.targets) {
                this.create_shadow(i)
            }
            window.onresize = function() {
                Shadower.init()
            }
        }
        i = 0
        for (i in this.targets) {
            this.resize_shadow(i)
        }
    },
    create_shadow: function(index) {
        var new_div = document.createElement('div')
        var new_img = document.createElement('img')
        new_img.src = this.shadow_image_src
        new_div.className = 'shadow'
        if (this.targets[index].id) {
            new_div.id = this.targets[index].id + '-shadow'
        }
        var zIndex = null
        var cStyle = null
        var target_visible = true
        if (!window.getComputedStyle) { // IE
            cStyle = this.targets[index].currentStyle
            zIndex = cStyle.zIndex
            if (cStyle.display == 'none' || cStyle.visibility == 'hidden') {
                target_visible = false
            }
        } else { // Others
            cStyle = getComputedStyle(this.targets[index], '')
            zIndex = cStyle.getPropertyValue('z-index')
            if (cStyle.getPropertyValue('display') == 'none' || cStyle.getPropertyValue('visibility') == 'hidden') {
                target_visible = false
            }
        }
        if (zIndex > 1) {
            new_div.style.zIndex = parseInt(zIndex) - 1
        }
        if (!target_visible) {
            new_div.style.visibility = 'hidden'
        }
        new_div.appendChild(new_img)
        this.container.appendChild(new_div)
    },
    resize_shadow: function(index) {
        var shadows = this.container.childNodes
        var needshadow = this.targets[index]
        var shadow = shadows[index]
        shadow.style.width = needshadow.offsetWidth * 1.3 + 'px'
        shadow.style.height = needshadow.offsetHeight * 1.5 + 'px'
        var offset = absPosition(needshadow)
        shadow.style.left = offset.x + needshadow.offsetWidth / 2 + 'px'
        shadow.style.top = offset.y + needshadow.offsetHeight / 2 + 'px'
        shadow.style.marginLeft = -shadow.offsetWidth / 2 + 'px'
        shadow.style.marginTop = -shadow.offsetHeight / 2 + 'px'
    }
}

window.onload = function() {
    Shadower.init()
}

/**
* Поп-ап вкл/выкл
*/
function show_hide_shedowedpopup(popup_id) {
    var popup = $(popup_id)
    var shadow_popup = $(popup_id + '-shadow')
    if (css.hasClass(popup, 'invisible')) {
        css.removeClass(popup, 'invisible')
        shadow_popup.style.visibility = 'visible'
        if (document.body.attachEvent) {
            document.body.attachEvent('onclick', hide_all_poups)
            window.event.cancelBubble = true
        } else {
            document.body.addEventListener('click', hide_all_poups, true)
        }
    } else {
        css.addClass(popup, 'invisible')
        shadow_popup.style.visibility = 'hidden'
    }
    return false
}

/**
* Скрытие всех открытых попапов
* (список IDs для простоты задается явно)
*/
function hide_all_poups(e) {
    var list = ['branches', 'key']
    //  IE
    if (!e) var e = window.event
    //                 IE                                         Others
    var className = e.srcElement ? e.srcElement.className : e.target.className
    var obj = e.srcElement ? e.srcElement : e.target
    var close_flag = true
    while (obj.tagName != 'BODY' && close_flag != false) {
        if (css.hasClass(obj, 'noclose')) {
            close_flag = false
        }
        obj = obj.parentNode
    }
    if (close_flag) {
        for (var i in list) {
            if ($(list[i])) {
                css.addClass($(list[i]), 'invisible')
                $(list[i] + '-shadow').style.visibility = 'hidden'
            }
        }
        if (document.body.removeEventListener) { // Others
            document.body.removeEventListener('click', hide_all_poups, true);
        } else { // IE
            document.body.detachEvent('onclick', hide_all_poups);
        }
    }
}

//разворачивание подробной информации в таблицах
var last_detailed;
var last_details;
function show_table_details(link) {
    var detailed = link.parentNode.parentNode;
    var details = document.getElementById(link.parentNode.parentNode.id + '_details');
    if (detailed.className == 'detailed') {
        detailed.className = '';
        details.className = 'hidedetails';
    } else {
        detailed.className = 'detailed';
        details.className = '';
    }
    if (last_detailed != null && last_detailed != detailed) {
        last_detailed.className = '';
        last_details.className = 'hidedetails';
    }
    last_detailed = detailed;
    last_details = details;
    return false;
}

function show_dl_details(link) {
    var detailed = link.parentNode;
    var details = document.getElementById(link.parentNode.id + '_details');
    if (detailed.className == 'detailed') {
        detailed.className = '';
        details.className = 'hidedetails';
    } else {
        detailed.className = 'detailed';
        details.className = '';
    }
    if (last_detailed != null && last_detailed != detailed) {
        last_detailed.className = '';
        last_details.className = 'hidedetails';
    }
    //	last_detailed = detailed;
    //	last_details = details;
    return false;
}

/**
* Счетчик созданых CSS правил
*/
var css_rule_number

/**
* Переключение триггеров
*/
function show_trigger(link, triggers) {
    trigger_position = link.parentNode.className;
    document.getElementById('layout').className = 'show-' + trigger_position;
    var triggers_length = triggers.length
    var trigger_index = null
    if (document.styleSheets[0].cssRules) {
        if (css_rule_number == null) {
            css_rule_number = document.styleSheets[0].cssRules.length;
        }
        document.styleSheets[0].insertRule('#layout.show-' + trigger_position + ' ul.trigger li.' + trigger_position + ' { background: #d9d282; }', css_rule_number);
        for (var i = 0; i < triggers_length; i++) {
            trigger_index = triggers[i]
            if ('trigger-' + trigger_index == trigger_position) {
                document.styleSheets[0].insertRule('#layout.show-' + trigger_position + ' .trigger-' + trigger_index + ' {}', css_rule_number + i);
            } else if (trigger_position != 'trigger-0') {
                document.styleSheets[0].insertRule('#layout.show-' + trigger_position + ' .trigger-' + trigger_index + ' {display: none;}', css_rule_number + i);
            }
        }
    } else {
        if (css_rule_number == null) {
            css_rule_number = document.styleSheets[0].rules.length;
        }
        document.styleSheets[0].addRule('#layout.show-' + trigger_position + ' ul.trigger li.' + trigger_position, 'background: #d9d282;', css_rule_number);
        for (var i = 0; i < triggers_length; i++) {
            trigger_index = triggers[i]
            if ('trigger-' + trigger_index == trigger_position) {
                document.styleSheets[0].addRule('#layout.show-' + trigger_position + ' .trigger-' + trigger_index, ' ', css_rule_number + i);
            } else if (trigger_position != 'trigger-0') {
                document.styleSheets[0].addRule('#layout.show-' + trigger_position + ' .trigger-' + trigger_index, 'display: none', css_rule_number + i);
            }
        }
    }
    return false;
}


////////////////////////////////////////////////////////////////////////////////

function pr(obj) {
    if (obj) {
        var result = ''
        for (var i in obj) {
            result += 'obj' + '.' + i + ' = ' + obj[i] + '\n'
        }
        alert(result)
    } else {
        alert('[empty]')
    }
}

function absPosition(obj) {
    var x = y = 0;
    while (obj) {
        x += obj.offsetLeft;
        y += obj.offsetTop;
        obj = obj.offsetParent;
    }
    return { x: x, y: y };
}

function $(id) {
    return document.getElementById(id)
}