String.prototype.reverse = function() {
  var s = this;
  var t = '';
  for (var i = s.length - 1; i >= 0; i--) {
    t += s.substr(i, 1);
  }
  return t;
}

var limity = new Array();
limity["field(R@VE_tresc_a)"] = 3000 ;
var imgExt = new Array("jpg", "jpeg");
var wideoExt = new Array("mpg", "wmv", "flv", "mp4", "avi", "mov");

function O(n) { return document.getElementById(n); }

function trim(x){return x.replace(/^\s+|\s+$/g,'');}

function hasClass(obj, clName) {
  var clN = ' ' + obj.className + ' ';
  return (clN.match(' ' + clName + ' ') != null);
}

function addClass(obj, clName) {
  if (hasClass(obj, clName)) return;
  obj.className = trim(obj.className + ' ' + clName);
}

function removeClass(obj, clName) {
  if (!hasClass(obj, clName)) return;
  var clN = ' ' + obj.className + ' ';
  eval("obj.className = trim(clN.replace(/ " + clName + " /g,' '));");
}

  var photos=new Array(0,0,0,0,0);
  
  function addPhotoSect(){
  	var maxIter=photos.length;
  	for(var i=0; i<maxIter; i++){
  		if(photos[i]) continue;
  		var sect=O('photoSect'+(i+1));
  		removeClass(sect,'hid');
  		var ctrl=O('zdjecie'+(i+1));
  		ctrl.disabled =  false ;
  		ctrl=O('opis'+(i+1));
  		ctrl.disabled =  false ;
  		photos[i]=1;
  		break;
  	}
  	formState();
  }

  
  function removePhotoSect(nr){
  	var sect=O('photoSect'+(nr));
  	addClass(sect,'hid');
  	var ctrl=O('zdjecie'+nr);
  	ctrl.disabled =  true ;
  	ctrl=O('opis'+nr);
  	ctrl.disabled =  true ;
  	photos[nr-1]=0;
  	formState();
  }
  
  function formState(){
  	var opened=0;
  	for(var i=0; i<photos.length; i++) opened+=photos[i];
  	var btn1=O('attachPhotos0');
  	var btn2=O('attachPhotos1');
  	var photoConf=O('photoConfDiv');
  	var photoConf_ctrl=O('photoConf');
  	switch(opened){
  		case 0:
  			addClass(btn2,'hid');
  			removeClass(btn1,'hid');
  			addClass(photoConf,'hid');
  			photoConf_ctrl.disabled = true ;
  		break;
  		case 5:
  			addClass(btn2,'hid');
  			addClass(btn1,'hid');
  			removeClass(photoConf,'hid');
  			photoConf_ctrl.disabled = false ;
  		break;
  		default:
  			removeClass(btn2,'hid');
  			addClass(btn1,'hid');
  			removeClass(photoConf,'hid');
  			photoConf_ctrl.disabled = false ;
  		break;
  	}
 }

function disablePhotoSect(){
  var maxIter=(photos.length>5?5:photos.length);
  for(var i=0; i<maxIter; i++){
    var ctrl=O('zdjecie'+(i+1));
    ctrl.disabled =  true ;
    ctrl=O('opis'+(i+1));
    ctrl.disabled =  true ;
    ctrl=O('photoConf');
    ctrl.disabled =  true ;
   }
}

  var videos=new Array(0,0);
  
  function addVideoSect(){
  	var maxIter=videos.length;
  	for(var i=0; i<maxIter; i++){
  		if(videos[i]) continue;
  		var sect=O('videoSect'+(i+1));
  		removeClass(sect,'hid');
  		var ctrl=O('wideo'+(i+1));
  		ctrl.disabled =  false ;
  		ctrl=O('opisWideo'+(i+1));
  		ctrl.disabled =  false ;
  		videos[i]=1;
  		break;
  	}
  	formStateVideo();
  }

  
  function removeVideoSect(nr){
  	var sect=O('videoSect'+(nr));
  	addClass(sect,'hid');
  	var ctrl=O('wideo'+nr);
  	ctrl.disabled =  true ;
  	ctrl=O('opisWideo'+nr);
  	ctrl.disabled =  true ;
  	videos[nr-1]=0;
  	formStateVideo();
  }

  function formStateVideo(){
  	var opened=0;
  	for(var i=0; i<videos.length; i++) opened+=videos[i];
  	var btn1=O('attachVideos0');
  	var btn2=O('attachVideos1');
 	
  	var videoConf=O('videoConfDiv');
  	var videoConf_ctrl=O('videoConf');
  	
  	switch(opened){
  		case 0:
  			addClass(btn2,'hid');
  			removeClass(btn1,'hid');
  			addClass(videoConf,'hid');
  			videoConf_ctrl.disabled = true ;			
  		break;
  		case 2:
  			addClass(btn2,'hid');
  			addClass(btn1,'hid');
  			removeClass(videoConf,'hid');
  			videoConf_ctrl.disabled = false ;
  		break;
  		default:
  			removeClass(btn2,'hid');
  			addClass(btn1,'hid');
  			removeClass(videoConf,'hid');
  			videoConf_ctrl.disabled = false ;
  		break;
  	}
 }

