/**
 * @author Michal Szul (michal.szul@gmail.com)
 * @copyright Michal Szul 2008 All rights reserved
 */
function loadScript(relURL){//relative URL to executed HTML file
	var url=window.location.href;
	if(url.indexOf('.')!=-1||url.indexOf('?')!=-1){
		url=url.replace(/\?[A-Za-z0-9?=&]*/,'');
		url=url.replace(/[A-Za-z0-9]*\.[A-Za-z0-9?=&]*$/,'');
	}
	if(relURL.charAt(0)=='/'){
		relURL=relURL.replace(/^\//, '');
	}
	document.write('<script src="'+url+relURL+'" type="text/javascript"></script>');
}
loadScript('/lib/browserDetection.js');

function checkContact(val){
	var result=false;
	val=val.replace(/ /,'');
	result=val.match(/^[a-z0-9!#\$%&'\*\?\^_\{\|}~-]+(\.[a-z0-9!#\$%&'\*\?\^_\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$/);
	if(result) return true;
	result=val.match(/^[0-9\(\)\-\\\+\[\]]*$/);
	if(result) return true;
	else return false;
}

function isEmptyString(val){
	val=val.replace(/ /,'');
	if(val.length>0) return true;
	else return false;
}

function validateContactForm(){
	var titleField=$('c_title');
	var bodyField=$('c_body');
	var senderField=$('c_sender');
	
	var response='';
	if(isEmptyString(titleField.value)){
		if(bodyField.value!=bodyField.defaultValue && isEmptyString(bodyField.value)){
			if (senderField.value != senderField.defaultValue && isEmptyString(senderField.value) && checkContact(senderField.value)) {
				return true;
			}else{
				response+='Podaj swój adres email bądź nr telefonu!';
			}
		}else{
			response+='Uzupełnij treść zapytania!';
		}
	}else{
		response+='Podaj tytuł zapytania!';
	}
	alert(response);
	return false;
}

function setClass(obj, className){
    if (document.all && !window.opera) {
        obj.className = className;
    }
    else {
        obj.setAttribute('class', className);
    }
}

function setOnClick(obj,fName){
	if(document.all&&!window.opera){
		obj["onclick"] = new Function(fName);
	}else{
		obj.setAttribute('onclick',fName);
	}
}

function setOnMouseOut(obj,fName){
	if(document.all&&!window.opera){
		obj["onmouseout"] = new Function(fName);
	}else{
		obj.setAttribute('onmouseout',fName);
	}
}

function setOnMouseOver(obj,fName){
	if(document.all&&!window.opera){
		obj["onmouseover"] = new Function(fName);
	}else{
		obj.setAttribute('onmouseover',fName);
	}
}

function setTitle(obj, title){
    if (document.all && !window.opera) {
        obj.title = title;
    }
    else {
        obj.setAttribute('title', title);
    }
}

function redirect(toURL){
	window.location=toURL;
}

function showHide(element){
	if($(element).style.display=="none"){
		new Effect.BlindDown(element, {duration:0.5});
	}else{
		new Effect.BlindUp(element, {duration:0.5});
	}
}

function upDown(element, trigElem){
	element=$(element);
	trigElem=$(trigElem);
	if(trigElem.style.display!='none'){
		setClass(element, '');
	}else{
		setClass(element, 'down');
	}
}

function hideElem(element){
	if($(element).style.display!="none"){
		new Effect.BlindUp(element, {duration:0.5});
	}
}

function moveElem(direction){
	var xOffset=0;
	var element=$('bottom_menu_bar');
		switch (direction) {
			case 'left':
				if(parseInt(element.style.left.split('px')[0]) > (Element.getDimensions(element).width - 910)*(-1)) xOffset = -160;
				break;
			case 'right':
				if(parseInt(element.style.left.split('px')[0]) < 0) xOffset = 160;
				break;
		}
	
	new Effect.Move(element, {
        x: xOffset,
        y: 0,
        duration: 0.5,
        transition: Effect.Transitions.spring
    });
}

function IsNumeric(sText){
    var ValidChars = "0123456789.";
    var IsNumber = true;
    var Char;
    
    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}

function getElementsByClassName(parentNode, className){
    var elementsToReturn = new Array;
    var ctr = 0;
    for (var i = 0; i < parentNode.childNodes.length; i++) {
		if (parentNode.childNodes.item(i).className) {
			var classNames = parentNode.childNodes.item(i).className.split(' ');
			for (var j = 0; j < classNames.length; j++) {
				if (classNames[j] == className) {
					elementsToReturn[ctr] = parentNode.childNodes.item(i);
					ctr++;
					break;
				}
			}
		}
    }
    return elementsToReturn;
}

function getURLVariables(){
    var buffer = window.location.href.split('?');
    if (buffer.length > 1) {
        var variables = new Array();
        buffer = buffer[1].split('&');
        for (var i = 0; i < buffer.length; i++) {
            var variable = buffer[i].split('=');
            variables[i] = {
                name: variable[0],
                value: variable[1]
            }
        }
        return variables;
    }
    else {
        return false;
    }
}

function importXML(filePath){
    if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument("", "", null);
        xmlDoc.onload = createTable;
    }
    else 
        if (window.ActiveXObject) {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.onreadystatechange = function(){
                if (xmlDoc.readyState == 4) 
                    return xmlDoc;
            };
        }
        else {
            alert('Twoja przeglądarka nie pozwala na uruchomienie tej aplikacji.');
            return false;
        }
    xmlDoc.load(filePath);
}

function resetZPosition(element, elementIDs){
	for(var i=0; i<elementIDs.length; i++){
		$(elementIDs[i]).style.zIndex=999;
		setClass($(elementIDs[i]),'unactive');
	}
	element.style.zIndex=1000;
	setClass(element,'');
}

function resetASelected(aID){
	var toReset=getElementsByClassName($('bottom_menu_bar'),'selected');
	for(var i=0; i<toReset.length; i++){
		var clsnm=toReset[i].className;
		clsnm=clsnm.replace(/ selected/, '');
		setClass(toReset[i],clsnm);
	}
	setClass(document.getElementById(aID), "bm_item selected");
	if(getElementsByClassName($('algorytm_window'),'tbl').length>0){
		$('algorytm_window').removeChild(getElementsByClassName($('algorytm_window'),'tbl')[0]);
	}
	var divElem=document.createElement('div');
	setClass(divElem,'tbl');
	divElem.innerHTML=getElementsByClassName($(''+aID),'tbl')[0].innerHTML;
	divElem.style.height=(getElementsByClassName(divElem,'tr').length*17)+'px';
	$('algorytm_window').appendChild(divElem);
	$('algorytm_window').style.width=(getElementsByClassName(getElementsByClassName(divElem,'tr')[0],'td').length*26+10)+'px';
	//getElementsByClassName(getElementsByClassName(divElem,'tr')[0],'td').length;
	divElem.style.width=(getElementsByClassName(getElementsByClassName(divElem,'tr')[0],'td').length*26)+'px';
	divElem.style.marginLeft=((Element.getDimensions($('algorytm_window')).width-getElementsByClassName(getElementsByClassName(divElem,'tr')[0],'td').length*26)/2-5)+'px';
	var linkToLeft=(document.documentElement.clientWidth/2+Element.getDimensions($('main_cont')).width/2-Element.getDimensions($('algorytm_window')).width);
	$('algorytm_window').style.left=linkToLeft-50+'px';
	$('algorytm_window').style.top=270+'px';
	$('algorytm_window').style.height=((getElementsByClassName(divElem,'tr').length*17)+35)+'px';
	new Effect.Grow('algorytm_window',{duration:0.5});
	resetZPosition($('algorytm_window'),['help_window','contact_window','link_window','simple_alert_window']);
}

function clearField(fieldID){
	var field=$(fieldID);
	if(field.value==field.defaultValue){
		field.value='';
	}else if(field.value==''){
		field.value=field.defaultValue;
	}
}

//=========================================================================================================================================
/*
 HTMLDivElement.prototype.setCls=function(className){//oczywicie w IE nie działa do kurwy nędzy bo ta nie wspiera dodawania prototypów...
 obj=this;
 if(document.all&&!window.opera){//IE ^_^
 obj.className = className;
 }else{
 obj.setAttribute('class',className);
 }
 }
 */
function Tor(){
    this.transformator = createNewElem();
    this.s_transformatora = createNewElem();
    this.s_lewe = createNewElem();
    this.s_prawe = createNewElem();
    this.tor = createNewElem();
    setClass(this.transformator, "transformator");
    setClass(this.s_transformatora, "s_transformatora");
    setClass(this.s_lewe, "s_lewe");
    setClass(this.s_prawe, "s_prawe");
    setClass(this.tor, "tor");
    this.tor.appendChild(this.transformator);
    this.tor.appendChild(this.s_transformatora);
    this.tor.appendChild(this.s_lewe);
    this.tor.appendChild(this.s_prawe);
    
    function createNewElem(){
        return document.createElement('div');
    }
    
    this.appendInto = function(elem){
        elem.appendChild(this.tor);
    }
    this.insertBefore = function(insertIntoElem, insertBeforeElem){
        insertIntoElem.insertBefore(this.tor, insertBeforeElem);
    }
    this.dimTransformator = function(){
        var clsnm = this.transformator.className;
        clsnm = clsnm.split(' transformator_highlight')[0];
        clsnm = clsnm.split(' highlight')[0];
        setClass(this.transformator, clsnm);
    }
    this.highlightTransformator = function(){
        this.dimTransformator();
        var clsnm = this.transformator.className + " highlight transformator_highlight";
        setClass(this.transformator, clsnm);
    }
    this.isEmptyTransformator = function(){
        if (this.transformator.childNodes.length > 0) {
            return false;
        }
        else {
            return true;
        }
    }
    this.getSprzegla = function(sprzegloId){
        var sprzegla = new Array;
        switch (sprzegloId) {
            case 1:
                sprzegla[0] = this.s_transformatora;
                break;
                
            case 2:
                sprzegla[0] = this.s_lewe;
                break;
                
            case 3:
                sprzegla[0] = this.s_transformatora;
                sprzegla[1] = this.s_lewe;
                break;
                
            case 4:
                sprzegla[0] = this.s_prawe;
                break;
                
            case 5:
                sprzegla[0] = this.s_transformatora;
                sprzegla[1] = this.s_prawe;
                break;
                
            case 6:
                sprzegla[0] = this.s_lewe;
                sprzegla[1] = this.s_prawe;
                break;
                
            case 7:
                sprzegla[0] = this.s_transformatora;
                sprzegla[1] = this.s_lewe;
                sprzegla[2] = this.s_prawe;
                break;
        }
        return sprzegla;
    }
    this.getSprzeglaId = function(sprzegloId){
        var sprzegla = new Array;
        switch (sprzegloId) {
            case 1:
                sprzegla[0] = 1;
                break;
                
            case 2:
                sprzegla[0] = 2;
                break;
                
            case 3:
                sprzegla[0] = 1;
                sprzegla[1] = 2;
                break;
                
            case 4:
                sprzegla[0] = 4;
                break;
                
            case 5:
                sprzegla[0] = 1;
                sprzegla[1] = 4;
                break;
                
            case 6:
                sprzegla[0] = 2;
                sprzegla[1] = 4;
                break;
                
            case 7:
                sprzegla[0] = 1;
                sprzegla[1] = 2;
                sprzegla[2] = 4;
                break;
        }
        return sprzegla;
    }
    this.isEmptySprzeglo = function(sprzegloId){
        var sprzegla = this.getSprzegla(sprzegloId);
        var rtrn = true;
        for (var sp = 0; sp < sprzegla.length; sp++) {
            if (sprzegla[sp].childNodes.length > 0) {
                rtrn = false;
                return rtrn;
            }
        }
        return rtrn;
    }
    this.highlightSprzeglo = function(sprzegloId){
        this.dimSprzeglo(sprzegloId);
        var sprz = this.getSprzegla(sprzegloId);
        for (var ilSprz = 0; ilSprz < sprz.length; ilSprz++) {
            var clsnm = sprz[ilSprz].className + " highlight sprzeglo_highlight";
            setClass(sprz[ilSprz], clsnm);
        }
    }
    this.dimSprzeglo = function(sprzegloId){
        var sprz = this.getSprzegla(sprzegloId);
        for (var ilSprz = 0; ilSprz < sprz.length; ilSprz++) {
            var clsnm = sprz[ilSprz].className;
            clsnm = clsnm.split(' sprzeglo_highlight')[0];
            clsnm = clsnm.split(' highlight')[0];
            setClass(sprz[ilSprz], clsnm);
        }
    }
    this.getEmptySprzegla = function(sprzegloId){
        var sprzegla = this.getSprzeglaId(sprzegloId);
        var emptySprzegla = new Array;
        for (var i = 0; i < sprzegla.length; i++) {
            if (this.isEmptySprzeglo(sprzegla[i])) {
                emptySprzegla.push(sprzegla[i]);
            }
        }
        return emptySprzegla;
    }
    this.isEmpty = function(){
        if (this.transformator.childNodes.length == 0 && this.s_transformatora.childNodes.length == 0 && this.s_lewe.childNodes.length == 0 && this.s_prawe.childNodes.length == 0) {
            return true;
        }
        else {
            return false;
        }
    }
    this.isGenerator = function(){
        if (this.transformator.childNodes.length) {
            var clsnm = this.transformator.firstChild.className.split(' ');
            for (var i in clsnm) {
                if (clsnm[i] == 'toolbox_generator') {
                    return true;
                }
            }
            return false;
        }
        else {
            return false;
        }
    }
}

function Sekcja(){
    this.sekcja = createNewElem();
    setClass(this.sekcja, "sekcja");
    this.tory = new Array;
    
    function createNewElem(){
        return document.createElement('div');
    }
    this.appendInto = function(elem){
        elem.appendChild(this.sekcja);
    }
    this.insertBefore = function(insertIntoElem, insertBeforeElem){
        insertIntoElem.insertBefore(this.sekcja, insertBeforeElem);
    }
    this.onTransformatorDrag = function(first, last){
        if (first) {
            for (var tr = this.tory.length - 1; tr >= 0; tr--) {
                this.tory[tr + 1] = this.tory[tr];
            }
            this.tory[0] = new Tor;
            if (this.tory[1]) {
                this.tory[0].insertBefore(this.sekcja, this.tory[1].tor);
            }
            else {
                this.tory[(((this.tory.length - 1) < 0) ? 0 : this.tory.length - 1)].appendInto(this.sekcja);
            }
        }
        if (last) {
            this.tory.push(new Tor);
            this.tory[(((this.tory.length - 1) < 0) ? 0 : this.tory.length - 1)].appendInto(this.sekcja);
        }
    }
}

function Szkic(wrkspc){
    this.conteiner = wrkspc;
    this.Sekcje = new Array(new Sekcja);
    this.szkic = createNewElem();
    setClass(this.szkic, 'szkic');
    this.Sekcje[0].appendInto(this.szkic);
    this.stage=1;	
	this.helpSt2=1;
	
	this.nextButton=$('next_button');
	this.prevButton=$('prev_button');
	setTitle(this.nextButton, 'kliknij jeżeli skończyłeś tworzenie schematu i chcesz przejsć do wyboru algorytmu');
	setTitle(this.prevButton, 'kliknij jeżeli chcesz wrócić do tworzenia schematu');
	setOnClick(this.nextButton, "schema.nextStep()");
	setOnClick(this.prevButton, "schema.nextStep()");
	
	this.przeslona=createNewElem();
	this.przeslona.id='workspace_przeslona';
	this.przeslona.style.display='none';
	this.conteiner.appendChild(this.przeslona);
	this.buttons=new Array();
	this.switchState=new Array();
    
    function createNewElem(){
        return document.createElement('div');
    }
	this.initSimulator=function(){
		this.przeslona.innerHTML="";
		for(var i=0; i<this.buttons.length; ){
			this.buttons.pop();
		}
		for(var i=0;i<this.switchState.length;i++){
			if (i + 1 < this.bottom_menu.selectedAlgorytm.cases[0].u.length) {
				this.switchState[i].switchRef.getElementsByTagName('img')[0].src = 'lib/images/sprzeglo_tor.png';
			}
			else {
				this.switchState[i].switchRef.getElementsByTagName('img')[0].src = 'lib/images/sprzeglo_sekcja.png';
			}
		}
		for(var i=0; i<this.switchState.length; i++){
			this.switchState[i].state=1;
		}
		var buttons=new Array();
		var trCtr=0;
		for(var sk=0; sk<this.Sekcje.length; sk++){
			for(var tr=0; tr<this.Sekcje[sk].tory.length; tr++, trCtr++){
				if(!this.Sekcje[sk].tory[tr].isEmptyTransformator()){
					this.buttons.push({
						currentState: 0,
						button: createNewElem()
					});
					var btnToLeft=0;
					if(this.buttons.length>1){
						btnToLeft=parseInt(this.buttons[0].button.style.left.replace(/px/,''))+trCtr*180;
					}else{
						btnToLeft=parseInt(this.szkic.style.left.replace(/px/,''))+(180-40)/2+trCtr*180;
					}					
					this.buttons[this.buttons.length-1].button.style.left=btnToLeft+"px";
					this.buttons[this.buttons.length-1].button.id='simulatorButton_s'+sk+'t'+tr;
					setOnClick(this.buttons[this.buttons.length-1].button,'schema.simulate(this); return false;');
					setClass(this.buttons[this.buttons.length-1].button, 'simButton off');	
					setTitle(this.buttons[this.buttons.length-1].button, 'kliknij aby podać napięcie na ten tor');
					this.przeslona.appendChild(this.buttons[this.buttons.length-1].button);			
				}
			}
		}
	}
	this.simulate=function(pressedButton){
		var buttonIndex=false;
		for(var bt=0; bt<this.buttons.length; bt++){
			if(pressedButton==this.buttons[bt].button){
				buttonIndex=bt;
				break;
			}
		}
		switch(this.buttons[buttonIndex].currentState){
			case 0://off2on
			this.buttons[buttonIndex].currentState=1;
			setClass(this.buttons[buttonIndex].button, 'simButton on');
			setTitle(this.buttons[buttonIndex].button, 'kliknij aby zasymulować zanik napięcia na tym torze');
			break;
			
			case 1://on2off
			this.buttons[buttonIndex].currentState=0;
			setClass(this.buttons[buttonIndex].button, 'simButton off');
			setTitle(this.buttons[buttonIndex].button, 'kliknij aby podać napięcie na ten tor');
			break;
		}
		var aState='NULL';
		for(var cs=0; cs<this.bottom_menu.selectedAlgorytm.cases.length; cs++){
			var uOK=true;
			for(var u=1;u<this.bottom_menu.selectedAlgorytm.cases[cs].u.length; u++){
				if(u<=this.buttons.length&&this.bottom_menu.selectedAlgorytm.cases[cs].u[u]!=this.buttons[u-1].currentState){
					uOK=false;
					break;
				}else if(u>this.buttons.length) uOK=false;
			}
			if (uOK) {
				aState = cs;
				break;
			}
		}
		if(IsNumeric(aState)&&aState>=0){
			for(var w=1; w<this.bottom_menu.selectedAlgorytm.cases[aState].w.length; w++){
				if(this.bottom_menu.selectedAlgorytm.cases[aState].w[w]==this.switchState[w-1].state){
					if(w<this.bottom_menu.selectedAlgorytm.cases[aState].u.length){
						switch(this.switchState[w-1].state){
							case 0:
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_sekcja.png';
							break;
							
							case 1:
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_tor.png';
							break;
						}
					}else{
						switch(this.switchState[w-1].state){
							case 0:
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_tor.png';
							break;
							
							case 1:
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_sekcja.png';
							break;
						}
					}
				}else{
					if(w<this.bottom_menu.selectedAlgorytm.cases[aState].u.length){
						switch(this.switchState[w-1].state){
							case 0:
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_sekcja.png';						
							setTimeout("{schema.switchState["+w+"-1].switchRef.getElementsByTagName('img')[0].src='lib/images/h2v.gif'; schema.simSetVertical("+w+");}",300);
							this.switchState[w-1].state=1;
							break;
							
							case 1:
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_tor.png';
							setTimeout("{schema.switchState["+w+"-1].switchRef.getElementsByTagName('img')[0].src='lib/images/v2h.gif'; schema.simSetHorizontal("+w+");}",300);
							this.switchState[w-1].state=0;
							break;
						}
						//z opoznieniem, sprzegla torowe
					}else{
						//wykonac przelaczenie sprzegiel miedzy sekcjami
						switch(this.switchState[w-1].state){
							case 0:
							setTimeout("schema.switchState["+w+"-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_sekcja.png';",280);
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/v2h.gif';
							this.switchState[w-1].state=1;
							break;
							
							case 1:
							setTimeout("schema.switchState["+w+"-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_tor.png';",280);
							this.switchState[w-1].switchRef.getElementsByTagName('img')[0].src='lib/images/h2v.gif';
							this.switchState[w-1].state=0;
							break;
						}
					}
				}
			}
		}else{//dla 0,0,0,0,...
			var genPos=this.getGenPos();
			if (genPos) {
				setTimeout("schema.simulate(schema.buttons["+(genPos - 1)+"].button);",150);
			}
		}
	}
	this.getGenPos=function(){
		var ctr=0;
		for(var sk=0; sk<this.Sekcje.length; sk++){
			for(var tr=0; tr<this.Sekcje[sk].tory.length; tr++){
				if (!this.Sekcje[sk].tory[tr].isEmptyTransformator()) {
					ctr++;
					if (this.Sekcje[sk].tory[tr].isGenerator()) {
						return ctr;
					}
				}
			}
		}
		return false;
	}
	this.simSetHorizontal=function(w){
		setTimeout("schema.switchState["+w+"-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_sekcja.png';",280);
	}
	this.simSetVertical=function(w){
		setTimeout("schema.switchState["+w+"-1].switchRef.getElementsByTagName('img')[0].src='lib/images/sprzeglo_tor.png';",280);
	}
	this.resetSimulator=function(){
		if (this.switchState.length) {
			for (var i = 0; i < this.switchState.length; i++) {
				if (i < this.getFilledTorNo()) {
					this.switchState[i].switchRef.getElementsByTagName('img')[0].src = 'lib/images/sprzeglo_tor.png';
				}
				else {
					this.switchState[i].switchRef.getElementsByTagName('img')[0].src = 'lib/images/sprzeglo_sekcja.png';
				}
			}
		}
		this.przeslona.innerHTML="";
		for(var i=0; i<this.buttons.length; ){
			this.buttons.pop();
		}
		for(var i=0; i<this.switchState.length; ){
			this.switchState.pop();
		}
	}
    this.addToWorkspace = function(){
        this.conteiner.appendChild(this.szkic);
        this.szkic.style.top = ((this.conteiner.clientHeight - this.szkic.clientHeight) / 2) + "px";
        this.szkic.style.left = ((this.conteiner.clientWidth - this.szkic.clientWidth) / 2) + "px";
    }
    this.center = function(){
        this.szkic.style.left = "0px";
        var totalWidth = 0;
        for (var i = 0; i < this.szkic.childNodes.length; i++) {
            for (var j = 0; j < this.szkic.childNodes.item(i).childNodes.length; j++) {
                totalWidth += Element.getDimensions(this.szkic.childNodes.item(i).childNodes.item(j)).width;
            }
        }
        if (this.conteiner.clientWidth <= totalWidth) {
            this.szkic.style.width = totalWidth + 'px';
        }
        else {
            this.szkic.style.width = '';
        }
        this.szkic.style.top = ((this.conteiner.clientHeight - this.szkic.clientHeight) / 2) + "px";
        this.szkic.style.left = ((this.conteiner.clientWidth - this.szkic.clientWidth) / 2) + "px";
    }
    this.highlightTransformators = function(){
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                if (this.Sekcje[sk].tory[tr].isEmptyTransformator()) {
                    this.Sekcje[sk].tory[tr].highlightTransformator();
                }
            }
        }
    }
    this.dimTransformators = function(){
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                this.Sekcje[sk].tory[tr].dimTransformator();
            }
        }
    }
    this.highlightSprzegla = function(sprzegloId){
        /* HOWTO
         * 1-sprzeglo transformatora
         * 2-sprzeglo sekcji lewe
         * 4-sprzeglo sekcji prawe
         * sumy dowolnych powyzszych dla kombinacji kilku, np.6 dla obu sekcyjnych
         */
		switch(sprzegloId){
			case 6:
			for (var sk = 0; sk < this.Sekcje.length; sk++) {
	            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
	                if(this.Sekcje[sk].tory[tr].isEmptySprzeglo(2)) this.Sekcje[sk].tory[tr].highlightSprzeglo(2);
					if(!this.Sekcje[sk].tory[tr].isEmptySprzeglo(2)){
						if(tr-1>=0) this.Sekcje[sk].tory[tr-1].highlightSprzeglo(4);
						else if(sk-1>=0&&this.Sekcje[sk-1].tory.length) this.Sekcje[sk-1].tory[this.Sekcje[sk-1].tory.length-1].highlightSprzeglo(4);
					}else if(!(sk==0&&tr==0))setClass(this.Sekcje[sk].tory[tr].getSprzegla(2)[0],this.Sekcje[sk].tory[tr].getSprzegla(2)[0].className+' centerL');
					if(sk==this.Sekcje.length-1&&tr==this.Sekcje[sk].tory.length-1) this.Sekcje[sk].tory[tr].highlightSprzeglo(4);
	            }
	        }
			break;
			
			default:
			for (var sk = 0; sk < this.Sekcje.length; sk++) {
	            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
	                var sprzeglaToHighlight = this.Sekcje[sk].tory[tr].getEmptySprzegla(sprzegloId);
	                var sprz2high = 0;
	                for (var sp = 0; sp < sprzeglaToHighlight.length; sp++) {
	                    sprz2high += sprzeglaToHighlight[sp];
	                }
	                this.Sekcje[sk].tory[tr].highlightSprzeglo(sprz2high);
	            }
	        }
			break;
		}
    }
    this.dimSprzegla = function(sprzegloId){
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                this.Sekcje[sk].tory[tr].dimSprzeglo(sprzegloId);
            }
        }
    }
    this.addTransformatorsIds = function(){
        var ctr = 1;
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                this.Sekcje[sk].tory[tr].transformator.id = "t_" + ctr;
                this.Sekcje[sk].tory[tr].s_transformatora.id = "st_" + ctr;
                ctr++;
            }
        }
        
    }
    this.setDroppableTransformators = function(){
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                if (this.Sekcje[sk].tory[tr].isEmptyTransformator()) {
                    var elem_id = this.Sekcje[sk].tory[tr].transformator.id;
                    Droppables.add(elem_id, {
                        accept: ['toolbox_transformator', 'toolbox_generator'],
                        onDrop: function(element, elem_id){
                            if (element.parentNode.parentNode.id != 'toolbox') {
                                element.parentNode.parentNode.childNodes.item(1).childNodes.item(0).style.display = "none";
                                element.parentNode.parentNode.childNodes.item(1).childNodes.item(0).childNodes.item(0).src = 'lib/images/sprzeglo_sekcja.png';
                                setClass(element.parentNode.parentNode.childNodes.item(1).childNodes.item(0), 'toolbox_sprzeglo');
                                document.getElementById('toolbox_sprzegla').appendChild(element.parentNode.parentNode.childNodes.item(1).childNodes.item(0));
                            }
                            document.getElementById(elem_id.id).appendChild(element);
                            
                            var sprzeglaInToolbox = getElementsByClassName(document.getElementById('toolbox_sprzegla'), 'toolbox_sprzeglo');
                            var sprzeglo = 0;
                            for (var i = 0; i < sprzeglaInToolbox.length; i++) {
                                if (sprzeglaInToolbox[i].style.display == 'none') {
                                    sprzeglo = sprzeglaInToolbox[i];
                                    break;
                                }
                            }
                            if (!sprzeglo) {
                                sprzeglo = sprzeglaInToolbox[0];
                            }
                            sprzeglo.style.display = 'block';
                            document.getElementById('s' + elem_id.id).appendChild(sprzeglo);
                            sprzeglo.childNodes.item(0).src = 'lib/images/sprzeglo_tor.png';
                            setClass(sprzeglo, "tor_sprzeglo");
                        }
                    });
                }
                else {
                    Droppables.remove(this.Sekcje[sk].tory[tr].transformator);
                }
            }
        }
    }
    this.addSprzeglasIds = function(sprzegloId){
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                var sprzeglaInTor = this.Sekcje[sk].tory[tr].getSprzeglaId(sprzegloId);
                for (var sp = 0; sp < sprzeglaInTor.length; sp++) {
                    this.Sekcje[sk].tory[tr].getSprzegla(sprzeglaInTor[sp])[0].id = 's' + sk + 't' + tr + '_' + sp;
                }
            }
        }
        
    }
    this.setDroppableSprzegla = function(sprzegloId){
		switch(sprzegloId){
						
			default:
			for (var sk = 0; sk < this.Sekcje.length; sk++) {
	            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
	                var sprzeglaInTor = this.Sekcje[sk].tory[tr].getSprzeglaId(sprzegloId);
	                for (var sp = 0; sp < sprzeglaInTor.length; sp++) {
	                    if (this.Sekcje[sk].tory[tr].isEmptySprzeglo(sprzeglaInTor[sp])) {
	                        var elem_id = this.Sekcje[sk].tory[tr].getSprzegla(sprzeglaInTor[sp])[0].id;
	                        Droppables.add(elem_id, {
	                            accept: ['toolbox_sprzeglo'],
	                            onDrop: function(element, elem_id){
	                                if (element.parentNode.parentNode.id != 'toolbox') {
	                                
	                                }
	                                document.getElementById(elem_id.id).appendChild(element);
	                            }
	                        });
	                    }
	                    else {
	                        Droppables.remove(this.Sekcje[sk].tory[tr].getSprzegla(sprzeglaInTor[sp])[0]);
	                    }
	                }
	            }
	        }
			break;
		}
    }	
	this.centerSprzegla=function(){
		for(var sk=0; sk<this.Sekcje.length;sk++){
			for(var tr=0; tr<this.Sekcje[sk].tory.length;tr++){
				if(!this.Sekcje[sk].tory[tr].isEmptySprzeglo(4)){
					if(tr+1<this.Sekcje[sk].tory.length&&this.Sekcje[sk].tory[tr+1].isEmptySprzeglo(2)){
						this.Sekcje[sk].tory[tr+1].getSprzegla(2)[0].appendChild(this.Sekcje[sk].tory[tr].getSprzegla(4)[0].childNodes.item(0));
					}else{
						nsk=sk+1;
						for(;nsk<this.Sekcje.length; nsk++){
							if(this.Sekcje[nsk].tory.length>0&&this.Sekcje[nsk].tory[0].isEmptySprzeglo(2)){
								this.Sekcje[nsk].tory[0].getSprzegla(2)[0].appendChild(this.Sekcje[sk].tory[tr].getSprzegla(4)[0].childNodes.item(0));
								tr=this.Sekcje[sk].tory.length;
								sk=this.Sekcje.length-1;
								break;
							}
						}
					}
				}
			}
		}
		
		for(var sk=0; sk<this.Sekcje.length; sk++){
			for(var tr=0; tr<this.Sekcje[sk].tory.length; tr++){
				if(!this.Sekcje[sk].tory[tr].isEmptySprzeglo(2)&&((tr-1>=0&&this.Sekcje[sk].tory[tr-1].isEmptySprzeglo(4))||(sk-1>=0&&this.Sekcje[sk-1].tory.length>0&&this.Sekcje[sk-1].tory[this.Sekcje[sk-1].tory.length-1].isEmptySprzeglo(4)))){
					var nClassName=this.Sekcje[sk].tory[tr].getSprzegla(2)[0].className;
					nClassName=nClassName.split(' ')[0];
					nClassName+=' centerL';
					setClass(this.Sekcje[sk].tory[tr].getSprzegla(2)[0],nClassName);
				}
				if(!this.Sekcje[sk].tory[tr].isEmptySprzeglo(4)&&((tr+1<this.Sekcje[sk].tory.length&&this.Sekcje[sk].tory[tr+1].isEmptySprzeglo(2))||(sk+1<this.Sekcje.length&&this.Sekcje[sk+1].tory.length>0&&this.Sekcje[sk+1].tory[0].isEmptySprzeglo(2)))){
					var nClassName=this.Sekcje[sk].tory[tr].getSprzegla(4)[0].className;
					nClassName=nClassName.split(' ')[0];
					nClassName+=' centerR';
					setClass(this.Sekcje[sk].tory[tr].getSprzegla(4)[0],nClassName);
				}
			}
		}
	}
	this.decenterSprzegla = function(){
		for (var sk = 0; sk < this.Sekcje.length; sk++) {
			for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
				var sprzegla=this.Sekcje[sk].tory[tr].getSprzegla(6);
				for(var i=0; i<sprzegla.length;i++){
					var nClassName=sprzegla[i].className;
					nClassName=nClassName.replace(/ centerL/, '');
					nClassName=nClassName.replace(/ centerR/, '');
					setClass(sprzegla[i],nClassName);
				}
			}
		}
	}
    this.getTorsQuantity=function(szkicID){
		var ctr=0;
		for(var i=1, k=0;k<parseInt(szkicID.charAt(0));i++, k++){
			var ilTr=parseInt(szkicID.charAt(i));
			for(var j=0;j<ilTr;j++,i+=2){
				if(parseInt(szkicID.charAt(i+1))!=0){
					ctr++;
				}
			}
		}
		return ctr;
	}
    this.transformatorDrag = function(draggable){
		this.decenterSprzegla();
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            var first = false;
            var last = false;
            if (this.Sekcje[sk].tory.length <= 0) {//jezeli w sekcji nie ma torow
                last = true;
            }
            else {
                if (!this.Sekcje[sk].tory[0].isEmptyTransformator()) {//jezeli pierwszy tor w sekcji posiada transformator
                    if (this.Sekcje[sk].tory[0].isEmptySprzeglo(2)) {//oraz nie posiada lewego sprzegla
                        if (draggable.element.parentNode != this.Sekcje[sk].tory[0].transformator) {//oraz czy nie podnosze lewego skrajnego transformatora w sekcji, bo dodanie toru byloby bezsensowne w takim wypadku
                            first = true;
                        }
                    }
                }
                if (!this.Sekcje[sk].tory[this.Sekcje[sk].tory.length - 1].isEmptyTransformator()) {//jezeli ostatni tor w sekcji posiada transformator
                    if (this.Sekcje[sk].tory[this.Sekcje[sk].tory.length - 1].isEmptySprzeglo(4)) {//oraz nie posiada prawego sprzegla
                        if (draggable.element.parentNode != this.Sekcje[sk].tory[this.Sekcje[sk].tory.length - 1].transformator) {//oraz czy nie podnosze prawego skrajnego transformatora w sekcji, bo dodanie toru byloby bezsensowne w takim wypadku
                            last = true;
                        }
                    }
                }
            }
            this.Sekcje[sk].onTransformatorDrag(first, last);
            this.addTransformatorsIds();
            this.center();
            this.setDroppableTransformators();
            this.addSprzeglasIds(6);
            this.setDroppableSprzegla(6);
            
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                if (this.Sekcje[sk].tory[tr].isEmptyTransformator()) {
                    setClass(this.Sekcje[sk].tory[tr].tor, 'tor');
                }
            }
        }
    }
    this.clear = function(){
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {//odpowiada tylko za przesuniecie sprzegiel miedzy torami jezeli wywale transformator
                if (this.Sekcje[sk].tory[tr].isEmptyTransformator() && ((this.Sekcje[sk].tory[tr].isEmptySprzeglo(2) && !this.Sekcje[sk].tory[tr].isEmptySprzeglo(4)) || (!this.Sekcje[sk].tory[tr].isEmptySprzeglo(2) && this.Sekcje[sk].tory[tr].isEmptySprzeglo(4)))) {
                    if (tr > 0) {
                        if (this.Sekcje[sk].tory[tr - 1].isEmptySprzeglo(4)) {
                            if (!this.Sekcje[sk].tory[tr].isEmptySprzeglo(2)) {
                                this.Sekcje[sk].tory[tr - 1].getSprzegla(4)[0].appendChild(this.Sekcje[sk].tory[tr].getSprzegla(2)[0].childNodes.item(0));
                            }
                            else 
                                if (!this.Sekcje[sk].tory[tr].isEmptySprzeglo(4)) {
                                    this.Sekcje[sk].tory[tr - 1].getSprzegla(4)[0].appendChild(this.Sekcje[sk].tory[tr].getSprzegla(4)[0].childNodes.item(0));
                                }
                        }
                    }
					else 
						if(tr == 0 && sk > 0 && this.Sekcje[sk - 1].tory.length > 0 && this.Sekcje[sk - 1].tory[this.Sekcje[sk - 1].tory.length-1].isEmpty() || tr == 0 && sk > 0 && this.Sekcje[sk - 1].tory.length == 0){
							if (!this.Sekcje[sk].tory[0].isEmptySprzeglo(2)) {
                                if (tr+1<this.Sekcje[sk].tory.length && this.Sekcje[sk].tory[tr+1].isEmptySprzeglo(2)) {
                                    this.Sekcje[sk].tory[tr+1].getSprzegla(2)[0].appendChild(this.Sekcje[sk].tory[tr].getSprzegla(2)[0].childNodes.item(0));
                                }
                            }
					}
                    else 
                        if (sk > 0 && this.Sekcje[sk - 1].tory.length > 0) {
                            if (this.Sekcje[sk - 1].tory[this.Sekcje[sk - 1].tory.length - 1].isEmptySprzeglo(4)) {
                                if (!this.Sekcje[sk].tory[tr].isEmptySprzeglo(2)) {
                                    this.Sekcje[sk - 1].tory[this.Sekcje[sk - 1].tory.length - 1].getSprzegla(4)[0].appendChild(this.Sekcje[sk].tory[tr].getSprzegla(2)[0].childNodes.item(0));
                                }
                                else 
                                    if (!this.Sekcje[sk].tory[tr].isEmptySprzeglo(4)) {
                                        this.Sekcje[sk - 1].tory[this.Sekcje[sk - 1].tory.length - 1].getSprzegla(4)[0].appendChild(this.Sekcje[sk].tory[tr].getSprzegla(4)[0].childNodes.item(0));
                                    }
                            }
                        }
                }
            }
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                if (this.Sekcje[sk].tory[tr].isEmpty()) {
                    this.Sekcje[sk].sekcja.removeChild(this.Sekcje[sk].tory[tr].tor);
                    this.Sekcje[sk].tory.splice(tr, 1);
                    tr--;
                }
            }
        }		
        this.getName();        
    }
    this.setTorBg = function(){
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                if (!this.Sekcje[sk].tory[tr].isEmptyTransformator()) {
                    if (this.Sekcje[sk].tory[tr].isGenerator()) {
                        setClass(this.Sekcje[sk].tory[tr].tor, 'tor_gen');
                    }
                    else {
                        setClass(this.Sekcje[sk].tory[tr].tor, 'tor');
                    }
                }
                else {//jezeli nie ma wstawionego transformatora ani generatora
                    setClass(this.Sekcje[sk].tory[tr].tor, 'tor_empty');
                }
            }
        }
    }
    this.getFilledTorNo = function(){
        var ctr = 0;
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                if (!this.Sekcje[sk].tory[tr].isEmptyTransformator()) {
                    ctr++;
                }
            }
        }
        return ctr;
    }
    this.getID = function(){
        var r_id = "";
        r_id += this.Sekcje.length;
        for (var sk = 0; sk < this.Sekcje.length; sk++) {
            r_id += this.Sekcje[sk].tory.length;
            for (var tr = 0; tr < this.Sekcje[sk].tory.length; tr++) {
                var sprzeglo = 0;
                if (this.Sekcje[sk].tory[tr].isEmptyTransformator()) {
                    r_id += "0";
                }
                else 
                    if (this.Sekcje[sk].tory[tr].isGenerator()) {
                        r_id += "2";
                        sprzeglo = 1;
                    }
                    else {
                        r_id += "1";
                        sprzeglo = 1;
                    }
                if (!this.Sekcje[sk].tory[tr].isEmptySprzeglo(2)) {
                    sprzeglo += 2;
                }
                if (!this.Sekcje[sk].tory[tr].isEmptySprzeglo(4)) {
                    sprzeglo += 4;
                }
                r_id += sprzeglo;
            }
        }
		$('link_field').value=window.location.href.split('?')[0]+'?g='+r_id;
		$('link_field').select();
		$('c_redirect').value=window.location.href.split('?')[0]+'?g='+r_id;
        return r_id;
    }
    this.getName = function(){
        var r_id = this.getID();
        var il_sekcji = r_id.charAt(0);
        var il_torow = new Array;
        var il_gen = 0;
        var il_trans = 0;
        var il_sprz = 0;
        var sekcja = 0;
        for (var i = 1; i < r_id.length; i++) {
            il_torow[sekcja] = r_id.charAt(i);
            for (var j = 0; j < il_torow[sekcja]; j++, i += 2) {
                if (r_id.charAt(i + 1) == 2) 
                    il_gen++;
                if (r_id.charAt(i + 1) == 1) 
                    il_trans++;
                if (r_id.charAt(i + 2) == 1 || r_id.charAt(i + 2) == 2 || r_id.charAt(i + 2) == 4) {
                    il_sprz++;
                }
                else 
                    if (r_id.charAt(i + 2) == 3 || r_id.charAt(i + 2) == 5 || r_id.charAt(i + 2) == 6) {
                        il_sprz += 2;
                    }
                    else 
                        if (r_id.charAt(i + 2) == 7) {
                            il_sprz += 3;
                        }
            }
        }
        var res = il_sprz + '' + il_sekcji + '' + il_trans + '' + il_gen;
        $('rzr_name').innerHTML = 'RZR-Mikro [' + res + 'x]';
		$('c_title').value = 'Zapytanie o automat RZR-Mikro [' + res + 'x]';
		switch (this.stage){
			case 1:
			if(il_trans+il_gen>1){
				if(this.nextButton.style.display=='none') new Effect.BlindDown(this.nextButton, {duration:0.5});
			}else{
				if(this.nextButton.style.display!='none') new Effect.BlindUp(this.nextButton, {duration:0.5});
			}
			setClass($('rzr_name'), '');
			break;
		}
		return res;
    }
	this.getFullName=function(aID){
		var fullName=this.getName();
		var sPart=this.bottom_menu.getAZAEID(aID);
		fullName+=''+sPart;
		$('rzr_name').innerHTML = 'RZR-Mikro [' + fullName + ']';
		$('c_title').value = 'Zapytanie o automat RZR-Mikro [' + fullName + ']';
		setClass($('rzr_name'), 'focus');
		new Effect.Pulsate('rzr_name');
		this.toolbox.setSMenu(this.bottom_menu.getAParams(aID));
		$('c_redirect').value+='&a='+aID;
		return fullName;
	}
    this.reset = function(){
        for (var i = 1; i < this.toolbox.tory.length; i++) {
            this.toolbox.toolbox_tory.appendChild(this.toolbox.tory[i]);
        }
        for (var i = 1; i < this.toolbox.generatory.length; i++) {
            this.toolbox.toolbox_generatory.appendChild(this.toolbox.generatory[i]);
        }
        for (var i = 1; i < this.toolbox.sprzegla.length; i++) {
            this.toolbox.toolbox_sprzegla.appendChild(this.toolbox.sprzegla[i]);
        }
        for (var i = 1; i < this.Sekcje.length; i++) {
            this.Sekcje[i].sekcja.parentNode.removeChild(this.Sekcje[i].sekcja);
        }
        for (var i = 0; i < this.Sekcje[0].tory.length; i++) {
            this.Sekcje[0].tory[i].tor.parentNode.removeChild(this.Sekcje[0].tory[i].tor);
        }
        this.Sekcje.splice(1, this.Sekcje.length - 1);
        this.Sekcje[0].tory.splice(0, this.Sekcje[0].tory.length);
    }
    this.draw = function(szkicID){
        var il_sekcji = szkicID.charAt(0);
        var newSzkic = new Array(parseInt(il_sekcji));
        for (var i = 0; i < newSzkic.length; i++) {
            newSzkic[i] = new Array();
        }
        var i = 1;
        for (var sk = 0; sk < il_sekcji; sk++) {
            var il_torow = szkicID.charAt(i);
            i++;
            for (tr = 0; tr < il_torow; tr++) {
                newSzkic[sk][tr] = {
                    typZasilania: szkicID.charAt(i),
                    sprzegla: szkicID.charAt(i + 1)
                }
                i += 2;
            }
        }
        var reg = /[0-9]{2,}/;
        if (!(reg.test(szkicID) && i == szkicID.length)) {
            //błędny adres
        }
        else {
            for (var sk = 0; sk < newSzkic.length; sk++) {
                if (!this.Sekcje[sk]) {
                    this.Sekcje.push(new Sekcja);
                    this.Sekcje[sk].appendInto(this.szkic);
                }
                for (var tr = 0; tr < newSzkic[sk].length; tr++) {
                    this.Sekcje[sk].tory.push(new Tor);
                    this.Sekcje[sk].tory[tr].appendInto(this.Sekcje[sk].sekcja);
                    switch (parseInt(newSzkic[sk][tr].typZasilania)) {
                        case 1:
                            this.Sekcje[sk].tory[tr].transformator.appendChild(this.toolbox.toolbox_tory.childNodes.item(0));
                            this.Sekcje[sk].tory[tr].transformator.childNodes.item(0).style.display = 'block';
                            break;
                            
                        case 2:
                            this.Sekcje[sk].tory[tr].transformator.appendChild(this.toolbox.toolbox_generatory.childNodes.item(0));
                            this.Sekcje[sk].tory[tr].transformator.childNodes.item(0).style.display = 'block';
                            break;
                    }
                    var sprzegla = this.Sekcje[sk].tory[tr].getSprzegla(parseInt(newSzkic[sk][tr].sprzegla));
                    for (var sp = 0; sp < sprzegla.length; sp++) {
                        sprzegla[sp].appendChild(this.toolbox.toolbox_sprzegla.childNodes.item(0));
                        sprzegla[sp].childNodes.item(0).style.display = 'block';
                        if (sprzegla[sp] == this.Sekcje[sk].tory[tr].getSprzegla(1)[0]) {
                            sprzegla[sp].childNodes.item(0).childNodes.item(0).src = 'lib/images/sprzeglo_tor.png';
                            setClass(sprzegla[sp].childNodes.item(0), "tor_sprzeglo");
                        }
                    }
                }
                
            }
            this.clear();
            this.center();
            this.addTransformatorsIds();
            this.setDroppableTransformators();
            this.addSprzeglasIds(6);
            this.setDroppableSprzegla(6);
            this.toolbox.modifyMaxTor();
            this.toolbox.modifyMaxSekcja();
			this.setTorBg();
			this.centerSprzegla();
			this.bottom_menu.sortSzkice(false);
        }
    }
	
	this.nextStep=function(){
		this.stage=this.bottom_menu.switchMenu(this.getID());
		this.toolbox.switchMenu(this.stage);
		switch(this.stage){
			case 1:
			this.przeslona.style.display="none";
			this.getName();			
			this.bottom_menu.resetAlgorytm();
			this.toolbox.resetSMenu();
			this.removeLabels();
			if($('algorytm_window').style.display!='none') new Effect.Shrink('algorytm_window', {duration: 0.5});
			new Effect.BlindUp(this.prevButton, {duration:0.5});
			this.helpSt2=0;
			break;
			
			case 2:
			this.przeslona.style.display="block";
			this.addLabels();
			new Effect.BlindUp(this.nextButton, {duration:0.5});
			new Effect.BlindDown(this.prevButton, {duration:0.5});
			if($('simple_alert_window').style.display=='none'&&this.helpSt2){
				new Effect.Grow('simple_alert_window', {duration:0.5});
			}
			break;
		}
	}
	this.sortAlgoritms=function(elemID){
		switch(elemID){
			case 'rJawna':
			case 'rUkryta':
			if($(elemID).className=='s2checkbox checked'){
				setClass($(elemID), 's2checkbox');
			}else{
				setClass($(elemID), 's2checkbox checked');
				switch(elemID){
					case 'rJawna':
					setClass($('rUkryta'), 's2checkbox');
					break;
					
					case 'rUkryta': 
					setClass($('rJawna'), 's2checkbox');
					break;
				}
			}
			break;
			
			case 'zrzut':
			if ($(elemID).className == 's2checkbox checked') {
				setClass($(elemID), 's2checkbox');
			}
			else {
				setClass($(elemID), 's2checkbox checked');
			}
			break;
		} 
		var elements={
			rJawna:0,
			rUkryta: 0,
			zrzut:0
		}
		if($('rJawna').className=='s2checkbox checked')elements.rJawna=1;
		if($('rUkryta').className=='s2checkbox checked')elements.rUkryta=1;
		if($('zrzut').className=='s2checkbox checked')elements.zrzut=1;
		this.bottom_menu.sortAlgoritms(elements);
	}
	this.addLabels=function(){
		var u=1;
		var w=1;
		for(var i=0; i<this.Sekcje.length; i++){
			for(var j=0; j<this.Sekcje[i].tory.length; j++){
				if(!this.Sekcje[i].tory[j].isEmptyTransformator()){
					var newElem=document.createElement('div');
					setClass(newElem,'label');
					newElem.id='label_u'+u;
					newElem.innerHTML="<p>U"+u+"</p>";
					this.Sekcje[i].tory[j].transformator.appendChild(newElem);
					newElem=document.createElement('div');
					setClass(newElem,'label');
					newElem.id='label_w'+w;
					newElem.innerHTML="<p>W"+w+"</p>";
					this.Sekcje[i].tory[j].s_transformatora.appendChild(newElem);
					this.switchState.push({
						switchRef: this.Sekcje[i].tory[j].s_transformatora,
						state: 1
					});
					u++;
					w++;
				}
			}
		}
		for(var i=0; i<this.Sekcje.length; i++){
			for(var j=0; j<this.Sekcje[i].tory.length; j++){
				if(!this.Sekcje[i].tory[j].isEmptySprzeglo(2)){
					var newElem=document.createElement('div');
					setClass(newElem,'label');
					newElem.id='label_w'+w;
					newElem.innerHTML="<p>W"+w+"</p>";
					this.Sekcje[i].tory[j].s_lewe.appendChild(newElem);
					this.switchState.push({
						switchRef: this.Sekcje[i].tory[j].s_lewe,
						state: 1
					});
					w++;
				}
				if(!this.Sekcje[i].tory[j].isEmptySprzeglo(4)){
					var newElem=document.createElement('div');
					setClass(newElem,'label');
					newElem.id='label_w'+w;
					newElem.innerHTML="<p>W"+w+"</p>";
					this.Sekcje[i].tory[j].s_prawe.appendChild(newElem);
					this.switchState.push({
						switchRef: this.Sekcje[i].tory[j].s_prawe,
						state: 1
					});
					w++;
				}
			}
		}
	}
	this.removeLabels=function(){
		for(var i=0; i<this.Sekcje.length; i++){
			for(var j=0; j<this.Sekcje[i].tory.length; j++){
				var myElem=getElementsByClassName(this.Sekcje[i].tory[j].transformator,'label');
				for(var k=0;k<myElem.length;k++){
					this.Sekcje[i].tory[j].transformator.removeChild(myElem[k]);
				}
				var myElem=getElementsByClassName(this.Sekcje[i].tory[j].s_transformatora,'label');
				for(var k=0;k<myElem.length;k++){
					this.Sekcje[i].tory[j].s_transformatora.removeChild(myElem[k]);
				}
			}
		}
		for(var i=0; i<this.Sekcje.length; i++){
			for(var j=0; j<this.Sekcje[i].tory.length; j++){
				var myElem=getElementsByClassName(this.Sekcje[i].tory[j].s_lewe,'label');
				for(var k=0;k<myElem.length;k++){
					this.Sekcje[i].tory[j].s_lewe.removeChild(myElem[k]);
				}
				var myElem=getElementsByClassName(this.Sekcje[i].tory[j].s_prawe,'label');
				for(var k=0;k<myElem.length;k++){
					this.Sekcje[i].tory[j].s_prawe.removeChild(myElem[k]);
				}
			}
		}
	}
    
    this.addToWorkspace();
    this.addTransformatorsIds();
    this.setDroppableTransformators();
    this.addSprzeglasIds(6);
    this.setDroppableSprzegla(6);
    this.toolbox = new toolbox(this);
	this.bottom_menu=new gotowce(this);
}

