// JavaScript Document

var sumAjax = 0;
var sum = 0;

function checkSum(frm){
	if(sumAjax == 0 && sum == 0)
		frm.submit();
	else
		return false;
}

// AJAX
var odp;

var ObiektXMLHttp = false;

// typ walidacji
function getMatch(id)
{
  //tablica dla match'ów
  var tab = new Array;
  tab[0] = /^[a-zA-Z0-9\_]{6,25}$/;
  tab[1] = /^[a-zA-ZąćęłńóśżźĄĆĘŁŃÓŚŻŹ\-\ \"\']{2,40}$/;
  tab[2] = /^[0-9]{2}(\-)[0-9]{2}(\-)[0-9]{4}$/;
  tab[3] = /^[0-9\-]{2,3}[0-9]{3}$/;
  tab[4] = /^[0-9\-]{7,10}$/;
	tab[5] = /^[a-zA-Z0-9ąćęłńóśżźĄĆĘŁŃÓŚŻŹ\.]{1,30}@[a-zA-Z0-9ąćęłńóśżźĄĆĘŁŃÓŚŻŹ]+(\.[a-zA-Z0-9ąćęłńóśżźĄĆĘŁŃÓŚŻŹ]+)+$/;
  tab[6] = /^[a-zA-Z0-9ąćęłńóśżźĄĆĘŁŃÓŚŻŹ\/\\\ \.]{1,40}$/;
  tab[7] = /^[a-zA-Z0-9ąćęłńóśżźĄĆĘŁŃÓŚŻŹ]+\.(rtf)|(doc)|(pdf)|(txt)|(odt)$/;
  tab[8] = /^[a-zA-Z0-9ąćęłńóśżźĄĆĘŁŃÓŚŻŹ]+\.(jpg)|(gif)|(png)|(bmp)$/;
	tab[9] = /^[0-9\-]{10,13}$/;
	tab[10] = /^[a-zA-Z0-9\ ]{1,5}$/;
  return tab[id];
}

// komunikaty
function Alert(id){
  var tabAl = new Array;
  tabAl[0] = "Nieprawidłowy format";
  tabAl[1] = "Hasło nie pasują do siebie";
  tabAl[2] = "Taki użytkownik już istnieje";
  tabAl[3] = "E-mail taki już istnieje istnieje";
  tabAl[4] = "Wybierz plik z dysku";
  tabAl[5] = "Ten element musi być zaznaczony";
  tabAl[6] = "Wybierz jedną z wartości";
  tabAl[10] = "Nieprawidłowa wartość";
  tabAl[99] = "Błąd";
  
  return tabAl[id];
}


function valid(val, info)
{
  var frm = val;
	var ko = info;
	var vSP = new Array;
	var vJS = new Array;
	var vAX = new Array;
	var vTE = new Array;
	var vZA = new Array;
	var vKO = new Array;
	var vAN = new Array;
	var vOM = new Array;
	var vCL = new Array;
	
	
	var licz = 0;
	var liJS = 0;
	var liAX = 0;
	var liTE = 0;
	
	for(i=0; i<(frm.elements.length); i++)
	{
    // czy pole hidden jest wypełnioone
    if(frm.elements[i].type == "hidden" && frm.elements[i].value != '')
      return false;
    
    if(document.getElementById(frm.elements[i].id + '_kom'))
    {
      var ddiv = document.getElementById(frm.elements[i].id +'_kom');
          ddiv.removeAttribute("class");
          ddiv.style.display = "none";
          ddiv.innerHTML = '';
    }
      
		if(frm.elements[i].alt || (frm.elements[i].title && (frm.elements[i].nodeName == "SELECT" || frm.elements[i].nodeName == "TEXTAREA")))
		{
			this.alt 	= (frm.elements[i].nodeName != "SELECT") ? frm.elements[i].alt : frm.elements[i].title;
			this.war 	= frm.elements[i].value;
			this.id 	= frm.elements[i].id;
			this.nn 	= frm.elements[i].nodeName;
			this.typ 	= frm.elements[i].type;
			this.nm 	= frm.elements[i].name;
			
      // tabela [ 0-typ walidacji | 1-komunikat | 2-wartosc pola | 3-name pola | 4-id pola | 5-nodeName | 6-typ pola ]
			vSP[i] = alt.substring(1, alt.length-1).split("][");
			elms = ','+war+','+nm+','+id+','+nn+','+typ;
			
			
			// Walidacja zależna od stanu checkboxa
			vZA = vSP[i][2].split(",");
			if(vZA !='' && !vZA[1] && document.getElementById(vZA[0]).checked == false)
			  continue;
			if(vZA !='' && vZA[2] && document.getElementById(vZA[2]).checked == false)
			  continue;
				
				
			// WALIDACJA JS
			if(vSP[i][0] != '')
			{
				vJS[liJS] = (vSP[i][0] + elms).split(",");
				if(vJS[liJS][2].match(getMatch(vJS[liJS][0])) == null)
				{
					vKO[licz] = Alert(vJS[liJS][1])+','+vJS[liJS][4];
					licz++;
				}
				liJS++;
			}
			
			// WALIDACJA AJAX
			if(vSP[i][1] != '')
			{
      	vAX[liAX] = (vSP[i][1] + elms).split(",");
				liAX++;
			}
			
			
			// WALIDACJA PORÓWNANIE
			if(vSP[i][2] != '' && vZA[1])
			{
      	vTE[liTE] = (vZA[0] + ',' + vZA[1] + elms).split(",");
				if(vTE[liTE][2] != document.getElementById(vTE[liTE][0]).value)
				{
					vKO[licz] = Alert(vTE[liTE][1])+','+vTE[liTE][4];
					licz++;
				}
				liTE++;
			}
		}
    
    if(frm.elements[i].id.substr(0,8) == 'rejToken')
    {
			var idToken = frm.elements[i].id.substr(8,1);
      var dzial = document.getElementById('token' + idToken).innerHTML;
      var tabDzial = dzial.split(" ");
      switch(tabDzial[1])
      {
        case '+' : var wyn = tabDzial[0]*1 + tabDzial[2]*1; break;
        case '-' : var wyn = tabDzial[0]*1 - tabDzial[2]*1; break;
      }
      if(frm.elements[i].value != wyn)
      {
        vKO[licz] = Alert(10) + ',' + frm.elements[i].id;
        licz++;
      }
    }
	}

	if(vKO.length > 0 || liAX > 0)
	{
		if(liAX > 0)
		{
			sumAjax = 1;
			var xPOST = '';
			for(k=0; k<vAX.length; k++)
			{
				amp = (k == 0) ? '' : '&';
					
				xPOST += amp + 'xp'+k+'='+vAX[k][0]+'&xw'+k+'='+vAX[k][2];
			}
			
			if (window.XMLHttpRequest)
				ObiektXMLHttp = new XMLHttpRequest(); 
			else if (window.ActiveXObject)
				ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
			if(ObiektXMLHttp)
			{
				ObiektXMLHttp.open("POST", 'scripts/validator/valid.php', true);
				ObiektXMLHttp.onreadystatechange = function()
				{
					if (ObiektXMLHttp.readyState == 4)
					{
						if(ObiektXMLHttp.responseText)
						{
							var vAN = ObiektXMLHttp.responseText.split(',');
							for(k=vAN.length; k>-1; k--)
							{
								if(vAN[k] == 'false')
									vKO.unshift(Alert(vAX[k][1])+','+vAX[k][4]);
							}
              
							if(ko == 0)
							{ // wyśwetlanie komunikatów jako alert
								alert(vKO.join('\n\r'));
								if(vKO.length > 0)
									return false;
								else
									return true;
							}
							else if(ko == 1)
							{ // wyśwetlanie komunikatów jako dymek
								for(z=0; z<(vKO.length); z++)
								{
									vOM[z] = vKO[z].split(",");
									
									var firstEl = document.getElementById(vOM[z][1] + '_kom');
											firstEl.className = 'kom_1';
											firstEl.innerHTML = '<p>' + vOM[z][0] + '</p>';
											firstEl.style.display = "block";
								}
								if(vOM.length == 0 && vKO.length == 0){
									sumAjax = 0;
									return checkSum(frm);
								}else
									return false;
								
							}
						}
					}
				}
				ObiektXMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				ObiektXMLHttp.send(xPOST);
			}
		}
		
		
		
		else
		{
			if(ko == 0)
			{
				alert(vKO.join('\n\r'));
			}
			else if(ko == 1)
			{
				for(z=0; z<(vKO.length); z++)
				{
					vOM[z] = vKO[z].split(",");
					
					var firstEl = document.getElementById(vOM[z][1] + '_kom');
              firstEl.className = 'kom_1';
              firstEl.innerHTML = '<p>' + vOM[z][0] + '</p>';
              firstEl.style.display = "block";
				}
				
			}
			if(vOM.length == 0 && vKO.length == 0){
				sum = 0;
				return checkSum(frm);
			}else
				return false;
		}
	}
	if(checkSum(frm)==false)
		return false;
}
