/**
 * Devido as constantes altercoes do trabalho e prazos curtos 
 * para se efectuadas essas alteracoes, algum codigo pode estar 
 * um pouco mais complicado de se perceber.
 * 
 * Algumas funcoes nao foram utilizadas mas encontra-se presentes, isto deve-se em parte
 * as varias altercoes pretendidas pela empresa quiterios. Como funcionalidades que eram retiradas
 * eram posteriormente acrescentadas resolvi chegar a um pouco em que as deixava presentes de forma
 * a poderem ser novamente utilizadas.
 * 
 * 
 */

document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;
//=======================================
//Vectores para a o menu do orcamento 
//=======================================
var newArrayPos        = new Array(255);
var newEntradaPos      = new Array(255);
var newSaidaPos        = new Array(255);
var newBarramentoPos   = new Array(255);

var array         	   =  new Array(255);
var arrayRef     	   =  new Array(255);
//Global id associado a largura
var larguraPos     	   =  new Array(255); 
//Global id associado a altura
var alturaPos      	   =  new Array(255); 

//=======================================
//Vectores para cada caixa
//=======================================
//Global id associado ao nome (vector caixa entrada) e area
var entradaPos      =  new Array(255);
var entradaArea     =  new Array(255);
var entradaIntens   = new Array(255);
//Global id associado ao nome (vector caixa saida) e area
var saidaPos       =  new Array(255); 
var saidaArea      =  new Array(255); 
var saidaIntens    =  new Array(255); 

//Global id associado ao nome (vector caixa barramento) e area
var barramentoPos    =  new Array(255); 
var barramentoArea   =  new Array(255);  
var barramentoIntens =  new Array(255);  
//Global id associado ao nome (vector caixa extra) e area
var extraPos         =  new Array(255); 
var extraArea        =  new Array(255); 

//Escala das imagens
var scale 				  = 5;
//Quando acionado nao permite que se possa mover o objecto
var DontMove = false; 
//=======================================
//=======================================	


var Global			 = 2;
//Area Total adicionada
var areaTotal      = 0;
//largura caixa de Entrada
var largEntrada    = 0; 
//largura caixa de Saida
var largSaida      = 0;
//Numero de caixas de Entrada
var nEntrada       = 0;
//largura barramento
var largBarramento = 0; 
//Numero de caixas de saida
var nSaida         = 0;
//Numero de caixas de barramento
var nBarramento    = 0; 
//area da caixa de entrada
var areaEntrada    = 0; 
//intensidade das caixas de saida
var intensidadeSaida        = 0; 
//intensidade do barramento
var intensidadeBarramento   = 0; 
//intensidade das caixas de entrada
var intensidadeEntrada      = 0; 

var dist			= parseInt(10);
var dragObject  	= null;
var mouseOffset 	= null;

verifyPos		= new Array(4);
verifyPos[0]= false ;
verifyPos[1]= false ;
verifyPos[2]= false ;
verifyPos[3]= false ;

//Menu onde se enconta 
var firstMenu   = 0;
var secondMenu  = 0;
var thirdMenu   = 0;
var fourMenu 	= 0;

//Menu com os dados inseridos
var projectName 	   ="";
var finalclient    	   = "";
var telephone      = "";
var email   	   = "";
var distribution   = "";
var alt 		   = "";
var larg 	       = "";
var larguraSaida 	 = "";
var largBarramento = "";
var inten  	       = "";
var mx   	       = "";
//var mesureid       = document.getElementById("medidas").innerHTML;
var larguraSaida   = "";
/**
*Inicializar variaveis
*/
function initVars(){
	
	projectName    = getCookie("projectName");
    finalclient    = getCookie("finalclient");
	telephone      = getCookie("telephone");
	email   	   = getCookie("email");
	distribution   = getCookie("distribution");
	
	alt 		       = getCookie("altura");
	larg 	       = getCookie("largura");
    larguraSaida 	 = getCookie("larguraSaida");
	largBarramento = getCookie("largBarramento");
	inten  	       = getCookie("intensidade"); 
	mx   	       = getCookie("mx");
	larguraSaida   = getCookie("larguraSaida");
	
	for(var i=0;i<=255;i++){
		entradaPos[i]  		="";   
		entradaArea[i]	  	=""; 
		entradaIntens[i] 	="";   
		saidaPos[i]    	 	="";
		saidaArea[i]     	="";
		saidaIntens[i]   	="";
		barramentoPos[i] 	="";  
		barramentoArea[i]  	="";
		barramentoIntens[i]	=""; 
   		extraPos[i]     	="";       
   		extraArea[i] 	    ="";     
	}
	
	//virifica help para se poder incializar escala	
	
	var help	 = getCookie("help");
		if(help == "1")
			scale = 5;
		else if( help == "2")
			scale = 5;
}
/**
*Obeter o cookie pelo nome
*/
function Cookie( name ) {

	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;

	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}

	if ( start == -1 )
		return null;
	var end = document.cookie.indexOf( ';', len );
	
	if ( end == -1 ) 
		end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );	
	}