function disableVideoSect(){
  var maxIter=(videos.length>2?2:videos.length); 
  for(var i=0; i<maxIter; i++){
    var ctrl=O('wideo'+(i+1));
    ctrl.disabled =  true ;
    ctrl=O('opisWideo'+(i+1));
    ctrl.disabled =  true ;
    ctrl=O('videoConf');
    ctrl.disabled =  true ;
   }
 }  

//Podlaczenie zdarzenia przy ladowaniu strony
function addEvent(obj, type, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(type, fn, false);
  } else if (obj.attachEvent) {
    obj["e" + type + fn] = fn;
    obj[type + fn] = function() { obj["e" + type + fn] (window.event); }
    obj.attachEvent("on" + type, obj[type + fn]);
  }
}
  
//Ustawia focus na danym polu
function highlight(obj) {
obj.focus();
//sztuczka dla Firefoxa
focus_var = obj ;
setTimeout("focus_var.focus()",250); 
}

//Sprawdza czy wartosc w danym polu jest poprawna liczba
function checkNumeric(obj) {
  var value = obj.value, err = false, num = 0;
  for (var i=0; i< value.length; i++) {
       ch = value.charCodeAt(i);
       if ((ch<48 || ch>57) && ch!=46) {
            err = true; break;
       } else if (ch==46) {
            num++;
            if (i==0 || i==value.length-1 || num>1) {
               err = true; break;
            }
       }
  }
  
  return !err;
} 

//Sprawdzanie numeru telefonu
function checkPhone(obj) {
  var value = obj.value;
  var phoneReg = /^(\d{6,12})(\)?\d{1,4}\(?)?(\)?\d{1,4}\+?\(?)?$/;
  var sv = value.replace(/[\s-]/g, '');
  var tv = sv.replace(/[\(\)]/g, '');
  sv = sv.reverse();
  if (sv.match(phoneReg)) {
    return tv;
  } else {
    return false;
  }
}