function toolbox(szkic){
    this.toolbox = document.getElementById('toolbox');
    this.toolbox_sprzegla = document.createElement("div");
    this.toolbox_tory = document.createElement("div");
    this.toolbox_generatory = document.createElement("div");
    this.toolbox_sprzegla_label = document.createElement("p");
    this.toolbox_tory_label = document.createElement("p");
    this.toolbox_generatory_label = document.createElement("p");
    this.toolbox_sprzegla_label_cont = document.createElement("div");
    this.toolbox_tory_label_cont = document.createElement("div");
    this.toolbox_generatory_label_cont = document.createElement("div");
    setClass(this.toolbox_tory_label_cont, "toolbox_label");
    setClass(this.toolbox_generatory_label_cont, "toolbox_label");
    setClass(this.toolbox_sprzegla_label_cont, "toolbox_label");
    this.toolbox_sprzegla.id = 'toolbox_sprzegla';
    this.toolbox_tory.id = 'toolbox_tory';
    this.toolbox_generatory.id = 'toolbox_generatory';
    this.toolbox.appendChild(this.toolbox_tory_label_cont);
    this.toolbox_tory_label_cont.appendChild(this.toolbox_tory_label);
    this.toolbox.appendChild(this.toolbox_tory);
    this.toolbox.appendChild(this.toolbox_generatory_label_cont);
    this.toolbox_generatory_label_cont.appendChild(this.toolbox_generatory_label);
    this.toolbox.appendChild(this.toolbox_generatory);
    this.toolbox.appendChild(this.toolbox_sprzegla_label_cont);
    this.toolbox_sprzegla_label_cont.appendChild(this.toolbox_sprzegla_label);
    this.toolbox.appendChild(this.toolbox_sprzegla);
    this.toolbox_tory_label.innerHTML = "transformatory";
    this.toolbox_generatory_label.innerHTML = "generatory";
    this.toolbox_sprzegla_label.innerHTML = "wyłączniki";
    this.s_tory = new Array;
    this.s_generatory = new Array;
    this.s_sprzegla = new Array;
    this.tory = new Array;
    this.generatory = new Array;
    this.sprzegla = new Array;
	this.stage2toolbox=document.createElement('div');
	this.stage2toolbox.id='stage2toolbox';
	this.stage2toolbox.style.display='none';
	this.stage2conteiner=document.createElement('div');
	setClass(this.stage2conteiner, 'mMenu');
	this.stage2toolbox.appendChild(this.stage2conteiner);
	this.rUkryta=document.createElement('div');
	this.rUkryta.id='rUkryta';
	setClass(this.rUkryta,'s2checkbox');
	var row=document.createElement('div');
	setOnClick(row,"schema.sortAlgoritms('rUkryta')");
	row.appendChild(this.rUkryta);
	setClass(row,'mItem');
	var lbl=document.createElement('div');
	lbl.innerHTML="<p>rezerwa ukryta</p>";
	setClass(lbl,'label');
	row.appendChild(lbl);
	this.stage2conteiner.appendChild(row);	
	this.rJawna=document.createElement('div');
	this.rJawna.id='rJawna';
	setClass(this.rJawna,'s2checkbox');
	var row=document.createElement('div');
	setOnClick(row,"schema.sortAlgoritms('rJawna')");
	row.appendChild(this.rJawna);
	setClass(row,'mItem');
	var lbl=document.createElement('div');
	lbl.innerHTML="<p>rezerwa jawna</p>";
	setClass(lbl,'label');
	row.appendChild(lbl);
	this.stage2conteiner.appendChild(row);		
	this.zrzut=document.createElement('div');
	this.zrzut.id='zrzut';
	setClass(this.zrzut,'s2checkbox');
	var row=document.createElement('div');
	setOnClick(row,"schema.sortAlgoritms('zrzut')");
	row.appendChild(this.zrzut);
	setClass(row,'mItem');
	var lbl=document.createElement('div');
	lbl.innerHTML="<p>zrzut mocy</p>";
	setClass(lbl,'label');
	row.appendChild(lbl);
	this.stage2conteiner.appendChild(row);
	//alert(window.location.href.split('?')[0]);
	var windowLoc=window.location.href.split('?')[0];
	setOnClick($('cClearButton'),'redirect("'+windowLoc+'?help=0")');
	
	this.toolbox.appendChild(this.stage2toolbox);
	this.main_menu=document.createElement("div");
	this.main_menu.id="main_menu";
	var menu_head=document.createElement("div");
	menu_head.id="menu_head";
	setOnClick(menu_head, "showHide('menu_body');upDown('menu_head','menu_body');return false;");
	setTitle(menu_head,"kliknij aby rozwinąć menu");
	this.main_menu.appendChild(menu_head);
	this.menu_body=document.createElement("div");
	this.menu_body.id="menu_body";
	this.main_menu.appendChild(this.menu_body);
	this.menu_body.style.display="none";
	
	this.menu_ask=document.createElement("a");
	this.menu_ask.innerHTML="zapytaj";
	setTitle(this.menu_ask, "Masz watpliwości? Napisz do nas!");
	this.menu_body.appendChild(this.menu_ask);
	this.menu_link=document.createElement("a");
	this.menu_link.innerHTML="link";
	setTitle(this.menu_link, "Generuje bezpośredni link do stworzonego przez ciebie schematu.");
	this.link_window=$('link_window');
	new Draggable('algorytm_window',{scroll:window,handle:'algorytm_window_header'});
	setOnClick($('algorytm_window'), "resetZPosition(this,['help_window','contact_window','link_window','simple_alert_window'])");
	setOnClick($('algorytm_window_close_btn'), "Effect.Shrink('algorytm_window', {duration:0.5})");
	new Draggable('link_window',{scroll:window,handle:'link_window_header'});
	var linkToLeft=(document.documentElement.clientWidth-Element.getDimensions(this.link_window).width)/2;
	setOnClick(this.menu_link, "{$('link_window').style.left='"+linkToLeft+"px'; $('link_window').style.top='150px'; Effect.Grow('link_window', {duration:0.5}); $('link_field').select(); resetZPosition($('link_window'),['help_window','contact_window','algorytm_window','simple_alert_window']); hideElem('menu_body'); return false;}");
	setOnClick($('link_window_close_btn'), "Effect.Shrink('link_window', {duration:0.5})");
	setOnClick($('link_field'), "this.select()");
	setOnClick(this.link_window, "resetZPosition(this,['help_window','contact_window','algorytm_window','simple_alert_window'])");
	this.menu_body.appendChild(this.menu_link);
	this.menu_help=document.createElement("a");
	this.menu_help.innerHTML="pomoc";
	setTitle(this.menu_help, "Nie wiesz jak korzystać z konfiguratora? Kliknij tutaj!");
	this.menu_body.appendChild(this.menu_help);
	
	this.simple_alert_window=$('simple_alert_window');
	this.stage1help={
		content:'<p>-Aby stworzyć schemat automatu przenoś elementy z przybornika (nr. 1) nad wyróżnione pola na przestrzeni roboczej (takie jak nr. 2). Aby przenieść kliknij na elemencie i nie puszczając klawisza myszki przesuń kursor nad wyróżniony element (nr. 2) po czym puść przycisk myszki (ewentualnie kliknij). W trakcie jak będziesz tworzył schemat w lewym górnym rogu (nr. 4) podawany będzie nasz numer katalogowy automatu o schemacie który stworzyłeś.<br><br>-Zamiast tworzyć schemat pow. metodą możesz także wybrać gotowy z listy (nr. 3) <br><br><img src="lib/images/help/help_1_1.jpg" alt="help1_1"><br><br>-Jeżeli chcesz do nas napisać, skopiować bezpośredni link do stworzonego przez ciebie schematu lub otworzyć raz jeszcze tą pomoc kliknij na przycisk menu pod przybornikiem (nr. 1)</p>',
		top:100+'px',
		height:	602+'px'
		}	
	this.stage2help={
		content:'<p>Wybór algorytmu<br>-Wyboru algorytmu dokonuje się poprzez kliknięcie na tabeli na liście tabel stanów (nr. 2) reprezentujących dany algorytm.<br><br>-Możesz także wyspecyfikować wymagania w stosunku do algorytmu zaznaczając odpowiednie pola w przyborniku (nr. 1) co spowoduje wyszarzenie algorytmów nie spełniających wymagań na liście (nr. 2). Pamiętaj jednak że jest to tylko narzędzie pomocnicze i ostatecznego wyboru dokonujesz klikając na daną tabelę na liście algorytmów (nr. 2)<br><br><img src="lib/images/help/help_2_1.jpg" alt="help2_1"><br><br>Symulator<br>-Po dokonaniu wyboru algorytmu możesz sprawdzić jak taki automat w uproszczeniu będzie działał. Możesz podawać lub wyłączać napięcie na poszczególnych torach i obserwować przełączenia.</p>',
		top:90+'px',
		height:	640+'px'
		}	
	$('simple_alert_content').innerHTML=this.stage1help.content;
	var contactToLeft=(document.documentElement.clientWidth-Element.getDimensions(this.simple_alert_window).width)/2;
	this.simple_alert_window.style.left=contactToLeft+'px';
	this.simple_alert_window.style.top=this.stage1help.top;
	this.simple_alert_window.style.height=this.stage1help.height;
	setOnClick($('simple_alert_window_close_btn'), "Effect.Shrink('simple_alert_window', {duration:0.5})");
	new Draggable('simple_alert_window',{scroll:window,handle:'simple_alert_window_header'});
	setOnClick(this.simple_alert_window, "resetZPosition(this,['link_window','help_window','algorytm_window','contact_window'])");
	if(!(BrowserDetect.browser=='Explorer'&&parseInt(BrowserDetect.version)<=7)) $('cHelpButton').style.background='transparent url("lib/images/help_icon_2.png") top left no-repeat';
	var urlVariables=getURLVariables();
	for(var i=0; i<urlVariables.length; i++){
		if(urlVariables[i].name=='help'){
			urlVariables=urlVariables[i];
			break;
		}
	}
	setOnClick($('cHelpButton'),"{$('simple_alert_window').style.left='"+contactToLeft+"px'; $('simple_alert_window').style.top='100px'; new Effect.Grow('simple_alert_window',{duration:0.5}); resetZPosition($('simple_alert_window'),['link_window','contact_window','algorytm_window','help_window']); return false;}");
	setOnClick(this.menu_help, "{$('simple_alert_window').style.left='"+contactToLeft+"px'; $('simple_alert_window').style.top='100px'; new Effect.Grow('simple_alert_window',{duration:0.5}); resetZPosition($('simple_alert_window'),['link_window','contact_window','algorytm_window','help_window']); hideElem('menu_body'); return false;}");
	if(urlVariables instanceof Array){
		setTimeout(function(){
			if($('simple_alert_window').style.display!='none') new Effect.Fade('simple_alert_window',{duration:1.5});
			if($('cHelpButton').style.display!='block') new Effect.BlindDown('cHelpButton',{duration:0.5,scaleX:true});
		},20000);
	}else{
		if (urlVariables.value == 0) {
			$('simple_alert_window').style.display = 'none';
			$('cHelpButton').style.display = 'block';
		}
		else 
			setTimeout(function(){
				if ($('simple_alert_window').style.display != 'none') 
					new Effect.Fade('simple_alert_window', {
						duration: 1.5
					});
				if ($('cHelpButton').style.display != 'block') 
					new Effect.BlindDown('cHelpButton', {
						duration: 0.5,
						scaleX:true
					});
			}, 20000);
	}
	
	
	this.contact_window=$('contact_window');
	var contactToLeft=(document.documentElement.clientWidth-Element.getDimensions(this.contact_window).width)/2;
	setOnClick(this.menu_ask, "{$('contact_window').style.left='"+contactToLeft+"px'; $('contact_window').style.top='80px'; Effect.Grow('contact_window', {duration:0.5}); resetZPosition($('contact_window'),['link_window','help_window','algorytm_window','simple_alert_window']); hideElem('menu_body'); return false;}");
	setOnClick($('contact_window_close_btn'), "Effect.Shrink('contact_window', {duration:0.5})");
	new Draggable('contact_window',{scroll:window,handle:'contact_window_header'});
	setOnClick(this.contact_window, "resetZPosition(this,['link_window','help_window','algorytm_window','simple_alert_window'])");
	
	this.toolbox.appendChild(this.main_menu);
    
    this.modifyMaxTor = function(){
        var maxTorNo = 3;
        if (szkic.getFilledTorNo() >= maxTorNo || this.toolbox_sprzegla.childNodes.length <= 0) {
            for (var i = 0; i < this.toolbox_tory.childNodes.length; i++) {
                this.toolbox_tory.childNodes.item(i).style.display = "none";
            }
            for (var i = 0; i < this.toolbox_generatory.childNodes.length; i++) {
                this.toolbox_generatory.childNodes.item(i).style.display = "none";
            }
        }
        else {
            for (var i = 0; i < this.toolbox_tory.childNodes.length; i++) {
                this.toolbox_tory.childNodes.item(i).style.display = "block";
            }
            for (var i = 0; i < this.toolbox_generatory.childNodes.length; i++) {
                this.toolbox_generatory.childNodes.item(i).style.display = "block";
            }
        }
    }
    this.modifyMaxSekcja = function(){
        var maxSekcjaNo = 4;
        var leftSprzegiel = maxSekcjaNo - szkic.Sekcje.length;
        for (var i = 0; i < this.toolbox_sprzegla.childNodes.length; i++, leftSprzegiel--) {
            this.toolbox_sprzegla.childNodes.item(i).style.display = "none";
            if (leftSprzegiel > 0) {
                this.toolbox_sprzegla.childNodes.item(i).style.display = "block";
            }
        }
    }
    this.setDroppableToolbox = function(){
        Droppables.add('toolbox', {
            accept: ['toolbox_transformator', 'toolbox_generator', 'toolbox_sprzeglo', 'tor_sprzeglo'],
            onDrop: function(element){
                if (element.parentNode.parentNode.id != 'toolbox') {
                    switch (element.className) {
                        case 'toolbox_transformator':
                            var sp_tr = element.parentNode.parentNode.childNodes.item(1).childNodes.item(0);
                            setClass(sp_tr, 'toolbox_sprzeglo');
                            sp_tr.childNodes.item(0).src = 'lib/images/sprzeglo_sekcja.png';
                            $('toolbox_sprzegla').appendChild(sp_tr);
                            $('toolbox_tory').appendChild(element);
                            break;
                            
                        case 'toolbox_generator':
                            var sp_tr = element.parentNode.parentNode.childNodes.item(1).childNodes.item(0);
                            setClass(sp_tr, 'toolbox_sprzeglo');
                            sp_tr.childNodes.item(0).src = 'lib/images/sprzeglo_sekcja.png';
                            $('toolbox_sprzegla').appendChild(sp_tr);
                            $('toolbox_generatory').appendChild(element);
                            break;
                            
                            
                        case 'tor_sprzeglo':
                            var tr = element.parentNode.parentNode.childNodes.item(0).childNodes.item(0);
                            setClass(element, 'toolbox_sprzeglo');
                            element.childNodes.item(0).src = 'lib/images/sprzeglo_sekcja.png';
                            var typT = '';
                            if (tr.className == 'toolbox_transformator') {
                                typT = 'tory';
                            }
                            else 
                                if (tr.className == 'toolbox_generator') {
                                    typT = 'generatory';
                                }
                            $('toolbox_' + typT).appendChild(tr);
                            
                        case 'toolbox_sprzeglo':
                            $('toolbox_sprzegla').appendChild(element);
                            break;
                    }
                    szkic.toolbox.modifyMaxTor();
                    szkic.toolbox.modifyMaxSekcja();
                }
            }
        });
    }
	this.switchMenu=function(toStage){
		switch (toStage){
			case 1:
			new Effect.BlindUp(this.stage2toolbox, {duration:0.5});
			$('simple_alert_content').innerHTML=this.stage1help.content;
			$('simple_alert_window').style.height=this.stage1help.height;
			setOnClick($('cHelpButton'),"{$('simple_alert_window').style.left='"+contactToLeft+"px'; $('simple_alert_window').style.top='"+this.stage1help.top+"'; new Effect.Grow('simple_alert_window',{duration:0.5});}");
	
			break;
			
			case 2:
			new Effect.BlindDown(this.stage2toolbox, {duration:0.5});			
			$('simple_alert_content').innerHTML=this.stage2help.content;
			$('simple_alert_window').style.height=this.stage2help.height;
			setOnClick($('cHelpButton'),"{$('simple_alert_window').style.left='"+contactToLeft+"px'; $('simple_alert_window').style.top='"+this.stage2help.top+"'; new Effect.Grow('simple_alert_window',{duration:0.5});}");
	
			break;
		}
	}
	this.setSMenu=function(elements){
		if(elements.rJawna==1){
			setClass(this.rJawna,'s2checkbox checked');
		}else{
			setClass(this.rJawna,'s2checkbox');
		}
		if(elements.rUkryta==1){
			setClass(this.rUkryta,'s2checkbox checked');
		}else{
			setClass(this.rUkryta,'s2checkbox');
		}
		if(elements.zrzut==1){
			setClass(this.zrzut,'s2checkbox checked');
		}else{
			setClass(this.zrzut,'s2checkbox');
		}
		schema.bottom_menu.sortAlgoritms(elements);
	}
	this.resetSMenu=function(){
		setClass(this.rJawna,'s2checkbox');
		setClass(this.rUkryta,'s2checkbox');
		setClass(this.zrzut,'s2checkbox');
	}

    
    for (i = 1; i <= 3; i++) {//utworz tory
        this.toolbox_tory.appendChild(this.tory[i] = document.createElement("div"));
        this.tory[i].id = "tor_" + i;
        setClass(this.tory[i], "toolbox_transformator");
        setTitle(this.tory[i], "Transformator");
        this.tory[i].innerHTML = "<img src='lib/images/tor.png'>";
        
        this.s_tory[i] = new Draggable('tor_' + i, {
            snap: function(x, y, draggable){
                function constrain(n, lower, upper){
                    if (n > upper) 
                        return upper;
                    else 
                        if (n < lower) 
                            return lower;
                        else 
                            return n;
                }
                element_dimensions = Element.getDimensions(draggable.element);
                toolbox_dimensions = Element.getDimensions(document.getElementById('toolbox'));
                main_dimensions = Element.getDimensions(document.getElementById('konfigurator'));
                
                var element_nr = draggable.element.id.split("_");
                var i = element_nr[1];
                if (draggable.element.parentNode.parentNode.id != 'toolbox') {
                    var t_ctr = 0;
                    var t_f_ctr = 0;
                    var t_dim = 0
                    for (var sk = 0; sk < szkic.Sekcje.length; sk++) {
                        for (var tr = 0; tr < szkic.Sekcje[sk].tory.length; tr++) {
                            if (draggable.element.parentNode == szkic.Sekcje[sk].tory[tr].transformator) {
                                t_f_ctr = t_ctr;
                                t_dim = Element.getDimensions(draggable.element.parentNode.parentNode);
                                break;
                            }
                            else {
                                t_ctr++;
                            }
                        }
                    }
                    var leftOffset = (t_dim.width * t_f_ctr + parseInt(Element.getStyle(draggable.element.parentNode, 'left') || '0') + parseInt(szkic.szkic.style.left || '0')) * (-1);
                    var topOffset = (parseInt(szkic.szkic.style.top || '0') + parseInt(Element.getStyle(draggable.element.parentNode, 'top') || '0')) * (-1);
                }
                else {
                    var parentElement = draggable.element.parentNode;
                    var conteinerYOffset = 0;
                    for (var a = 0; a < parentElement.parentNode.childNodes.length; a++) {
                        if (parentElement == parentElement.parentNode.childNodes.item(a)) {
                            break;
                        }
                        else {
                            conteinerYOffset += Element.getDimensions(parentElement.parentNode.childNodes.item(a)).height;
                        }
                    }
                    var elementsPerRow = parseInt(Element.getDimensions(parentElement).width / element_dimensions.width);
                    var elementPosition = 0;
                    for (var a = 0; a < parentElement.childNodes.length; a++) {
                        if (parentElement.childNodes.item(a) == draggable.element) {
                            break;
                        }
                        else 
                            if (Element.getStyle(parentElement.childNodes.item(a), 'display') != "none") {
                                elementPosition++;
                            }
                    }
                    var elementYOffset = parseInt(elementPosition / elementsPerRow) * element_dimensions.height;
                    var elementXOffset = (elementPosition - (parseInt(elementPosition / elementsPerRow) * elementsPerRow)) * element_dimensions.width;
                    var leftOffset = (main_dimensions.width - toolbox_dimensions.width + elementXOffset) * (-1);
                    var topOffset = (conteinerYOffset + elementYOffset) * (-1);
                }
                return [constrain(x, leftOffset, main_dimensions.width + leftOffset - element_dimensions.width), constrain(y, topOffset, main_dimensions.height + topOffset - element_dimensions.height)];
            },
            revert: true,
            reverteffect: function(element, top_offset, left_offset){
                var dur = Math.sqrt(Math.abs(top_offset ^ 2) + Math.abs(left_offset ^ 2)) * 0.02;
                new Effect.Move(element, {
                    x: -left_offset,
                    y: -top_offset,
                    duration: dur,
                    transition: Effect.Transitions.spring,
                    queue: {
                        scope: '_draggable',
                        position: 'end'
                    }
                });
            },
            onStart: function(draggable){
                szkic.transformatorDrag(draggable);
                szkic.highlightTransformators();
            },
            onEnd: function(element){
                szkic.dimTransformators();
                szkic.setTorBg();
                szkic.clear();
                szkic.center();
                szkic.toolbox.modifyMaxTor();
                szkic.toolbox.modifyMaxSekcja();
				szkic.centerSprzegla();
				szkic.bottom_menu.sortSzkice(true);
            }
        });
    }//end transformatory
    for (i = 1; i <= 1; i++) {
        this.toolbox_generatory.appendChild(this.generatory[i] = document.createElement("div"));//generator
        this.generatory[i].id = "generator_" + i;
        setClass(this.generatory[i], "toolbox_generator");
        setTitle(this.generatory[i], "Generator");
        this.generatory[i].innerHTML = "<img src='lib/images/generator.png'>";
        this.s_generatory[i] = new Draggable('generator_' + i, {
            zindex: 2,
            snap: function(x, y, draggable){
                function constrain(n, lower, upper){
                    if (n > upper) 
                        return upper;
                    else 
                        if (n < lower) 
                            return lower;
                        else 
                            return n;
                }
                element_dimensions = Element.getDimensions(draggable.element);
                toolbox_dimensions = Element.getDimensions(document.getElementById('toolbox'));
                main_dimensions = Element.getDimensions(document.getElementById('konfigurator'));
                
                var element_nr = draggable.element.id.split("_");
                var i = element_nr[1];
                
                if (draggable.element.parentNode.parentNode.id != 'toolbox') {
                    var t_ctr = 0;
                    var t_f_ctr = 0;
                    var t_dim = 0
                    for (var sk = 0; sk < szkic.Sekcje.length; sk++) {
                        for (var tr = 0; tr < szkic.Sekcje[sk].tory.length; tr++) {
                            if (draggable.element.parentNode == szkic.Sekcje[sk].tory[tr].transformator) {
                                t_f_ctr = t_ctr;
                                t_dim = Element.getDimensions(draggable.element.parentNode.parentNode);
                                break;
                            }
                            else {
                                t_ctr++;
                            }
                        }
                    }
                    var leftOffset = (t_dim.width * t_f_ctr + parseInt(Element.getStyle(draggable.element.parentNode, 'left') || '0') + parseInt(szkic.szkic.style.left || '0')) * (-1);
                    var topOffset = (parseInt(szkic.szkic.style.top || '0') + parseInt(Element.getStyle(draggable.element.parentNode, 'top') || '0')) * (-1);
                }
                else {
                    var parentElement = draggable.element.parentNode;
                    var conteinerYOffset = 0;
                    for (var a = 0; a < parentElement.parentNode.childNodes.length; a++) {
                        if (parentElement == parentElement.parentNode.childNodes.item(a)) {
                            break;
                        }
                        else {
                            conteinerYOffset += Element.getDimensions(parentElement.parentNode.childNodes.item(a)).height;
                        }
                    }
                    var elementsPerRow = parseInt(Element.getDimensions(parentElement).width / element_dimensions.width);
                    var elementPosition = 0;
                    for (var a = 0; a < parentElement.childNodes.length; a++) {
                        if (parentElement.childNodes.item(a) == draggable.element) {
                            break;
                        }
                        else 
                            if (Element.getStyle(parentElement.childNodes.item(a), 'display') != "none") {
                                elementPosition++;
                            }
                    }
                    var elementYOffset = parseInt(elementPosition / elementsPerRow) * element_dimensions.height;
                    var elementXOffset = (elementPosition - (parseInt(elementPosition / elementsPerRow) * elementsPerRow)) * element_dimensions.width;
                    var leftOffset = (main_dimensions.width - toolbox_dimensions.width + elementXOffset) * (-1);
                    var topOffset = (conteinerYOffset + elementYOffset) * (-1);
                }
                return [constrain(x, leftOffset, main_dimensions.width + leftOffset - element_dimensions.width), constrain(y, topOffset, main_dimensions.height + topOffset - element_dimensions.height)];
            },
            revert: true,
            reverteffect: function(element, top_offset, left_offset){
                var dur = Math.sqrt(Math.abs(top_offset ^ 2) + Math.abs(left_offset ^ 2)) * 0.02;
                new Effect.Move(element, {
                    x: -left_offset,
                    y: -top_offset,
                    duration: dur,
                    transition: Effect.Transitions.spring,
                    queue: {
                        scope: '_draggable',
                        position: 'end'
                    }
                });
            },
            onStart: function(draggable){
                szkic.transformatorDrag(draggable);
                szkic.highlightTransformators();
            },
            onEnd: function(element){
                szkic.dimTransformators();
                szkic.setTorBg();
                szkic.clear();
                szkic.center();
                szkic.toolbox.modifyMaxTor();
                szkic.toolbox.modifyMaxSekcja();
				szkic.centerSprzegla();
				szkic.bottom_menu.sortSzkice(true);
            }
        });//end generator
    }
    for (i = 1; i <= 5; i++) {//utworz sprzegla
        this.toolbox_sprzegla.appendChild(this.sprzegla[i] = document.createElement("div"));
        this.sprzegla[i].id = "sprzeglo_" + i;
        setClass(this.sprzegla[i], "toolbox_sprzeglo");
        setTitle(this.sprzegla[i], "Wyłącznik");
        if (!(i % 2)) {
            this.sprzegla[i].style.display = "none";
        }
        this.sprzegla[i].innerHTML = "<img src='lib/images/sprzeglo_sekcja.png'>";
        this.s_sprzegla[i] = new Draggable('sprzeglo_' + i, {
            snap: function(x, y, draggable){
                function constrain(n, lower, upper){
                    if (n > upper) 
                        return upper;
                    else 
                        if (n < lower) 
                            return lower;
                        else 
                            return n;
                }
                element_dimensions = Element.getDimensions(draggable.element);
                toolbox_dimensions = Element.getDimensions(document.getElementById('toolbox'));
                main_dimensions = Element.getDimensions(document.getElementById('konfigurator'));
				
                if (draggable.element.parentNode.parentNode.id != 'toolbox') {//ustalanie zakresu dozwolonego przemieszczenia na szkicu
                    var t_ctr = 0;
                    var t_f_ctr = 0;
                    var t_dim = 0
                    for (var sk = 0; sk < szkic.Sekcje.length; sk++) {
                        for (var tr = 0; tr < szkic.Sekcje[sk].tory.length; tr++) {
                            if (draggable.element.parentNode == szkic.Sekcje[sk].tory[tr].transformator) {
                                t_f_ctr = t_ctr;
                                t_dim = Element.getDimensions(draggable.element.parentNode.parentNode);
                                break;
                            }
                            else {
                                t_ctr++;
                            }
                        }
                    }
                    var leftOffset = (t_dim.width * t_f_ctr + parseInt(Element.getStyle(draggable.element.parentNode, 'left') || '0') + parseInt(szkic.szkic.style.left || '0')) * (-1);
                    var topOffset = (parseInt(szkic.szkic.style.top || '0') + parseInt(Element.getStyle(draggable.element.parentNode, 'top') || '0')) * (-1);
                }
                else {
                    var parentElement = draggable.element.parentNode;
                    var conteinerYOffset = 0;
                    for (var a = 0; a < parentElement.parentNode.childNodes.length; a++) {
                        if (parentElement == parentElement.parentNode.childNodes.item(a)) {
                            break;
                        }
                        else {
                            conteinerYOffset += Element.getDimensions(parentElement.parentNode.childNodes.item(a)).height;
                        }
                    }
                    var elementsPerRow = parseInt(Element.getDimensions(parentElement).width / element_dimensions.width);
                    var elementPosition = 0;
                    for (var a = 0; a < parentElement.childNodes.length; a++) {
                        if (parentElement.childNodes.item(a) == draggable.element) {
                            break;
                        }
                        else 
                            if (Element.getStyle(parentElement.childNodes.item(a), 'display') != "none") {
                                elementPosition++;
                            }
                    }
                    var elementYOffset = parseInt(elementPosition / elementsPerRow) * element_dimensions.height;
                    var elementXOffset = (elementPosition - (parseInt(elementPosition / elementsPerRow) * elementsPerRow)) * element_dimensions.width;
                    var leftOffset = (main_dimensions.width - toolbox_dimensions.width + elementXOffset) * (-1);
                    var topOffset = (conteinerYOffset + elementYOffset) * (-1);
                }
                return [constrain(x, leftOffset, main_dimensions.width + leftOffset - element_dimensions.width), constrain(y, topOffset, main_dimensions.height + topOffset - element_dimensions.height)];
            },
            revert: true,
            reverteffect: function(element, top_offset, left_offset){
                var dur = Math.sqrt(Math.abs(top_offset ^ 2) + Math.abs(left_offset ^ 2)) * 0.02;
                new Effect.Move(element, {
                    x: -left_offset,
                    y: -top_offset,
                    duration: dur,
                    transition: Effect.Transitions.spring,
                    queue: {
                        scope: '_draggable',
                        position: 'end'
                    }
                });
            },
            onStart: function(draggable){				
                if (draggable.element.className != 'tor_sprzeglo') {
					szkic.decenterSprzegla();
                    szkic.highlightSprzegla(6);
                }
            },
            onEnd: function(element){
				szkic.centerSprzegla();
                for (var sk = 0; sk < szkic.Sekcje.length; sk++) {
                    if (((szkic.Sekcje[sk].tory.length > 0 && szkic.Sekcje[sk].tory[szkic.Sekcje[sk].tory.length - 1].isEmptySprzeglo(4)) || (szkic.Sekcje[sk].tory.length <= 0)) && (sk + 1 < szkic.Sekcje.length && ((szkic.Sekcje[sk + 1].tory.length > 0 && szkic.Sekcje[sk + 1].tory[0].isEmptySprzeglo(2)) || (szkic.Sekcje[sk + 1].tory.length <= 0)))) {
                        for (var tr2 = 0; tr2 < szkic.Sekcje[sk + 1].tory.length; tr2++) {
                            szkic.Sekcje[sk].tory.push(szkic.Sekcje[sk + 1].tory[tr2]);
                            szkic.Sekcje[sk].tory[szkic.Sekcje[sk].tory.length - 1].appendInto(szkic.Sekcje[sk].sekcja);
                        }
                        szkic.Sekcje[sk + 1].sekcja.parentNode.removeChild(szkic.Sekcje[sk + 1].sekcja);
                        szkic.Sekcje.splice(sk + 1, 1);
                    }
                }
                for (var sk = 0; sk < szkic.Sekcje.length; sk++) {
                    for (var tr = 0; tr < szkic.Sekcje[sk].tory.length; tr++) {
                        if (!szkic.Sekcje[sk].tory[tr].isEmptySprzeglo(2) && ((tr - 1 < 0 && (sk - 1 < 0 || (szkic.Sekcje[sk - 1].tory.length && !szkic.Sekcje[sk - 1].tory[szkic.Sekcje[sk - 1].tory.length - 1].isEmptySprzeglo(4)))) || tr - 1 >= 0)) {
                            //dodaj sekcje przed aktualna i przesun don wszystkie tory wystepujace w aktualnej sekcji przed aktualnym torem
                            for (var indexOfLastSk = szkic.Sekcje.length; indexOfLastSk > sk; indexOfLastSk--) {//robie miejsce na sekcje w tablicy
                                szkic.Sekcje[indexOfLastSk] = szkic.Sekcje[indexOfLastSk - 1];
                            }
                            szkic.Sekcje[sk] = new Sekcja;
                            var trCtr = 0;
                            if (tr - 1 >= 0) {//czy aby na pierwszym torze nie postawiono sprzegla
                                for (; tr - 1 >= 0; tr--, trCtr++) {//przepisuje poprzednie tory do nowej sekcji
                                    szkic.Sekcje[sk].tory[tr - 1] = szkic.Sekcje[sk + 1].tory[tr - 1];
                                }
                                szkic.Sekcje[sk + 1].tory.splice(0, trCtr);//usuwam przesuniete tory ze starej sekcji
                                for (var ilTr = 0; ilTr < szkic.Sekcje[sk].tory.length; ilTr++) {//appenduje toryHTML do nowej sekcji
                                    szkic.Sekcje[sk].tory[ilTr].appendInto(szkic.Sekcje[sk].sekcja);
                                }
                            }
                            szkic.Sekcje[sk].insertBefore(szkic.szkic, szkic.Sekcje[sk + 1].sekcja);//appenduje sekcjeHTML do szkicu
                            sk--;
                            break;
                        }
                        if (!szkic.Sekcje[sk].tory[tr].isEmptySprzeglo(4) && (tr < szkic.Sekcje[sk].tory.length - 1 || sk + 1 >= szkic.Sekcje.length)) {
                            //dodaj sekcje po aktualnej i przesun don wszystkie tory po aktualnym
                            for (var indexOfLastSk = szkic.Sekcje.length; indexOfLastSk > sk + 1; indexOfLastSk--) {//robie miejsce na sekcje w tablicy
                                szkic.Sekcje[indexOfLastSk] = szkic.Sekcje[indexOfLastSk - 1];
                            }
                            szkic.Sekcje[sk + 1] = new Sekcja;
                            var torWSprzeglo = tr;
                            tr++;
                            var ntr = 0;
                            for (; tr < szkic.Sekcje[sk].tory.length; tr++, ntr++) {
                                szkic.Sekcje[sk + 1].tory[ntr] = szkic.Sekcje[sk].tory[tr];
                                szkic.Sekcje[sk + 1].tory[ntr].appendInto(szkic.Sekcje[sk + 1].sekcja);
                            }
                            szkic.Sekcje[sk].tory.splice(torWSprzeglo + 1, ntr);
                            if (sk + 2 < szkic.Sekcje.length) {
                                szkic.Sekcje[sk + 1].insertBefore(szkic.szkic, szkic.Sekcje[sk + 2].sekcja);
                            }
                            else {
                                szkic.Sekcje[sk + 1].appendInto(szkic.szkic);
                            }
                            break;
                        }
                    }
                }
                szkic.dimSprzegla(6);
                szkic.setTorBg();
                szkic.clear();
                szkic.center();
                szkic.toolbox.modifyMaxTor();
                szkic.toolbox.modifyMaxSekcja();
				szkic.decenterSprzegla();
				szkic.centerSprzegla();
            }
        });//end sprzegla
    }
    this.setDroppableToolbox();
}