/**
*Funcao para realizar snap de imagens
*@param x coordenada x da imagem actual (drag)
*@param y coordenada y da imagem actual (drag)
*/
function snap( x,y ,actName,diametroX,diametroY){

	
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false;
	var x_ = null;
	var y_ = null;
	
	//Para todos os elementos do lado direito
	for( aux in array){
				
		
		aux  = array[aux];

		if(aux != actName ){
		
			cookie_valueX    = getCookie(aux + "x"); //Valor x referencia contido no cookie
			var largura_X_total = parseInt(getCookie("largura"+aux )); //Valor x referencia contido no cookie
			var largura_Y_total = parseInt(getCookie("altura"+aux )) ; //Valor x referencia contido no cookie
		    var larguraX	    = largura_X_total  ;                //metade do valor x
			var alturaY	        = largura_Y_total  ;                //metade do valor y
		
			cookieX1		= parseInt(cookie_valueX )  - dist ;//A imagem tem 75 raio + dist
			cookieX2		= parseInt(cookie_valueX ) + parseInt(larguraX) + dist ;//A imagem tem 75 raio + dist
			cookieX1Half	= parseInt(cookie_valueX ) + dist ;//A imagem sem bordo + dist
			cookieX2Half	= parseInt(cookie_valueX ) + parseInt(larguraX) - dist ;//A imagem sem bordo menos dist
 			
			actX1			= parseInt(x)  + parseInt(diametroX);//Coordenada x da imagem actual(drag) + raio x dela
			actX2			= parseInt(x) ;//Coordenada x da imagem actual(drag)+ raio x dela
			//==========================================+
			//Para a coordenada Y variaveis
			//==========================================+
			cookie_valueY    = getCookie(aux + "y");//Valor y contido no cookie
			cookieY1		= parseInt(cookie_valueY )  - dist ;//A imagem tem 75 raio + dist
			cookieY2		= parseInt(cookie_valueY ) + parseInt(alturaY) + dist ;//A imagem tem 75 raio + dist 
			cookieY1Half	= parseInt(cookie_valueY ) + dist ;//A imagem sem bordo mais  dist
			cookieY2Half	= parseInt(cookie_valueY ) + parseInt(alturaY) - dist ;//A imagem sem bordo menos dist
	

			actY1			= parseInt(y)  + parseInt(diametroY);//Coordenada y da imagem actual(drag) + raio y dela
			actY2			= parseInt(y)  ;//Coordenada Y da imagem actual (drag) + raio y dela
		
		
		//==========================================+
		//Calculo do novo x --> x_
		//==========================================+
	if( (cookieX1< actX1  && cookieX2> actX1) && actY1 > cookieY1Half  && actY2 < cookieY2Half ){
		x_ = parseInt(cookie_valueX )  - parseInt(diametroX)   ; // 150 somatorio do raio das 2 imagens
		
		}
	else if( cookieX1< actX2  && cookieX2> actX2  && actY1 > cookieY1Half  && actY2 < cookieY2Half  )
		x_ = parseInt(cookie_valueX ) + parseInt(larguraX) ; // 150 somatorio do raio das 2 imagens

		//==========================================+
		//Para a coordenada Y
		//==========================================+

	if( (cookieY1< actY1  && cookieY2> actY1) && actX1 > cookieX1Half  && actX2 < cookieX2Half ){
		y_ = parseInt(cookie_valueY )  - parseInt(diametroY) - 1 ; // 150 somatorio do raio das 2 imagens
		
		}

	if( cookieY1< actY2  && cookieY2> actY2  && actX1 > cookieX1Half   && actX2 < cookieX2Half)
		y_ = parseInt(cookie_valueY ) +  parseInt(alturaY) - 1  ;// 150 somatorio do raio das 2 imagens
		
		}
	}	
		
	
	//==========================================+
	//Retornar variaveis
	//==========================================+
	if( x_ == null && y_ == null)	{
		return{x:x,y:y};
		
		}
	else if(x_== null )
		return{x:x,y:y_+1};
	else if(y_ == null)
		return{x:x_,y:y};
	else
		return{x:x_,y:y_ + 1};
	
	
}				

//========================================+
//========================================+
//========================================+

/**
*Fica com as coordenadas do rato e coloca imagem no lugar
*se foi seleccionada alguma
*/
function mouseMove(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);

	if(dragObject){//Verifica se existe algum objecto selecionado
		try{
			dragObject.style.position = 'absolute';
			dragObject.style.top      = mousePos.y - mouseOffset.y;
			dragObject.style.left     = mousePos.x - mouseOffset.x;
			}
		catch	(err){}
		return false;
	}
}
/**
*Liberta o objecto rato
*/
function mouseUp(){
	
	var bool_ = "false";
	
	try{ 
		var raioX  = dragObject.width / 2 ;
		var raioY  = dragObject.height / 2;
		xCoord =  parseInt(dragObject.style.left);
		yCoord =  parseInt(dragObject.style.top);
		new_ = snap(xCoord,yCoord,dragObject.id,dragObject.width,dragObject.height);

		dragObject.style.top      = new_.y ;
		dragObject.style.left     = new_.x ;
		xCoord =  parseInt(dragObject.style.left);
		yCoord =  parseInt(dragObject.style.top);
		
		document.cookie =  dragObject.id +"x" + "=" + xCoord;
		document.cookie =  dragObject.id +"y" + "=" + yCoord;
		
		
		
		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		//Verificar se esta dentro da caixa(1 de toteranca)
		width_max  = parseInt(getCookie("width_max")) + parseInt(30) +  2 ;
		height_max = parseInt(getCookie("height_max"))+ parseInt(155) + 2 ;
		
		//Tanto no y_max_image como no x_max_image tem 5 px de tolerancia
		y_max_image = parseInt(dragObject.style.top)+ (parseInt(dragObject.height ) ) ;
		x_max_image = parseInt(dragObject.style.left)+ (parseInt(dragObject.width) )  ;
		
		//356
		
		pos_ = dragObject.id;
		//5 px de tolerancia em cada um(150=>155 e 25=>30)
		if( parseInt(dragObject.style.top) >= 155 && y_max_image <= height_max &&
				parseInt(dragObject.style.left) >= 30 && x_max_image <= width_max	)
			parent.left.document.getElementById("check_br"+dragObject.id).value ="true";
			
		else
			parent.left.document.getElementById("check_br"+dragObject.id).value ="false";
		
		
	
		dragObject = null;
	}
	catch(err){

	}
	
}
/**
*Coordenadas do rato
*
*/
function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

/**
*Posicao relativo ao documento
*/
function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}
/**
*retorna que posicao da imagem foi clicada
*
*/
function getMouseOffset(target, ev){
	if(!DontMove){
	ev = ev || window.event;//Verifica se e explorer ou firefox

	var docPos    = getPosition(target);//Posicao relativo ao documento
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
	}
}