//Sprawdza czy wartosc w danym polu jest poprawna data
function checkDate(obj) {
  var value = obj.value ;
  if(value==""){return true;}
  var datePat = /^(\d{4})(-)(\d{1,2})(-)(\d{1,2})$/;
  var matchArray = value.match(datePat); 

  if (matchArray == null) {
      return 0 ;
  }

  year = matchArray[1];
  month = matchArray[3]; 
  day = matchArray[5];

  var testDate=new Date(year,month-1,day);

  if (testDate.getMonth()+1==month) {
    return 1 ;
  } 
  else {
    return -1 ;
  }

}   
//Sprawdza czy dana formatka jest popranie wypelniona - pola wymagane, numeryczne
function validateForm(form) {

  var wyp=false;
  var grupa_wyp=true;
  var pop_name="?";
  var pop_elem=null;
  var jest_num=true;
  var jest_data=1;
  var phone_number = '';
  var phone_number_elem = null;

  for (var i=0;i<form.length;i++) {
    var elem = form.elements[i];
		
    if (!elem.disabled) {
	
    var nazwa=elem.name.substring(0,8);

      if (elem.name!=pop_name) {
        if (!grupa_wyp) {
          highlight(pop_elem);
          alert( 'Nie wypełniłeś wymaganych pól' ) ;
          return false ;
          break ;
        }
      }


    if (nazwa == 'field(R@') {

       switch (elem.type) {
         case "select-one":  
         case "select-multiple": wyp=(elem.selectedIndex >= 0 && (elem.options[elem.selectedIndex].value != "" ) ); break;
         case "radio":    
         case "checkbox": wyp=elem.checked; break;  
         case "text":  wyp=( trim(elem.value) !="" ); break;
         case "textarea": wyp=( trim(elem.value) !="" ); break;
         default: wyp = true;
      }//switch po typ

      if (elem.name!=pop_name) {
        grupa_wyp=wyp;
      }
      else
      {
        if (!grupa_wyp) grupa_wyp=wyp;
      }
	
	} else if (nazwa == 'fname(zd') {
		if (!checkExt(elem.value, 0)) {
			return false;
		}
    
	} else if (nazwa == 'fname(wi') {
		if (!checkExt(elem.value, 1)) {
			return false;
		}
	}

      pop_name=elem.name;
      pop_elem=elem;


    var nazwa1=elem.name.substring(0,9);
    var nazwa2=elem.name.substring(0,7);
    
    jest_num = true;
    jest_data = 1;
    
    if ((nazwa1 == 'field(R@N')||(nazwa2 == 'field(N')) {
       switch (elem.type) {
         case "text":  jest_num = checkNumeric(elem); break;
         default: jest_num = true;
      }
    }

    if ((nazwa1 == 'field(R@D')||(nazwa2 == 'field(D')) {
       switch (elem.type) {
         case "text":  jest_data = checkDate(elem); break;
         default: jest_data = 1;
      }
    }

    if (!jest_num) {
       highlight(elem);
       alert("Wartość "+elem.value+" ma nieprawidłowy format liczby!");
       return false;
    }

    if (jest_data!=1) {
       highlight(elem);
       if (jest_data==0)
         alert("Wartość "+elem.value+" ma nieprawidłowy format daty!");
       if (jest_data==-1)
         alert("Wartość "+elem.value+" nie jest poprawn+ dat+ !");
       return false;
    }

    if (elem.name.match(/telefon/)) {
      phone_number = checkPhone(elem);
      phone_number_elem = elem;
      if (!phone_number) {
        highlight(elem);
        alert("Wartość "+elem.value+" ma nieprawidłowy format numeru telefonu!");
        return false;
      }
    }

    } //elem.disabled

  }

  if (!grupa_wyp) {
      highlight(pop_elem);
      alert( 'Nie wypełniłeś wymaganych pól' ) ;
      return false;
  }

  phone_number_elem.value = phone_number;
  return true;
}

function checkExt(path, type) {
	var pomArray;
	if (type == 0) {
		pomArray = imgExt;
	} else if (type == 1) {
		pomArray = wideoExt;
	}
	
	var ext = path.substring(path.length-3, path.length);
	ext = ext.toLowerCase();
	var ok = false;

	for (var i=0; i<pomArray.length && !ok; i++) {	
		if (ext == pomArray[i]) {		
			ok = true;
		}
	}
	
	if (!ok) {
		if (type == 0) {
			alert('Zdjęcie ma mieć rozszerzenie: ' + pomArray.toString());
		} else if (type == 1) {
			alert('Wideo ma mieć rozszerzenie: ' + pomArray.toString());
		}		
	}
	return ok;
}

//Sprawdzanie poprawnosci adresu email
function checkMail( obj )
{
   var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

   if ( (obj.value == '') || ( filter.test(obj.value) )) { 
     return true ;
   } else {
     alert('Nieprawidłowy adres email!');
     highlight(obj);
     return false ;
   }
}

//Sprawdzanie czy na podstawie tablicy limity, czy wartosc w danym polu nie jest za dluga
function sprawdz_dlugosc( limity, obj )
{
  var limit = limity[obj.name] ;

  var tekst =  obj.value

  if (tekst.length > limit ) {
    tekst = tekst.substring(0,limit);
    obj.value = tekst;
    alert( "Nie możesz wpisać wiecej niż "+limit+ " znaków." ) ;
    return false ;
  } else {
    return true ;
  }

}

function sprawdz_pole( obj )
{
   return sprawdz_dlugosc( limity, obj )
}

function validateFormAlert24(form) {
  var wynik = validateForm(form) ;

  if (wynik) {
    wynik = sprawdz_pole( form["field(R@VE_tekst_a)"] ) ;
  }

  if (wynik) {
    wynik = checkMail( form["field(R@VE_email_a)"] ) ;
  }

  return wynik  ;
}


function alert24Start()
{
  disablePhotoSect() ;
  disableVideoSect() ;
}
