jQuery.fn.exists = function(){return jQuery(this).length>0;}

var distSelected=false;
var countSelected=false;
var selectedFregs = new Array();
var selectedZones = new Array();
var zoneFregsArray = new Array();
var zoneLocalitiesArray = new Array();
var zonesCount=0;
var maxFregs=0;
var maxZoneFregs=0;
var maxLocalities=0;
var myWidth=0;
var originalFregsArray=new Array();

function distSelector(district){
  if(!distSelected){
    createHidden('dist',district,'search_form');
    $('#currentSelectLabel').show();
    $('#currentSelect').html(district);
    distSelected=true;
  }
}

function countSelector(county){
  if(county=='Lisboa'){
    $('#switcherFregs').show();
    $('#switcherFregZone').show();
  } 
  if(!countSelected){createHidden('count',county,'search_form');
    $('#currentSelect').html($('#currentSelect').html()+' | '+county);
    countSelected=true;
  }else if(county!=$('#currentSelect').html().split(' | ')[1]){
    $('#currentSelect').html($('#currentSelect').html().split(' | ')[0]+' | '+county);
    $('#idcount').attr('value',county);
  }
}


function reWriteRules(s,lc){
  s=s.replace(/á/g,'a');
  s=s.replace(/é/g,'e');
  s=s.replace(/í/g,'i');
  s=s.replace(/ó/g,'o');
  s=s.replace(/ú/g,'u');
  s=s.replace(/Á/g,'A');
  s=s.replace(/É/g,'E');
  s=s.replace(/Í/g,'I');
  s=s.replace(/Ó/g,'O');
  s=s.replace(/U/g,'U');
  s=s.replace(/â/g,'a');
  s=s.replace(/ê/g,'e');
  s=s.replace(/î/g,'i');
  s=s.replace(/ô/g,'o');
  s=s.replace(/û/g,'u');
  s=s.replace(/Â/g,'A');
  s=s.replace(/Ê/g,'E');
  s=s.replace(/Î/g,'I');
  s=s.replace(/Ô/g,'O');
  s=s.replace(/Û/g,'U');
  s=s.replace(/ã/g,'a');
  s=s.replace(/õ/g,'o');
  s=s.replace(/ç/g,'c');
  s=s.replace(/-/g,'_');
  s=s.replace(/\s/g,'-');
  s=s.replace(/&quot;/g,'');
  s=s.replace(/&lt;/g,'');
  s=s.replace(/&gt;/g,'');
  s=s.replace(/&gt;/g,'');
  s=s.replace(/&amp;/g,'');
  s=s.replace(/&euro;/g,'');
  s=s.replace(/\-\(/g,'(');
  s=s.toLowerCase();
  return s;
}

function fregSelector(freg){
  var originalFreg=freg;
  freg=reWriteRules(freg);
  var separator=' | ';
  var splitter=$('#currentSelect').html().split(separator);
  var removed=false;
  
  //there's only one freg 
  if(selectedFregs.length<=0){
    createHidden('freg',freg,'search_form',0);
    selectedFregs.push(freg);
    originalFregsArray.push(originalFreg);
    if(!splitter[1])splitter[1]='Lisboa';
    $('#currentSelect').html(splitter[0]+' | '+splitter[1]+' | '+originalFreg);
    maxFregs++;
  //More than one freg
  }else{
    var counter=0;
    for(var i in selectedFregs){
      if(selectedFregs[i]==freg){
        selectedFregs.splice(counter,1);
        originalFregsArray.splice(counter,1);
        for(var k=0;k<maxFregs;k++){
          if($('#idfreg'+'_'+k).attr('value')==freg){
            $('#idfreg'+'_'+k).remove();
            removed=true;
            break;
          }
        }
      }
      counter++;
    }
    
    if(!removed){
      createHidden('freg',freg,'search_form',maxFregs);
      selectedFregs.push(freg);
      originalFregsArray.push(originalFreg);
      maxFregs++;
    }
    if(selectedFregs.length==1){
          $('#currentSelect').html(splitter[0]+' | '+splitter[1]+' | '+originalFregsArray[0]);
    }else if(selectedFregs.length==0){
          $('#currentSelect').html(splitter[0]+' | '+splitter[1]);
    }else if(selectedFregs.length>1){
          $('#currentSelect').html(splitter[0]+' | '+splitter[1]+' | '+'Várias Freguesias');
    }
  }
}

function zoneSelector(id,zone,zoneFregs,zoneLocalities){
  //alert('ID: '+id+'\nZone: '+zone+'\nzoneFregs: '+zoneFregs+'\nzoneLocalities: '+zoneLocalities);
  var separator=' | ';
  var splitter=$('#currentSelect').html().split(separator);
  var removed=false;
  var posToDel;
  var newZone=true;
  
  for(var i in selectedZones){
    if(selectedZones[i]['id']==id){
      posToDel=i;
      newZone=false;
    }
  }
  
  if(newZone==true){
    var addedFregs=new Array();
    selectedZones[zonesCount]=new Array();
    selectedZones[zonesCount]['id']=id;
    selectedZones[zonesCount]['name']=zone;
    selectedZones[zonesCount]['fregs']=zoneFregs;
    selectedZones[zonesCount]['localities']=zoneLocalities;
    
    
    if(!splitter[1])splitter[1]='Lisboa';
    $('#currentSelect').html(splitter[0]+' | '+splitter[1]+' | '+cutString(zone.replace(';',','),15));
    zonesCount++;
    
    if(zoneFregs.split(';').length>0){
      addedFregs=zoneFregs.split(';');
    }else addedFregs=zoneFregs;
    
    
    var addedLocalities=new Array();
    addedLocalities=zoneLocalities.split(';');
    for(var i in addedFregs){
      var foundFreg=false;
      for(var j in zoneFregsArray){
        if(zoneFregsArray[j]['freg']==addedFregs[i]){
          zoneFregsArray[j]['count']++;
          foundFreg=true;
        }
      }
      if(foundFreg==false){
        zoneFregsArray.push({'freg':addedFregs[i],'count':1});
        createHidden('freg',addedFregs[i],'search_form',maxZoneFregs);
        maxZoneFregs++;
      }      
    }
    
    for(var i in addedLocalities){
      var foundLocality=false;
      for(var j in zoneLocalitiesArray){
        if(zoneLocalitiesArray[j]['locality']==addedLocalities[i]){
          zoneLocalitiesArray[j]['count']++;
          foundLocality=true;
        }
      }
      if(foundLocality==false){
        zoneLocalitiesArray.push({'locality':addedLocalities[i],'count':1});
      }      
    }

    var zoneLocalitiesConstruct='';
    for(var c in zoneLocalitiesArray){
      if(zoneLocalitiesArray[c]['count']>0){
        zoneLocalitiesConstruct=zoneLocalitiesConstruct+zoneLocalitiesArray[c]['locality']+';'
      }
    }
    $('#idlocality').remove();
    createHidden('locality',zoneLocalitiesConstruct,'search_form');
    
    if(!$('#idzones').exists()){
      createHidden('zones',id,'search_form');
    }else{
      $('#idzones').val($('#idzones').val()+','+id);
    }
    
  }else{
    selectedZones.splice(posToDel,1);
    zonesCount--;
    
    var fregsToRemove=zoneFregs.split(';');
    
    for(var j in fregsToRemove){
      for(var e in zoneFregsArray){
        if(zoneFregsArray[e]['freg']==fregsToRemove[j]){
          zoneFregsArray[e]['count']--;
          if(zoneFregsArray[e]['count']<=0){
            zoneFregsArray.splice(e,1);
            for(var z=0;z<maxZoneFregs;z++){
              if($('#idfreg_'+z).attr('value')==fregsToRemove[j]){
                $('#idfreg_'+z).remove();
              }
            }
          }
        }
      }
    }
    
    var localitiesToRemove=zoneLocalities.split(';');
    
    for(var j in localitiesToRemove){
      for(var e in zoneLocalitiesArray){
        if(zoneLocalitiesArray[e]['locality']==localitiesToRemove[j]){
          zoneLocalitiesArray[e]['count']--;
          if(zoneLocalitiesArray[e]['count']<=0){
            zoneLocalitiesArray.splice(e,1);
            var construct='';
            var splitterLocal=$('#idlocality').attr('value').split(';');
            for(var a in splitterLocal){
              if(splitterLocal[a]==localitiesToRemove[j]){
                splitterLocal.splice(a,1);
              }
            }
            $('#idlocality').attr('value',splitterLocal.join(';'));
          }
        }
      }
    }
    
    var myZones=$('#idzones').val().split(',');
    for(var o in myZones){
      if(myZones[o]==id){
        myZones.splice(o,1);
      }
    }
    
    //if(myZones.charAt(0)==',')myZones=myZones.substr(1,myZones.length);
    myZones.sort();
    var myJoining=myZones.join(',');
    $('#idzones').val(myJoining);
    
  }

  if(selectedZones.length==1){
    $('#currentSelect').html(splitter[0]+' | '+splitter[1]+' | '+cutString(selectedZones[0]['name'].replace(';',','),15));
  }else if(selectedZones.length==0){
    $('#currentSelect').html(splitter[0]+' | '+splitter[1]);
  }else if(selectedZones.length>1){
    $('#currentSelect').html(splitter[0]+' | '+splitter[1]+' | '+'Várias Zonas');
  }
}

function clearDist(){
  $('#currentSelect').html('');
  $('#iddist').remove();
  $('#idcount').remove();
  $('#idfreg').remove();
  $('#currentSelectLabel').hide();
  distSelected=false;
  countSelected=false;
}

function clearFreg(){
  var splitter=$('#currentSelect').html().split(' | ');
  if(selectedFregs && selectedFregs.length>0){
    for(var i=0;i<selectedFregs.length;i++){
      $('#idfreg_'+i).remove();
    }
    $('#currentSelect').html(splitter[0]);
  }
  $('#currentSelect').show();
  selectedFregs = new Array();
  originalFregsArray = new Array();
}


function clearZones(){
  var splitter=$('#currentSelect').html().split(' | ');
  if(maxZoneFregs && maxZoneFregs>0){
    for(var i=0;i<maxZoneFregs;i++){
      $('#idfreg_'+i).remove();
    }
  }
  $('#currentSelect').html(splitter[0]);
  $('#idlocality').remove();
  $('#idzones').remove();
  selectedFregs = new Array();
  selectedZones=new Array();
  zoneFregsArray = new Array();
  zoneLocalitiesArray = new Array();
  zonesCount=0;
  maxZoneFregs=0;
  maxLocalities=0;
  $('#currentSelect').show();
}

function returnToNormal(){
  $('#switcherFregs').show();
  $('#switcherZones').hide();
  $('#switcherFregZone').hide();
}

function createHidden(name,value,formid,extraArg){
  if(typeof(extraArg)!='undefined'){
    var string='<input id="id'+name+'_'+extraArg+'" name="'+name+'" type="hidden" value="'+value+'">';
  }else var string='<input id="id'+name+'" name="'+name+'" type="hidden" value="'+value+'">'; 
  $('#'+formid).append(string);
}

function resetMap(controlObject){
  var browserVer=checkBrowser();
  if((browserVer.search(/Netscape/i)==0 || browserVer.search(/Safari/i)==0 || browserVer.search(/Opera/i)==0) && $('#'+controlObject).attr('class')=='unsel'){
    clearFreg();
    clearDist();
  }
}

function getFlashMovie(movieName){   
  var isIE = navigator.appName.indexOf("Microsoft") != -1;   
  return (isIE) ? window[movieName] : document[movieName];  
}

function switchMe(zone,who){
  if(zone==true){ 
    $('#switcherFregs').toggle();
    $('#switcherZones').toggle();
  }else{
    $('#switcherFregs').toggle();
    $('#switcherZones').toggle();
  }
  $('#currentSelect').html(who+' | '+who);
  getFlashMovie("ptMap").switchFregZone(zone,who);
}

function cutString(myString,size){
  if(myString.length<=size){
    return myString;
  }else{
    return myString.substr(0,size)+'...';
  }
}

$(function(){
  var myFregString='';
  $('#bt_pesq').click(function(){
    if($('#search_form input[name=freg]').length>0 && $('#search_form input[name=freg]').attr('id')!='idfreg'){
      $('#search_form input[name=freg]').each(
        function(){
          myFregString=myFregString+$(this).val()+',';
          $(this).remove();
      })
      if(myFregString.charAt(myFregString.length-1)==',')myFregString=myFregString.substring(0,myFregString.length-1);
      createHidden('freg',myFregString,'search_form');
    }
  })
})