/**
*Torna o item draggable
*
*/
function makeDraggable(item){

		if(!item) return;//NÃ£o e nenhum item
	// Se tivermos sobre o item e carregarmos onmousedown
		item.onmousedown = function(ev){ 
			dragObject  = this;
			mouseOffset = getMouseOffset(this, ev);
			return false;
		
	}
}

/******************************************************************
*
* 		Funcoes restantes para os calculoes
*
*******************************************************************/

/**
*Apagar os cookies fazendos expirar
*
*/
function deleteCookies(){
	
	var d = new Date();

	for (var i = 0 ; i<= 200  ; i++ )
	{	
		var nameX = i + "x";
		var nameY = i + "y";
		var name1 = "s1_|" + i ;
		var name2 = "s2_|" + i ;
		var name3 = "s3_|" + i ;
		var name4 = "s4_|" + i ;
		document.cookie = nameX+"=1;expires=" + d.toGMTString() + ";" + ";";
		document.cookie = nameY+"=1;expires=" + d.toGMTString() + ";" + ";";
		document.cookie = name1+"=1;expires=" + d.toGMTString() + ";" + ";";
		document.cookie = name2+"=1;expires=" + d.toGMTString() + ";" + ";";
		document.cookie = name3+"=1;expires=" + d.toGMTString() + ";" + ";";
		document.cookie = name4+"=1;expires=" + d.toGMTString() + ";" + ";";
	}	
}


/**
*Acrescenta imagem na outra folha
*e apagar na folha actual
*@param string name_ nome do elemento select
*@param string nome nameDiv do div a inserir
*/
function show(name_,nameDiv){ 
	
	var strHTML = parent.right.document.getElementById("image").innerHTML;	
	var str  = parent.left.document.getElementById(name_).options[parent.left.document.getElementById(name_).selectedIndex].value.split("Area");
	var nome 	 		 = str[0];
	var area 	 		 = str[1].split("Largura")[0];
	str 			 		 = str[1].split("Largura");
	var largura	 		 = str[1].split("Altura")[0];
	str          		 = str[1].split("Altura")[1]; 
	var altura	 		= str.split("Intensidade")[0];
	str            	 	= str.split("Intensidade")[1];
	var intensidade    	= str.split("reftipo")[0];
	var reftipo         = str.split("reftipo")[1];
	
	var arrayBoxes  = saveBoxes();
	
	//Coloca os valores pares
	//importante para no snap quando se dividir para se obter o centro 
	//nao se ter "meio pixel"
	//Exemplo : se imagem tem 31 pixeis, da 15,5 pixeis para cada lado a contar do centro
	var width_image = parseInt(largura/scale);
	var height_image = parseInt(altura/scale);
	
	//Coloca os valores pares
	//importante para no snap quando se dividir para se obter o centro 
	//nao se ter "meio pixel"
	//Exemplo : se imagem tem 31 pixeis, da 15,5 pixeis para cada lado a contar do centro
	
	//if( height_image % 2 != 0) height_image --;
	//else height_image = height_image -2;
	//if( width_image % 2 != 0) width_image -- ;
	//else width_image= width_image -2;
	
	//Adicionar imagem ao lado direito do ecra
	strHTML    += '<img style=\"float:top;\"name="prairiedog" id='+Global+'  src= "imagens/'+nome+'.bmp" width="'+parseInt(width_image)+'" height="'+parseInt(height_image)+'" alt="" onmouseover="count(this)" onload="makeDraggable(this);">';
	parent.right.document.getElementById("image").innerHTML = strHTML;
	//Se for caixa de saida ou barramento adiciona respectiva largura ao vector
	addWidth(nameDiv, largura,intensidade); 
	//Adicionar imagem radio button ao lado esquerdo do ecra
	var charDiv = " ";
	charDiv  +='<div id="check_div'+Global+'" class="subItem"><input type="checkbox" name="'+area+'" id="check'+Global+'" value="'+Global+'" >'+parent.left.document.getElementById(name_).options[parent.left.document.getElementById(name_).selectedIndex].innerHTML+'</div><div id="check_br'+Global+'" ></div>  ';
	parent.left.document.getElementById(nameDiv).innerHTML +=  charDiv;
	
	updateBoxes(arrayBoxes,Global);
	
	
	//Adicionar cookies global e nome da imagem e unico na base de dados
	addName(nameDiv,nome,reftipo,area,intensidade);
	//Verifica referencia adicionada
	verifyRef(reftipo);	
	//Actualizar area total utilizada 
	area_ = parseInt( getCookie("area"));
	//Actualiza areatotal
	areaTotal = areaTotal + parseInt (area);
	
	//Adicionar altura e largura da imagem
  	larguraPos[Global] = largura ;
	alturaPos[Global]  = altura ;
	
	
	
	//Adiciona altura e largura a escala
	document.cookie = "largura"+Global+"="+ width_image;
	document.cookie = "altura"+Global +"="+ height_image ;
	
	//actualiza funcoes 
	stepFunctions(nameDiv,false);
	
	if(Global == 3)
		alert("As suas escolhas estão a ser adicionadas por baixo do esquema de desenho");
	

}	
/**
 * Funcao auxiliar para guardar estado das caixas
 * 
 * Esta funcao e utilizada para o guardar o estado sempre que se adiciona uma nova
 * caixa, uma vez que a identidade das caixas era perdida na funcao show
 */
function saveBoxes(){
	
	var arrayBoxes = new Array(255);
	for(i in array){
		div_id = array[i];
		arrayBoxes[div_id ] = parent.left.document.getElementById("check_br"+div_id).value; 
		
	}
	return arrayBoxes;
}
/**
 * Funcao auxiliar para recuperar estado das caixas
 * 
 * Esta funcao e utilizada para o recuperar o estado sempre que se adiciona uma nova
 * caixa, uma vez que a identidade das caixas era perdida na funcao show
 */
