mySlideMenu = {
idList : '',

elemCloseWidth : 100,
elemOpenWidth : 100,
listMaxWidth : 800,
listMinWidth : 200,
listHeight : 0,
stepOpen : 30,
timeOpen : 10,

elemList : [],
prefix : 'mySlideElement_',
listWidth : 0,
objTimer : null

};

mySlideMenu.init = function(options) {
    if (typeof options != 'object') return;
    // ID
    if (options.idList) this.idList = options.idList;
    // Минимальная ширина области.
    if (options.listMinWidth) this.listMinWidth = options.listMinWidth;
    // Максимальная ширина области.
    if (options.listMaxWidth) this.listMaxWidth = options.listMaxWidth;
    // Высота области.
    if (options.listHeight) this.listHeight = options.listHeight;
    // Ширина открытого элемента.
    if (options.elemOpenWidth) this.elemOpenWidth = options.elemOpenWidth;
    // Ширина закрытого элемента.
    if (options.elemCloseWidth) this.elemClosrWidth = options.elemCloseWidth;
    // Шаг открытия.
    if (options.stepOpen) this.stepOpen = options.stepOpen;
    // Время открытия.
    if (options.timeOpen) this.timeOpen = options.timeOpen;
    // Префикс.
    if (options.prefix) this.prefix = options.prefix;
};

mySlideMenu.start = function(options) {
	if (typeof options == 'object') this.init(options);
    
	var idList = this.idList;
	
	var objList = document.getElementById(idList);
	if (!objList) return;
	var elemList = objList.getElementsByTagName('li');
	this.elemList = elemList;
	var len = elemList.length;
	
	if (len <= 1) return; 
	
	// Высота области.
	if (this.listHeight > 0) objList.style.height = this.listHeight + 'px';

	if (this.elemCloseWidth != 0) {
		var newWidth;
		newWidth = len * this.elemCloseWidth;
		if (newWidth < objList.offsetWidth) objList.style.width = newWidth + 'px';
		if (this.listMaxWidth <= 0) {
			objList.style.width = newWidth + 'px';
		} else {
			if (newWidth >= this.listMaxWidth) objList.style.width = this.listMaxWidth + 'px';
			else objList.style.width = newWidth + 'px';
		}
	}
	
	if (objList.offsetWidth <= this.elemOpenWidth) objList.style.width = (1.5 * this.elemOpenWidth) + 'px';
	this.listWidth = objList.offsetWidth;
	this.averageElemWidth = this.listWidth / len;

	// Ширина одного элемента, когда открыт один элемент.
	this.elemWidth = Math.floor((this.listWidth - this.elemOpenWidth) / (len - 1));
	for (var i = 0; i < len; ++i) {
		var idElem = this.prefix + i;
		this.elemList[idElem] = {};
		var elem = elemList[i];
		elem.id = idElem;
		this.elemList[idElem].realWidth = elem.offsetWidth;
		
		elem.style.width=this.averageElemWidth+'px';
		this.timer(elem);
	}
	
	var endElem = elemList.length - 1;
	this.objTimer = setInterval(function(){ 
	    mySlideMenu.slide(mySlideMenu.elemList[endElem])},mySlideMenu.timeOpen
	);
	
	
};

mySlideMenu.timer = function(elem) {
	elem.onmouseover = function() { 
		clearInterval(mySlideMenu.objTimer);
		mySlideMenu.objTimer = setInterval(function(){ mySlideMenu.slide(elem)},mySlideMenu.timeOpen);
	}
};

mySlideMenu.slide = function(s) {
	var currentWidth = parseInt(s.style.width,'10');
	if(currentWidth < this.elemOpenWidth) {
		var len = this.elemList.length;
	    var owt = 0;
		
		for (var i = 0; i < len; i++) {
			if(this.elemList[i] != s ) {
			    var curElem = this.elemList[i];
			    var curElemWidth = parseInt(curElem.style.width,'10');;
				var oi = 0;
				 
				if(curElemWidth > this.elemWidth) {
					oi = Math.floor( ( curElemWidth - this.elemWidth ) / this.stepOpen);
					oi = ( oi > 0) ? oi : 1;
					curElem.style.width = (curElemWidth-oi) + 'px';
				}
				owt = owt + ( curElemWidth - oi);
			}
		}
		s.style.width = (this.listWidth - owt - 10) + 'px';
	} else {
		clearInterval(mySlideMenu.objTimer);
	}
};

mySlideMenu.stop = function() {
    clearInterval(mySlideMenu.objTimer);
};
