////////////////////////////////////////////////////////////////////////////////
function trim (string) {
  return string.replace(/(^\s+)|(\s+$)/g, "");
}

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: '/common/i/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'
    }
}

function checkShadow(logoSize) {

	var newLogoSize = document.getElementById("logo").clientWidth;

	if (newLogoSize && newLogoSize != logoSize) {
		logoSize = newLogoSize;
		Shadower.init();
	}

	setTimeout(checkShadow, 100);

}

window.onload = function () {

	var paras = document.getElementsByTagName("p");
	var i = 0;
	while (i < paras.length) {
	if ((paras[i].innerHTML == "&nbsp;")) {
		paras[i].style.display = "none";
	} else if (trim(paras[i].innerHTML) == "") {
		paras[i].style.display = "none";
	}
	i++;
	}
	var tables = document.getElementsByTagName("table");
	var i = 0;
	while (i < tables.length) { 
	if (tables[i].className == "100%") {
		tables[i].className = "wide";
	}
	i++;
	}
	var trs = document.getElementsByTagName("tr");
	var i = 0;
	while (i < trs.length) { 
	if (trs[i].bgColor) {
		trs[i].bgColor = "";
	}
	i++;
	}

	var logo_obj = document.getElementById("logo");
	if(logo_obj && logoSize.clientWidth){
		var logoSize = logo_obj.clientWidth;
		checkShadow(logoSize);
		Shadower.init();
	}
}

/**
 * Поп-ап вкл/выкл
 */
function show_hide_shedowedpopup(popup_id) {
	var popup = document.getElementById(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);
				document.styleSheets[0].insertRule('#layout.show-'+trigger_position+' .empty {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)
}