function updateBoxes(arrayBoxes,act_id){
	
	for(i in arrayBoxes){
		parent.left.document.getElementById("check_br"+i).value = arrayBoxes[i];
	}
	parent.left.document.getElementById("check_br"+act_id).value = "false";
}
/**
*Verifica a referencia adicionada verificando se 
*e necessario mostrar algum alert com alguma regra
*/
function verifyRef(reftipo){
	
	
    if( reftipo == 146451 || reftipo == 146452){
		alert("Foi selecionado um módulo para serviços comuns agrupados, devendo ter em conta os seguintes parâmetros");
		alert("1. Saber a quantidade de módulos necessários no quadro;");
		alert("2. Poderão ter necessidade de juntar uma caixa vazia (ref 00.052) para obter uniformidade no esquema do conjunto - quadro colunas / serviços comuns.");
			
	}
	if(reftipo == "00484")
		alert("Colocar a indicação dos sinalizadores junto à caixa de Corte Geral");
	
}	
/**
 *Adiciona o nome da imagem adicionada ao 
 *respectivo Global id
 *@param string nameDiv div onde se encontra
 *@param name string nome do componente
 *@param refTipo string referencia do elemento
 *@param area int area do elemento
 *@param intensidade int intensidade do elemento
  */
function addName(nameDiv,name,refTipo,area,intensidade){

   if(nameDiv == "s1_"){
	    entradaPos[Global]    = name;
	    entradaArea[Global]   = area;
	    entradaIntens[Global] = intensidade;
	    
	}
	else if(nameDiv == "s2_"){
	    saidaPos[Global]    = name;
	    saidaArea[Global]   = area;
	    saidaIntens[Global] = intensidade;
		
	}
	else if(nameDiv == "s3_"){
	    barramentoPos[Global]  = name;
	    barramentoArea[Global] = area;
	    barramentoIntens[Global] = intensidade;
	}
	else if(nameDiv == "s4_"){
	    extraPos[Global]  = name;
	    extraArea[Global] = area;

	}
	arrayRef[Global] = refTipo;

}
/**
*Faz reload ao div correspondente para actualizar componentes
*do lado esquerdo
*/
function divReload(step,div,id){
	
	
	GlobalStep = "";
	funCall(step,div,id);
	array[Global] 			  = Global;
    Global 				      = Global + 1 ;
	
}
/**
*Mostra div das escolhas
*/
function showDivMenu(divMenu){
	
	parent.left.document.getElementById(divMenu).style.display = "";
	
}
/**
*Actualiza a informacao no momento do primeiro click
*/
function count(object){
		
		object.onmouseover="";
		if( object.id > Global)
			Global = object.id;
		array[object.id] = object.id;
	
	}

/**
*Apagar imagem seleccionada
*pelo utilizador
*/
function deleteImage(nameDiv){
	
       	for(i in array ){
	
		try{
			if(document.getElementById("check"+i).checked==true){
			    parent.right.document.getElementById(i).style.display="none";//apagar imagem
				//Faz um update ao a largura
			   updateWidth(nameDiv,larguraPos[i]);
				 
				parent.left.document.getElementById("check"+i).disabled=true;//desactivar check
				parent.left.document.getElementById("check_br"+i).innerHTML ="";
				parent.left.document.getElementById("check_br"+i).style.display ="none";
				parent.left.document.getElementById("check_div"+i).innerHTML ="";
				parent.left.document.getElementById("check_div"+i).style.display ="none";
				
				
				deleteCookiesName("largura"+i);
				deleteCookiesName("altura"+i);
				deleteArray(i);//apagar do array left
				parent.right.deleteArray(i);//apagar do array direita
				//apagar cookier correspondente
				var nameX 	= i + "x";
				var nameY 	= i + "y";
				var largura = "largura"+ i ;
				var altura  = "altura" + i ; 
				var area	   = nameDiv +"|"+ i; 
			
				deleteNameArea(nameDiv,i); //Apagar posicao i com nome da imagem
				deleteCookiesName(nameX);	//Posicao 
				deleteCookiesName(nameY);	//Posicao 
				larguraPos[i] = "";
				alturaPos[i]  = "";
				arrayRef[i]   = "";
							
				stepFunctions(nameDiv,true);
			
			//reposicionar imagem depois de apagar alguma
			/*Por agora nao ocorreram erros de reposicionamento da imagem*/
			/*caso aconteca, deve-se posicionar aqui todas as imagens*/
			
			}
		}
		catch(err){
		
		}
	}
}
/**
*Apaga elemento e actualiza a area
*@param string nameDiv nome do elemento do div
*@param string pos posicao dos elementos
*/
function deleteNameArea(nameDiv,pos){
	
	
	//div s1_ caixa de entrada
	if(nameDiv == "s1_"){ 
		entradaPos[pos]  = "";
	   	areaTotal = areaTotal - entradaArea[pos] ;
	   	nEntrada--;
	   if(nEntrada > 0   ){
	   	entradaIntens[pos] = "";
	   	intensidadeEntrada = nexValue(1);
	    }	
	    else 
	    	intensidadeEntrada = 0;
	  
	   entradaIntens[pos] = "";
	   entradaArea[pos]   = ""  ; 
	}
	//div s2_ caixa de saida
	else if(nameDiv == "s2_"){
		saidaPos[pos]  = "";
	   areaTotal      = areaTotal - saidaArea[pos] ;
	   nSaida --;
	   /**
	   //Ficar com a intensidade maior das caixas de saida
	   if(nSaida > 0 && intensidadeSaida == saidaIntens[pos]  ){
	   	saidaIntens[pos] = "";
	   	intensidadeSaida = nexValue(1);
	    }
	    	
	    else 
	    	intensidadeSaida = 0;
	    **/
	    saidaArea[pos]   = ""
	    saidaIntens[pos] = "";
	}
	//div s3_ caixa de barramento
	else if(nameDiv == "s3_"){
	    barramentoPos[pos]  = "";
	    areaTotal 				= areaTotal - barramentoArea[pos] ;
	    nBarramento --;
	     //Ficar com a intensidade maior das caixas de entrada
	    if(nBarramento > 0  ){
			barramentoIntens[pos] 	= "";	    	
	    	intensidadeBarramento	=  nexValue(2);
		}	    
	    else 
	    	  intensidadeBarramento = 0;
	 
	    barramentoIntens[pos] = "";
	 
	}
	//Caixa de extra
	else if(nameDiv == "s4_"){
	 
	    extraPos[pos]  = "";
	    areaTotal = areaTotal - extraArea[pos] ;
	    extraArea[pos] = ""

	}
}
/**
*Proximo valor do vector com intensidade superior
*@param n se 1 saidas se 2 barramentoIntens
*/
function nexValue(n){

	var max = parseInt(0) ;
	//caixa de entrada 
	if(n == 1 ){
		for( i in entradaIntens )//percorre todas as caixas de saida
			if(entradaIntens[i] && entradaIntens[i] != ""){
				if(max < parseInt(entradaIntens[i])) {
					max = entradaIntens[i];
				}
			}
		}
	else{
		for( i in barramentoIntens )//percorre todos os barramento
			if(barramentoIntens[i] && barramentoIntens[i] != ""){
				if(max < parseInt(barramentoIntens[i]))
					max = barramentoIntens[i];
			}
		}
		
	return max;
} 
/**
*Apagar array com as imagens
*/
function deleteArray(i){

	var auxArray     			 =  new Array(255);
	var key;
	var val;
	
	for( key in array ){//Percorrer todas as imagens
		val    = array[key]; 
		if(val != i)
			auxArray[key] = array[key];
	}
	
	array  = auxArray; //Copiar vector
	   
}