function gotowce(szkic){
	var szkiceXMLPath='lib/szkice.xml';
	var algorytmyXMLPath='lib/algorytmy.xml';
	this.szkice=new Array();	
	/*	szkice=Array({
	 *		group: Array({
	 *			id: Array(string),
	 *			algorytm_id: Array(string)
	 *			}),
	 *	 	draw: string
	 *	});
	 */
	this.algorytmy=new Array();
	/* algorytmy=Array({
	 *		id: string,
	 *		zae_id: string,
	 *		jawna: string,
	 *		ukryta: string,
	 *		zrzut: string,
	 *		cases: Array({
	 *			u: Array(string), //uwaga, array od 1 do length-1
	 *			w: Array(string) //uwaga, array od 1 do length-1
	 *		})
	 *	});
	 */
	this.activeAlgorytmy=new Array();
	var state=1;
	this.selectedAlgorytm=false;
	var gotowiec=this;
	this.menuBar=$('bottom_menu_bar');
	var bufferSzkice=document.createElement('div');
	var bufferAlgorytmy=document.createElement('div');
	bufferSzkice.id='sBufferBar';
	bufferAlgorytmy.id='aBufferBar';
	
	function createNewElem(){
        return document.createElement('div');
    }
	this.getAZAEID=function(aID){
		for(var i=0; i<this.algorytmy.length; i++){
			if(parseInt(aID)==parseInt(this.algorytmy[i].id)){
				return this.algorytmy[i].zae_id;
			}
		}
	}
	this.createMiniTor=function(torID){
		var tor=createNewElem();
		setClass(tor, "tor");
		if(IsNumeric(torID)){
			var t_type=torID.charAt(0);
			var s_type=torID.charAt(1);
			switch(parseInt(t_type)){
				case 1:
				var tt=createNewElem();
				setClass(tt,"transformator");
				tor.appendChild(tt);
				tt=createNewElem();
				setClass(tt,"wlacznik");
				tor.appendChild(tt);
				break;
				
				case 2:
				setClass(tor, "tor tor_gen");
				var tt=createNewElem();
				setClass(tt,"generator");
				tor.appendChild(tt);
				tt=createNewElem();
				setClass(tt,"wlacznik");
				tor.appendChild(tt);
				break;
				
				default:
				setClass(tor, "tor tor_null");
				break;
			}
			switch (parseInt(s_type)) {
	            case 2:
					var buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_lewe");
					tor.appendChild(buffer);
	                break;
	                
	            case 3:
	                var buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_lewe");
					tor.appendChild(buffer);
	                break;
	                
	            case 4:
	                var buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_prawe");
					tor.appendChild(buffer);
	                break;
	                
	            case 5:
	                var buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_prawe");
					tor.appendChild(buffer);
	                break;
	                
	            case 6:
	                var buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_lewe");
					tor.appendChild(buffer);
					buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_prawe");
					tor.appendChild(buffer);
	                break;
	                
	            case 7:
	                var buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_lewe");
					tor.appendChild(buffer);
					buffer=createNewElem();
					setClass(buffer,"sprzeglo sprzeglo_prawe");
					tor.appendChild(buffer);
	                break;
	        }
			return tor;
		}else{
			return false;
		}		
	}
	function sprzegla2center(sprzeglaID, currentSprzeglo, whichSprzeglo){
		/* centering sprzegla between tors
		 * currentSprzeglo - index of currently processed sprzegloID
		 * whichSprzeglo - which sprzeglo of tor is set {0-none, 1-left, 2-right, 3-both}
		 */
		var rtn=0;
		if(whichSprzeglo==1||whichSprzeglo==3){
			if(currentSprzeglo-1>=0){
				if(parseInt(sprzeglaID[currentSprzeglo-1].sprzegla)<4){//right not set
					rtn+=1;
				}
			}
		}
		if(whichSprzeglo==2||whichSprzeglo==3){
			if(currentSprzeglo+1<sprzeglaID.length){
				if(parseInt(sprzeglaID[currentSprzeglo+1].sprzegla)==1||(parseInt(sprzeglaID[currentSprzeglo+1].sprzegla)>3&&parseInt(sprzeglaID[currentSprzeglo+1].sprzegla)<6)){
					rtn+=2;
				}
			}
		}
		return rtn;
	}	
	function centerSprzegla(element, sprzeglaToCenter){
		if(sprzeglaToCenter==1||sprzeglaToCenter==3){
			var mySprzegla=getElementsByClassName(element, 'sprzeglo_lewe');
			for(var i=0; i<mySprzegla.length; i++){
				setClass(mySprzegla[i], 'sprzeglo sprzeglo_lewe_center');
			}
		}
		if(sprzeglaToCenter==2||sprzeglaToCenter==3){
			var mySprzegla=getElementsByClassName(element, 'sprzeglo_prawe');
			for(var i=0; i<mySprzegla.length; i++){
				setClass(mySprzegla[i], 'sprzeglo sprzeglo_prawe_center');
			}
		}
	}
	this.createMiniSzkice = function(){
		if (this.szkice) {
			for (var k = 0; k < this.szkice.length; k++) {
				var szkicID = this.szkice[k].draw;
				var szkicIDs = new Array();
				var il_sekcji = szkicID.charAt(0);
				var i = 1;
				for (var sk = 0; sk < il_sekcji; sk++) {
					var il_torow = szkicID.charAt(i);
					i++;
					for (tr = 0; tr < il_torow; tr++) {
						szkicIDs.push({
							typZasilania: szkicID.charAt(i),
							sprzegla: szkicID.charAt(i + 1)
						});
						i += 2;
					}
				}
				var miniSzkic = createNewElem();
				setClass(miniSzkic, "bm_item");
				for (var i = 0; i < szkicIDs.length; i++) {
					var ntr = this.createMiniTor(szkicIDs[i].typZasilania + '' + szkicIDs[i].sprzegla);
					miniSzkic.appendChild(ntr);
					
					switch (parseInt(szkicIDs[i].sprzegla)) {
			            case 2:
							centerSprzegla(ntr, sprzegla2center(szkicIDs, i, 1));
			                break;
			                
			            case 3:
			                centerSprzegla(ntr, sprzegla2center(szkicIDs, i, 1));
			                break;
			                
			            case 4:
			                centerSprzegla(ntr, sprzegla2center(szkicIDs, i, 2));
			                break;
			                
			            case 5:
			                centerSprzegla(ntr, sprzegla2center(szkicIDs, i, 2));
			                break;
			                
			            case 6:
			                centerSprzegla(ntr, sprzegla2center(szkicIDs, i, 3));
			                break;
			                
			            case 7:
			                centerSprzegla(ntr, sprzegla2center(szkicIDs, i, 3));
			                break;
			        }
				}
				//center
				var width=miniSzkic.childNodes.length*37;
				width=(150-width)/2;
				miniSzkic.childNodes.item(0).style.marginLeft=width+"px";
				miniSzkic.id=szkicID;
				setOnClick(miniSzkic,'redirect(\''+window.location.href.split('?')[0]+'?g='+szkicID+'&help=0\')');
				
				var glass=createNewElem();
				setClass(glass,"glass");
				miniSzkic.appendChild(glass);
				
				this.menuBar.appendChild(miniSzkic);
			}
			var width=this.menuBar.childNodes.length*162;
			this.menuBar.style.width=width+'px';
			width=((width-Element.getDimensions(this.menuBar.parentNode).width)/2)*(-1);
			this.menuBar.style.left=width+'px';
		}
		else {
			alert('Błędy w plikach konfiguracyjnych!');
		}
	}
	this.sortSzkice=function(efect){
		if(state==1){
			var ilTorow=szkic.getFilledTorNo();
			var miniSzkice2Sort=getElementsByClassName(this.menuBar,'bm_item');
			var ctr=0;
			if(ilTorow>1){
				for(var i=0; i<miniSzkice2Sort.length; i++){
					if(szkic.getTorsQuantity(miniSzkice2Sort[i].id)==ilTorow){
						miniSzkice2Sort[i].style.display='block';
						ctr++;
					}else{
						miniSzkice2Sort[i].style.display='none';
					}
				}
			}else{
				for(var i=0; i<miniSzkice2Sort.length; i++){
					miniSzkice2Sort[i].style.display='block';
					ctr++;
				}
			}				
			var toLeft=ctr*162;
			this.menuBar.style.width=toLeft+'px';
			toLeft=((toLeft-Element.getDimensions(this.menuBar.parentNode).width)/2)*(-1);
			if (efect) {
				var actualLeft = parseInt(this.menuBar.style.left.replace(/px/, ''));
				toLeft = (actualLeft - toLeft) * (-1);
				new Effect.Move(this.menuBar, {
					x: toLeft,
					y: 0,
					duration: 0.5,
					transition: Effect.Transitions.spring
				});
			}else{
				this.menuBar.style.left=toLeft+'px';
			}
		}		
	}
	
	this.createMiniAlgorytmy = function(){
		if (this.algorytmy) {
			for (var i = 0; i < this.algorytmy.length; i++) {
				var miniSzkic = createNewElem();
				setClass(miniSzkic, "bm_item");
				miniSzkic.id=this.algorytmy[i].id;
				var tbl=document.createElement('div');
				setClass(tbl,'tbl');
				var tr=document.createElement('div');
				setClass(tr,'tr');
				tbl.appendChild(tr);
				var td=document.createElement('div');
				setClass(td, 'td');
				tr.appendChild(td);
				var lCol=1;
				for(var j=1; j<this.algorytmy[i].cases[0].u.length; j++, lCol++){
					var td=document.createElement('div');
					setClass(td, 'td hd');
					td.innerHTML='<p>'+'U'+j+'</p>';
					tr.appendChild(td);
				}
				for(var j=1; j<this.algorytmy[i].cases[0].w.length; j++, lCol++){
					var td=document.createElement('div');
					setClass(td, 'td hd');
					td.innerHTML='<p>'+'W'+j+'</p>';
					tr.appendChild(td);
				}
				var lRow=1;
				for(var j=0; j<this.algorytmy[i].cases.length; j++, lRow++){
					tr=document.createElement('div');
					setClass(tr,'tr');
					var td=document.createElement('div');
					setClass(td,'td hd');
					td.innerHTML='<p>'+(j+1)+'</p>';
					tr.appendChild(td);
					for(var k=1; k<this.algorytmy[i].cases[j].u.length; k++){
						td=document.createElement('div');
						setClass(td,'td');
						td.innerHTML='<p>'+this.algorytmy[i].cases[j].u[k]+'</p>';
						tr.appendChild(td);
					}
					for(var k=1; k<this.algorytmy[i].cases[j].w.length; k++){
						td=document.createElement('div');
						setClass(td,'td');
						td.innerHTML='<p>'+this.algorytmy[i].cases[j].w[k]+'</p>';
						tr.appendChild(td);
					}
					tbl.appendChild(tr);
				}
				setOnClick(miniSzkic,"{schema.getFullName("+this.algorytmy[i].id+"); schema.bottom_menu.setSelectedAlgoritm("+this.algorytmy[i].id+"); resetASelected("+this.algorytmy[i].id+"); schema.initSimulator(); return false;}");
				miniSzkic.appendChild(tbl);
				tabWidth=lCol*16;
				tabHeight=lRow*11;
				tbl.style.width=tabWidth+'px';
				tbl.style.height=tabHeight+'px';
				tbl.style.marginLeft=(((150-tabWidth)/2)-2)+'px';
				tbl.style.marginTop=((90-tabHeight)/2)+'px';
				
				var glass=createNewElem();
				setClass(glass,"glass");
				miniSzkic.appendChild(glass);
				bufferAlgorytmy.appendChild(miniSzkic);
			}
		}
		else {
			alert('Błędy w plikach konfiguracyjnych!');
		}
	}
	
	this.setSelectedAlgoritm=function(aID){
		for (var i = 0; i < this.algorytmy.length; i++) {
			if (this.algorytmy[i].id == aID) {
				this.selectedAlgorytm=this.algorytmy[i];
				break;
			}
		}
	}
	
	this.unsetSelectedAlgoritm=function(){
		this.selectedAlgorytm=false;
	}
	
	this.switchMenu=function(schemaID){
		switch(state){
			case 1:
			this.menuBar.style.display='none';
			var menuElements=getElementsByClassName(this.menuBar, 'bm_item');
			for(var i=0; i<menuElements.length; i++){
				bufferSzkice.appendChild(menuElements[i]);
			}
			var wantedAlgoritms=new Array();
			for(var i=0; i<this.szkice.length; i++){
				for(var j=0; j<this.szkice[i].group.length; j++){
					for(var k=0; k<this.szkice[i].group[j].id.length; k++){
						if(schemaID==this.szkice[i].group[j].id[k]){
							for(var l=0; l<this.szkice[i].group[j].algorytm_id.length; l++){
								wantedAlgoritms.push(this.szkice[i].group[j].algorytm_id[l]);
							}
							break;
						}
					}
				}
			}
			menuElements=getElementsByClassName(bufferAlgorytmy, 'bm_item');
			var visibleMenuItemsNo=0;		
			for(var i=0; i<menuElements.length; i++){
				this.menuBar.appendChild(menuElements[i]);
				for(var j=0; j<wantedAlgoritms.length; j++){
					if(menuElements[i].id==wantedAlgoritms[j]){
						menuElements[i].style.display='block';
						visibleMenuItemsNo++;
						break;
					}else{
						menuElements[i].style.display='none';
					}
				}
			}
			if (visibleMenuItemsNo) {
				this.menuBar.style.width = visibleMenuItemsNo * 162 + 'px';
				this.menuBar.style.left = (((visibleMenuItemsNo * 162 - Element.getDimensions(this.menuBar.parentNode).width) / 2) * (-1)) + 'px';
				new Effect.BlindDown(this.menuBar, {
				duration: 0.5,
				scaleX: false,
				scaleY: true
				});
			}else{
				if ($('alert_window').getElementsByTagName('p').length <= 1) {
					var msgElem = document.createElement('p');
					var buttonOK = document.createElement('button');
					buttonOK.innerHTML = 'Napisz do nas';
					setClass(msgElem, 'msg');
					msgElem.innerHTML = "Dla przedstawionego na schemacie układu pracy nie ma gotowego algorytmu przełączeń, możemy dla Państwa przygotować i sprawdzić bezpieczeństwo funkcjonowania takiej automatyki SZR. W celu sprawdzenia możliwości wykonania takiego układu prosimy o kontakt.<br>";
					var contact_window=$('contact_window');
					var contactToLeft=(document.documentElement.clientWidth-Element.getDimensions(contact_window).width)/2;
					setOnClick(buttonOK, "$('dead_field').style.display='none'; $('alert_window').style.display='none'; $('contact_window').style.left='"+contactToLeft+"px'; $('contact_window').style.top='80px'; Effect.Grow('contact_window', {duration:0.5}); resetZPosition($('contact_window'),['link_window','help_window','algorytm_window','simple_alert_window']); hideElem('menu_body'); return false;");
					setOnClick($('alert_window_close_btn'), "$('dead_field').style.display='none'; $('alert_window').style.display='none'; return false;");
					$('alert_window').appendChild(msgElem);
					msgElem.appendChild(buttonOK);
					$('alert_window').style.left = ((document.documentElement.clientWidth - Element.getDimensions('alert_window').width) / 2) + 'px';
					$('alert_window').style.top = ((document.documentElement.clientHeight - Element.getDimensions('alert_window').height) / 2) + 'px';
				}
				$('dead_field').style.height = document.documentElement.clientHeight + 'px';
				$('dead_field').style.width = document.documentElement.clientWidth + 'px';
				$('dead_field').style.display = 'block';
				Effect.Grow('alert_window', {duration:0.5});
			}
			state=2;
			break;
			
			case 2:
			szkic.resetSimulator();
			this.menuBar.style.display='none';
			this.unsetSelectedAlgoritm();
			var menuElements=getElementsByClassName(this.menuBar, 'bm_item');
			for(var i=0; i<menuElements.length; i++){
				bufferAlgorytmy.appendChild(menuElements[i]);
				menuElements[i].style.display="block";
				setClass(menuElements[i], 'bm_item')
			}
			menuElements=getElementsByClassName(bufferSzkice, 'bm_item');
			var visibleMenuItemsNo=0;	
			var visibleElementsNo=0;	
			for(var i=0; i<menuElements.length; i++){
				this.menuBar.appendChild(menuElements[i]);
			}
			new Effect.BlindDown(this.menuBar, {
				duration: 0.5,
				scaleX: false,
				scaleY: true
			});
			state=1;
			this.sortSzkice(false);
			break;
		}
		return state;
	}
	this.sortAlgoritms=function(elements){
		var algorytmy = getElementsByClassName(this.menuBar, 'bm_item');
		var activeAlgorytmy = new Array();
		for (var i = 0; i < algorytmy.length; i++) {
			if (algorytmy[i].style.display != 'none') {
				activeAlgorytmy.push(algorytmy[i]);
			}
		}
		if (elements.rJawna == 0 && elements.rUkryta == 0 && elements.zrzut == 0) {
			for(var i=0;i<activeAlgorytmy.length;i++){
				var clsnam = activeAlgorytmy[i].className;
				clsnam=clsnam.replace(/ shade/, "");
				setClass(activeAlgorytmy[i], clsnam);
			}
		}
		else {
			var algorytmyData = new Array();
			for (var j = 0; j < activeAlgorytmy.length; j++) {
				for (var i = 0; i < this.algorytmy.length; i++) {
					if (this.algorytmy[i].id == activeAlgorytmy[j].id) {
						algorytmyData.push(this.algorytmy[i]);
						break;
					}
				}
			}
			for (var i = 0; i < algorytmyData.length; i++) {
				if (algorytmyData[i].jawna == elements.rJawna && algorytmyData[i].ukryta == elements.rUkryta && algorytmyData[i].zrzut == elements.zrzut) {
					var clsnam = $(algorytmyData[i].id).className;
					clsnam=clsnam.replace(/ shade/, "");
					setClass($(algorytmyData[i].id), clsnam);
				}
				else {
					var clsnam = $(algorytmyData[i].id).className;
					clsnam=clsnam.replace(/ shade/, "");
					clsnam += ' shade';
					setClass($(algorytmyData[i].id), clsnam);
				}
			}
		}
	}
	this.getAParams=function(aID){
		for(var i=0; i<this.algorytmy.length; i++){
			if(this.algorytmy[i].id==aID){
				return {
					rJawna:this.algorytmy[i].jawna,
					rUkryta: this.algorytmy[i].ukryta,
					zrzut: this.algorytmy[i].zrzut
				};
			}
		}
	}
	this.resetAlgorytm=function(){
		var alg=getElementsByClassName(bufferAlgorytmy, 'bm_item');
		for(var i=0; i<alg.length; i++){
			setClass(alg[i],'bm_item');
		}
	}
	
	var filePath=algorytmyXMLPath;
        if (document.implementation && document.implementation.createDocument) {
            xmlDoc1 = document.implementation.createDocument("", "", null);
            xmlDoc1.onload = function(){			
				var xmlBodyElement=xmlDoc1.getElementsByTagName('body');
				var algorytm=xmlBodyElement.item(0).getElementsByTagName('algorytm');
				for (var i = 0; i < algorytm.length; i++) {
					var aCase=new Array();
					var cases=algorytm.item(i).getElementsByTagName('case');
					for(var j=0; j<cases.length; j++){
						var uVal=new Array();
						var wVal=new Array();
						for(var k=0; k<cases.item(j).childNodes.length; k++){
							if(cases.item(j).childNodes.item(k).tagName&&IsNumeric(cases.item(j).childNodes.item(k).tagName.charAt(1))){
								switch(cases.item(j).childNodes.item(k).tagName.charAt(0)){
									case 'u':
									uVal[parseInt(cases.item(j).childNodes.item(k).tagName.charAt(1))]=cases.item(j).childNodes.item(k).childNodes.item(0).data;
									break;
									
									case 'w':
									wVal[parseInt(cases.item(j).childNodes.item(k).tagName.charAt(1))]=cases.item(j).childNodes.item(k).childNodes.item(0).data;
									break;
								}
							}
						}
						aCase.push({
							u: uVal,
							w: wVal
						});
					}
					gotowiec.algorytmy.push({
						id: algorytm.item(i).getAttribute('id'),
						zae_id: algorytm.item(i).getAttribute('zae_id'),
						jawna: algorytm.item(i).getAttribute('jawna'),
						ukryta: algorytm.item(i).getAttribute('ukryta'),
						zrzut: algorytm.item(i).getAttribute('zrzut'),
						cases: aCase
					});
				}
				gotowiec.createMiniAlgorytmy();
			}
        }
        else 
            if (window.ActiveXObject) {
                xmlDoc1 = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc1.onreadystatechange = function(){
                    if (xmlDoc1.readyState == 4) {
						var xmlBodyElement=xmlDoc1.getElementsByTagName('body');
						var algorytm=xmlBodyElement.item(0).getElementsByTagName('algorytm');
						for (var i = 0; i < algorytm.length; i++) {
							var aCase=new Array();
							var cases=algorytm.item(i).getElementsByTagName('case');
							for(var j=0; j<cases.length; j++){
								var uVal=new Array();
								var wVal=new Array();
								for(var k=0; k<cases.item(j).childNodes.length; k++){
									if(cases.item(j).childNodes.item(k).tagName&&IsNumeric(cases.item(j).childNodes.item(k).tagName.charAt(1))){
										switch(cases.item(j).childNodes.item(k).tagName.charAt(0)){
											case 'u':
											uVal[parseInt(cases.item(j).childNodes.item(k).tagName.charAt(1))]=cases.item(j).childNodes.item(k).childNodes.item(0).data;
											break;
											
											case 'w':
											wVal[parseInt(cases.item(j).childNodes.item(k).tagName.charAt(1))]=cases.item(j).childNodes.item(k).childNodes.item(0).data;
											break;
										}
									}
								}
								aCase.push({
									u: uVal,
									w: wVal
								});
							}
							gotowiec.algorytmy.push({
								id: algorytm.item(i).getAttribute('id'),
								zae_id: algorytm.item(i).getAttribute('zae_id'),
								jawna: algorytm.item(i).getAttribute('jawna'),
								ukryta: algorytm.item(i).getAttribute('ukryta'),
								zrzut: algorytm.item(i).getAttribute('zrzut'),
								cases: aCase
							});
						}
						gotowiec.createMiniAlgorytmy();
					}
                };
            }
            else {
                alert('Twoja przeglądarka nie pozwala na uruchomienie tej aplikacji.');
                return false;
            }
		xmlDoc1.async=false;
        xmlDoc1.load(filePath);
		if(BrowserDetect.browser=='Opera') xmlDoc1.onload();
	
	filePath=szkiceXMLPath;
        if (document.implementation && document.implementation.createDocument) {
            xmlDoc = document.implementation.createDocument("", "", null);
            xmlDoc.onload = function(){	
				var xmlBodyElement=xmlDoc.getElementsByTagName('body');
				var rzrmicro=xmlBodyElement[0].getElementsByTagName('rzrmikro');
				for (var i = 0; i < rzrmicro.length; i++) {
					var grupy = new Array();
					var rzr_groups = rzrmicro.item(i).getElementsByTagName('group');
					for (var j = 0; j < rzr_groups.length; j++) {
						var IDs = new Array();
						var aIDs = new Array();
						var elemIDs = rzr_groups.item(j).getElementsByTagName('id');
						for (var k = 0; k < elemIDs.length; k++) {
							IDs.push(elemIDs.item(k).childNodes.item(0).data);
						}
						var elemaIDs = rzr_groups.item(j).getElementsByTagName('algorytm_id');
						for (var k = 0; k < elemaIDs.length; k++) {
							aIDs.push(elemaIDs.item(k).childNodes.item(0).data);
						}
						grupy.push({
							id: IDs,
							algorytm_id: aIDs
						});
					}
					if (rzrmicro.item(i).getAttribute('draw')) {//getParameter
				    	var draw=rzrmicro.item(i).getAttribute('draw');
					}else{
					    var draw=grupy[0].id[0];
					}				
					gotowiec.szkice.push({
					    group: grupy,
					    draw: draw
					});
				}
				gotowiec.createMiniSzkice();
			}
        }
        else 
            if (window.ActiveXObject) {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.onreadystatechange = function(){
                    if (xmlDoc.readyState == 4) {
						var xmlBodyElement=xmlDoc.getElementsByTagName('body');
						var rzrmicro=xmlBodyElement[0].getElementsByTagName('rzrmikro');
						for (var i = 0; i < rzrmicro.length; i++) {
							var grupy = new Array();
							var rzr_groups = rzrmicro.item(i).getElementsByTagName('group');
							for (var j = 0; j < rzr_groups.length; j++) {
								var IDs = new Array();
								var aIDs = new Array();
								var elemIDs = rzr_groups.item(j).getElementsByTagName('id');
								for (var k = 0; k < elemIDs.length; k++) {
									IDs.push(elemIDs.item(k).childNodes.item(0).data);
								}
								var elemaIDs = rzr_groups.item(j).getElementsByTagName('algorytm_id');
								for (var k = 0; k < elemaIDs.length; k++) {
									aIDs.push(elemaIDs.item(k).childNodes.item(0).data);
								}
								grupy.push({
									id: IDs,
									algorytm_id: aIDs
								});
							}
							if (rzrmicro.item(i).getAttribute('draw')) {//getParameter
						    	var draw=rzrmicro.item(i).getAttribute('draw');
							}else{
							    var draw=grupy[0].id[0];
							}				
							gotowiec.szkice.push({
							    group: grupy,
							    draw: draw
							});
						}
						gotowiec.createMiniSzkice();
					}
                };
            }
            else {
                alert('Twoja przeglądarka nie pozwala na uruchomienie tej aplikacji.');
                return false;
            }
		xmlDoc.async=false;
		xmlDoc.load(filePath);
        if(BrowserDetect.browser=='Opera') xmlDoc.onload();
}