/**
*Muda o passo onde se encontra actualmente o utilizador
*/
function changePic(imageName){
	
	var path = "./imagens/"+imageName+".jpg";
	parent.left.document.getElementById("change").src= path;
}


/**
*Funcao de controlo
*/
function controlFunction(step,div,id){
	
	var i 		= id - 1 ;
	var flag		= true; 
	
	for(var j = i; j >= 0; j--)
		if(!verifyPos[j]) 
			flag=false;
	
	if(flag)
		funCall(step,div,id);

}

/**
*Verifica qual o passo onde se encontra para 
*fazer um call as devidas funcoes com os devidos
*parametros
*@param nameDiv string verifica qual o div onde se encontra
*@param remove 	bool verifica se a operacao foi de apagar ou de acrescentar
*remove esta a false se for acrescentar e a true se for remover 
*/
function stepFunctions(nameDiv,remove){
	
	
	
	var selc_barramento= getCookie("barramento2");

	//Caixa de entrada 
	if(nameDiv == "s1_"){
		if(!remove){
			divReload("passo1","selectDiv1",1);
			firstMenu++;
			showDivMenu("drop2");
			}
		else{ //E para remover 
			if(firstMenu > 0)
				firstMenu--;
			GlobalStep = "";
			//hideDiv(firstMenu,1);
			funCall("passo1","selectDiv1",1);
		}
	}
	//Caixa de Saida
	else if(nameDiv == "s2_"){
		if(!remove){
			divReload("passo2","selectDiv2",2);
			secondMenu++;
			
			if(selc_barramento == "true")
				showDivMenu("drop3");
			}
		else{//E para remover
			if(secondMenu > 0)
				secondMenu--;
			GlobalStep = "";
			//hideDiv(secondMenu,2);
			funCall("passo2","selectDiv2",2);		
		}
	}
	//Caixa Barramento
	else if(nameDiv == "s3_"){
		if(!remove){
			divReload("passo3","selectDiv3",3);
			thirdMenu++;
			showDivMenu("drop4");
		}
		else{//E para remover 
			if(thirdMenu > 0)
				thirdMenu--;
			GlobalStep = "";
			//hideDiv(thirdMenu,3);
			funCall("passo3","selectDiv3",3);
		}
	}
	//Caixa extra
	else if(nameDiv == "s4_"){
		if(!remove){
			divReload("passo4","selectDiv4",4);
			fourMenu++;
			
		}
		else{
			if(fourMenu > 0)	
				fourMenu--;
			GlobalStep = "";
			//hideDiv(fourMenu,4);
			funCall("passo4","selectDiv4",4);
		}
	}
}
/**
*Esconde todos os elementos que estÃ£o em passos(niveis)
*a seguir
*/
function hideDiv(numberTypes,id){
	
	
	if( numberTypes == 0 ) {
		
		for(var i= id+1; i<= 4 ; i++){
			var str = "drop" + i;
			//Todas as definicoes a posterior 
			//devem ser apagadas
			//Apaga a definicao i 
			changeDefinitions(i);
		
			parent.left.document.getElementById(str).style.display="none";	  
		}
		deleteDiv(id);
	}
}

/**
*Apagar todos os elementos possiveis
*
*/
function deleteDiv(id){
	
	//Todas as definicoes a posterior 
	//devem ser apagadas
	
	
	for(id = id+1 ; id<=4 ;id++){
	    deleteConfiguration(id);
	    parent.left.document.getElementById("s"+id+"_").innerHTML = " ";
		
	}
}
	
/**
*Apagar configuracao
*/
function deleteConfiguration(nameDiv){
	
	//Area sem o cookie a ser apagado(actualizar area)

  for(var pos = 0; pos<= 255;pos++ ){
	
	if(nameDiv == 1 && entradaPos[pos] && entradaPos[pos] != "" ){
		entradaPos[pos]  = "";
	   arrayRef[pos]    = "";
	   	if(entradaArea[pos] && entradaArea[pos] != "" )
				areaTotal = areaTotal - entradaArea[pos] ;
	    entradaArea[pos] = "";
	    entradaIntens[pos] ="";
	    intensidadeEntrada = 0;
		largEntrada = 0;	
		nEntrada    = 0;
		elementPosDelete(pos);
		
	}
	else if(nameDiv == 2 && saidaPos[pos] && saidaPos[pos] != ""){
	    
	   saidaPos[pos]  = "";
	   arrayRef[pos]    = "";
		if(saidaArea[pos] && saidaArea[pos] != "" )
			areaTotal = areaTotal - saidaArea[pos] ;
	   saidaArea[pos]   =  "";
	   saidaIntens[pos] = "";
	   largSaida = 0;
      intensidadeSaida = 0;
      nSaida 				= 0;
	   elementPosDelete(pos);
	}
	else if(nameDiv == 3 && barramentoArea[pos] && barramentoArea[pos] != ""){
	    barramentoPos[pos]  = "";
	     arrayRef[pos]    = "";
	    if(barramentoArea[pos] && barramentoArea[pos] != "" )
			areaTotal = areaTotal - barramentoArea[pos] ;
	    barramentoArea[pos] = "";
	    barramentoIntens[pos] = "";
	    largBarramento      = 0 ;
	    intensidadeBarramento      = 0 ;
	    nBarramento 					 = 0;
	    elementPosDelete(pos);
	    
	 
	}
	else if(nameDiv == 4 && extraPos[pos] && extraPos[pos] != ""  ){
	 
	    extraPos[pos]  = "";
	     arrayRef[pos]    = "";
	    if(extraArea[pos] && extraArea[pos] != "" )
			areaTotal = areaTotal - extraArea[pos] ;
	    extraArea[pos] = "";
	    elementPosDelete(pos);

	}
}

/**
*apagar o elemento de uma determinada posicao
*/
function elementPosDelete(pos){
	
	 larguraPos[pos] = "";
	 arrayRef[pos]    = "";
	 alturaPos[pos]  = "";
	 try{
	     parent.right.document.getElementById(pos).style.display="none";//apagar imagem
	 }
	 catch(err){}
	 deleteArray(pos);//apagar do array left
	 parent.right.deleteArray(pos);
	 deleteCookiesName(pos+ "x");
	 deleteCookiesName(pos+ "y");
	 deleteCookiesName("largura"+i);
	 deleteCookiesName("altura"+i);
	 
    }

}
/**
*Apagar um determinado cookie
*/
function deleteCookiesName(name_){
	
	var d = new Date();
	document.cookie = name_ +"=1;expires=" + d.toGMTString() + ";" + ";";

}	
	
/**
*Colocar as definicoes a zero
*Esta funcao e utilizada quando o utilizador
*passa de um menu para outro e todas as definicoes 
*posteriores tem de ser apagadas
*@param int i apagar elementos i 
*/
function changeDefinitions(i){
	
	if( i== 1){
		firstMenu = 0 ;
	}
	else if(i == 2 )
		secondMenu = 0;
	else if( i == 3)
		thirdMenu  = 0;
	else if(i== 4)
		fourMenu = 0;
	
}



/**
*Se for caixa de saida ou barramento adiciona respectiva largura ao cookie
*/
function addWidth(nameDiv, width,intensidade){
	
		if(nameDiv == "s1_"){
			
			largEntrada        = largEntrada + parseInt (width)  ; //largura caixa de Entrada
			nEntrada++;
			if(intensidadeEntrada < parseInt (intensidade))
				intensidadeEntrada        =  parseInt (intensidade); //largura caixa de Entrada
			
				
		}
		else if (nameDiv == "s2_"){
		
			largSaida = largSaida + parseInt (width)  ; //largura barramento
			nSaida++;
		}
		else if(nameDiv == "s3_"){

			if(intensidadeBarramento < parseInt (intensidade) )
				intensidadeBarramento =  parseInt (intensidade) ; 
		}
	
} 

/**
*Faz um update a largura contida nos cookies dos elementos que
*sao apagados
*Estes elementos podem ser caixas de saida ou caixas de entrada
*@param nameDiv string no do div onde se vai apagar elemento
*permitindo destinguir entre caixas de saida e caixas de entrada :
*s2_ --> caixa de saida
*s3_ --> caixa de barramento
*@param width interger largura do elemento que foi apagado 
*/
function updateWidth(nameDiv,width){
		
		if(nameDiv == "s2_"){
			
			largSaida    	 = largSaida  - parseInt (width);
			
		}
		else if (nameDiv == "s1_"){
		
			largEntrada = largEntrada - parseInt (width)  ; //largura barramento
		}
}


/**
*Esta funcao vai permitir emitir a factura
*Quando chamada vai verificar se todos os passos
*foram compridos, e se ja e possivel emitir a factura
*/
function invoiceissue(){

	//alert("1");
    continueIss  = true ;
	if(!groupBoxes()){
		alert("Todas as caixas devem estar agrupadas no rectângulo antes de continuar");
		return;
	}
	//alert("2");
	var selc_barramento= getCookie("barramento2");
	//alert("3");
	if(selc_barramento=="false" && (!calcSelection(entradaPos) || !calcSelection(saidaPos))) {
		alert("Tem de preencher todos passos obrigatórios(Corte-Geral, Protecção Saídas  e Barramentos)");
		return;
	}
	else if(selc_barramento=="false"){
		if(! oneBoxe() ){
			alert("Só pode optar por uma caixa de corte geral e um caixa de saída");
			return;
		}
		else if(largEntrada == largSaida){
			globalVars();
			return;
		}
		else{
			alert("A largura da caixa de corte geral tem de ser igual à largura da caixa de saída");
			return;
			
		}
	}
		
		//Verifica todos os dados preenchidos
	if( !calcSelection(entradaPos) || !calcSelection(saidaPos) || !calcSelection(barramentoPos) )
			alert("Tem de preencher todos passos obrigatórios(Corte-Geral, Protecção Saídas  e Barramentos)");
		//Verifica se largura barramento e superior ao de saida 
	/*else if( largBarramento < largSaida ){
			alert("A largura do Barramento tem de ser superior ou igual à largura das caixas de saida");
			alert("Largura das Caixas de Barramento = "+largBarramento + "mm\n Largura das Caixas de Saida= "+largSaida+"mm");
		}*/
		//Verifica intensidade
	else if( intensidadeBarramento < intensidadeEntrada)
			alert("A intensidade do corte geral é diferente da intensidade do barramento");
	else {//Tudo correcto
		
		if( intensidadeBarramento > intensidadeEntrada){
			if(confirm("A intensidade do barramento é diferente da intensidade do corte geral?") )
				continueIss  = true ;
			else
				continueIss  = false;
				
			
			}
		  if( continueIss ){
			if(confirm("Todas as caixas estão dentro do rectângulo?") )
				continueIss  = true ;
			else
				continueIss  = false;

			if( continueIss )
				globalVars();
						
		       }	
		}
}


/**
 * Verifica se tem apenas uma caixa para saida e
 * caixa de corte geral
 */
function oneBoxe(){
	
	var nEntrada       = calcSelection(entradaPos); 
	var nSaida         =  calcSelection(saidaPos);

	if(nEntrada != 1 || nSaida != 1 )
		return false;
	return true;
	
}
/**
 * verifica se todas as caixas estao agrupadas
 */
function groupBoxes(){
	//Tem algures um bug no IE6, no IE6+ funciona na perfeicao
	/*for(i in array){
		div_id = array[i];
		if(parent.left.document.getElementById("check_br"+div_id).value == "false" || parent.left.document.getElementById("check_br"+div_id).value ==""){
			return false;
		}
	}*/
	return true;
}
/**
 * Passa as variaveis para o o menu de orcamento
 */
function globalVars(){
	
	
	parent.right.array            = array; 
	parent.right.entradaPos        = entradaPos;
	parent.right.saidaPos       	= saidaPos;
	parent.right.barramentoPos   	= barramentoPos;
	parent.right.extraPos        	= extraPos;
	parent.right.largSaida   	   = largSaida;
	parent.right.largBarramento    = largBarramento;
	parent.right.projectName      = projectName;
	parent.right.finalclient      = finalclient;
	parent.right.telephone        = telephone;
	parent.right.email            = email;
	parent.right.distribution = distribution;
	parent.right.alt          = alt;
	parent.right.larg         = larg;
	parent.right.larguraSaida = larguraSaida;
	parent.right.largBarramento = largBarramento;
	parent.right.inten          = inten;
	parent.right.distribution   = distribution;
	parent.right.mx             = mx;
	
	parent.right.larguraSaida   = larguraSaida;

	parent.right.DontMove       = true ;
	//some_new_window.frame1.document.close();

	parent.left.location.href="./orcamento/index.php";

}
/**
*Conversao das variaveis
*/
function convertVector(){
	
	var imgArray      =  new Array(255);

	for( i in array  ){
	
		if( entradaPos[i] && entradaPos[i] != "" )
			imgArray[i] =  i  + "-" +   entradaPos[i]
		else if(saidaPos[i] && saidaPos[i] != "" )
			imgArray[i] =  i  + "-" + saidaPos[i];
		else if(barramentoPos[i] && barramentoPos[i] != "" )
			imgArray[i] =  i  + "-"  +barramentoPos[i]; 
		else if(extraPos[i] && extraPos[i] != "" )
			imgArray[i] =  i + "-" +extraPos[i]; 
	}
	return imgArray;
}





/******************************************************************************
*											Emitir factura 
*******************************************************************************/

function printImag(){
	
	//Obter elementos
	array          =    parent.right.array           ; 
	entradaPos     =	parent.right.entradaPos ;
	saidaPos       = 	parent.right.saidaPos     ;
   	barramentoPos  =	parent.right.barramentoPos  ;
	extraPos       =	parent.right.extraPos       ;
   	larguraSaida   =	parent.right.larguraSaida  ;
   	largBarramento =	parent.right.largBarramento ;
    projectName    =    parent.right.projectName    ;
	
	finalclient  = parent.right.finalclient  ;
	telephone    = parent.right.telephone      ;
	email        = parent.right.email     ;
	distribution = parent.right.distribution;
	alt           = parent.right.alt      ;
	larg         = parent.right.larg ;
	larguraSaida = parent.right.larguraSaida  ;
	largBarramento = parent.right.largBarramento ;
	inten         = parent.right.inten   ;
	distribution  = parent.right.distribution  ;
	mx            = parent.right.mx   ;
	larguraSaida   = parent.right.larguraSaida    ;
	
	
	flag = 0;
	imgArray        = getCookie("imgArray"); 
	printMeasures(); //Imprime as medidas colocadas pelo utilizador no orcamento
	printSelection();//Imprime medidas selecionadas pelo utilizador na compra dos quadros de coluna
	printPrice();//Imprime preco dos componentes selecionados
	 
}

/**
*Posicionar imagem
*Nao funca :-(
*/
function positionImg(newArrayPos){

	for(var i in newArrayPos  ){
		
		if(newArrayPos[i] && newArrayPos[i] != "" && newArrayPos[i] != ","){ 		
		
			var aux = newArrayPos[i];
		
			object     = document.getElementById(aux);
			x 		   = getCookie(aux+"x");
			y		   = getCookie(aux+"y");
		
			
			object.style.position = 'absolute';
			object.style.top      = y; 
		    object.style.left     = x;
		   
		}
		
	}
}

/**
*Mostrar medidas inseridas pelo utilizador
*/
function printMeasures(){

	//var projectName    = getCookie("projectName");
	/*var finalclient    = getCookie("finalclient");
	var telephone      = getCookie("telephone");
	var email   	   = getCookie("email");
	var distribution   = getCookie("distribution");
	
	var alt 		       = getCookie("altura");
	var larg 	       = getCookie("largura");
    var larguraSaida 	 = getCookie("larguraSaida");
	var largBarramento = getCookie("largBarramento");
	var inten  	       = getCookie("intensidade"); 
	var mx   	       = getCookie("mx");*/
	var mesureid       = document.getElementById("medidas").innerHTML;
	//var larguraSaida   = getCookie("larguraSaida");

	//document.cookie =  "larguraSaida"+ "="+largSaida       //largura caixa de Saida
		//	document.cookie =  "largBarramento"+ "="+largBarramento
	mesureid      = "<hr><br><font>Dados Introduzidos</font><br><br><table  width=100% >";
	//if(projectName)
		mesureid +="<tr><td>Nome do Projecto</td><td align=right>"+projectName+"</td></tr>" 
	//if(finalclient)
		mesureid +="<tr><td>Empresa(Cliente Final)</td><td align=right>"+finalclient+"</td></tr>" 
	//if(distribution)
		mesureid +="<tr><td>Distribuidor Quitérios</td><td align=right>"+distribution+"</td></tr>" 
	//if(telephone)
		mesureid +="<tr><td>Telefone</td><td align=right>"+telephone+"</td></tr>" 
	//if(email)
		mesureid +="<tr><td>E-mail</td><td align=right>"+email+"</td></tr>" 
	
	//if(alt)
		mesureid +="<tr><td>Altura Disponível</td><td align=right>"+alt+" 	mm</td></tr>" 

	//if(larg)	
		mesureid +="<tr><td>Largura Disponível</td><td align=right>"+larg+" 	mm</td></tr>" 
	//if(inten)	
		mesureid +="<tr><td>Intensidade de Corte Geral (principal)</td><td align=right>"+inten+" A</td></tr>"
	
	//if(mx == 0)	
		//mesureid +="<tr><td>Corte MX</td><td align=right>N&atilde;o</td></tr>"
	//if(mx == 1)	
		//mesureid +="<tr><td>Corte MX</td><td align=right>Sim</td></tr>"
	mesureid      += "</table>";
	

	document.getElementById("medidas").innerHTML = mesureid;
	
}


/**
*Imprime Selecao do utilizador
* 
* nota: Esta funcao foi retirada por ordem do cliente
* por isso encontra-se comentada. Para voltar a funcionar
* basta descomentar
*/
function printSelection(){
	
	//calcula caixas para cada seleccao	
	//
	var nEntrada       = calcSelection(entradaPos); 
	var nSaida         =  calcSelection(saidaPos);
	var nBarramento    =  calcSelection(barramentoPos);
	var nExtra         =  calcSelection(extraPos);
	
	/** 
	//Zone comentada
	
	var mesureid  = document.getElementById("medidas").innerHTML;
	mesureid     += "<hr><br><font>Elementos Selecionados</font><br><br><table  width=100% >";
	mesureid     +="<tr><td>Caixas de Entrada</td><td align=right>"+nEntrada+" </td></tr>";
	mesureid     +="<tr><td>Caixas de Saida</td><td align=right>"+nSaida+" </td></tr>";
	mesureid     +="<tr><td>Caixas de Barramento</td><td align=right>"+nBarramento+" </td></tr>";
	mesureid     +="<tr><td>Caixas Extras</td><td align=right>"+nExtra+" </td></tr>";
	mesureid     += "</table><br>";
	document.getElementById("medidas").innerHTML = mesureid;
	**/
}
/**
*Calcular numero de caixas para cada 
*elemento selecionadas
*/
function calcSelection(arraySelect){
	
	var n = 0;
	
	for( i in arraySelect ){
		if(arraySelect[i] && arraySelect[i]!= "")
			n++;	
	}
	
	return n;
	
}
/**
*Faz um print do preco de todos os elemtentos
*/
function printPrice(){
	str = "";
	var mesureid  = document.getElementById("caixaEntrada1").innerHTML;
	mesureid     += "<hr><br><font>Quadro colunas constituído por:</font><br><br><table  width=100% >";
	document.getElementById("caixaEntrada1").innerHTML = mesureid;
   
   str += printPriceProduct(entradaPos,1,"caixaEntrada2");
   str += printPriceProduct(saidaPos,2,"caixaEntrada2");
   str += printPriceProduct(barramentoPos,3,"caixaEntrada2");
   str += printPriceProduct(extraPos,4,"caixaEntrada2");
   ajaxShowPrice(str,"caixaEntrada2");
   document.getElementById("caixaEntrada3").innerHTML = "</table>" ;
 	
	
	
}

/**
*Mostrar e calcular preco de um determinado produto
*/
function printPriceProduct(arrayProduct,id,idDiv){
	
	var str = "";
	var h = 0;
	var control = false;
	str += "-id="+id+"-";

	for( i in arrayProduct ){
		if(arrayProduct[i] && arrayProduct[i]!= ""){
			if( h==0)
				str += arrayProduct[i]
			else
				str += "-"+arrayProduct[i]
				h++;
			}	
	}
	return str;
}



/**
*Mostra funcoes para print 
*/
function printfact()
{
	
	parent["left"].focus();
	parent["left"].print();
}

function printesq()
{
	parent.right.focus();
	parent.right.print();
}


/***************************************************************************/
/***************************************************************************/
/***************************************************************************/



///other functions

//choise os size on begin
function verify_size(){
	
	EraseAllCookies();
	
	if(document.getElementById("com_restricao").checked)
		show_size();
	else
		hidden_size();
}
function hidden_size(){
	
	 document.getElementById("choise_size").style.display ="none";
	 document.getElementById("choise_size2").style.display ="none";
}

function show_size(){
		document.getElementById("choise_size").style.display ="";
		document.getElementById("choise_size2").style.display ="";
	}
	
	function back(){
	
	parent.frames.location.href="./index.php" ;
}
function back_begin(){
	
	parent.frames.location.href="../index.php" ;
}
function changeCursor(type){
	
    if( type == 1)
		document.body.style.cursor = 'pointer';
    else
		document.body.style.cursor = 'default';
}


 function EraseAllCookies(){
	 var c=document.cookie.split(";");
	 for(var i=0;i<c.length;i++){
		var e=c[i].indexOf("=");
		var n=e>-1?c[i].substr(0,e):c[i];
		document.cookie=n+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
		}
	}
