(function($){


function create_link(unit,link) {
    if (link != '') {
        if (link.slice(0,4) != 'http') {
            link = 'http://'+link;
        }
        return '<a href="'+link+'">'+unit+'</a>';
    } else {
        return unit;
    }
}

function gup(name) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
        return null;
    else
     return results[1];
}

//tries to find any email adresses and makes them into mailto: links
function mark_email(txt) {
    return txt.replace(/([a-zA-Z0123456789\._]+@[a-zA-Z0123456789\._]+)/g,'<a href="mailto:$1">$1</a>'); 
}


function setupHover(data) {
    var $trs = $('#table tr');    
    $trs.hover(function(){ 
                $(this).addClass('hover');  
            },function(){ 
                $(this).removeClass('hover');  
            }).click(function(){
                $trs.removeClass('selected');
                $(this).addClass('selected');
                $('#info-empty').css('display','none');
                $('#info').css('display','block');                
                var $tds = $(this).children('td');
                var region   = $tds.eq(0).text();
                var unit     = $tds.eq(1).text();                                   
                
                var set = function(sel,val) {
                    if (val == '') {
                        $(sel).html(val).prev('dt').andSelf().hide('fast');
                    } else {
                        $(sel).html(val).prev('dt').andSelf().show('fast');
                    }
                }
                
                var row;
                for (var i=0; i<data.table.length; i++) {
                    row = data.table[i];
                    if ($('<span>'+row[0]+'</span>').text() == region && $('<span>'+row[2]+'</span>').text() == unit) {
                        //update information
                        set('#info .unit',unit);
                        set('#info .region',region);
                        set('#info .waittime',row[6]);
                        set('#info .date',row[7]);
                        set('#info .capacity',row[9]);
                        set('#info .comment',mark_email(row[8]));
                        set('#info .contact',mark_email(row[10]));
                        if (row[1] != '') {
                            var url = row[1];
                            if (url.slice(0,4) != 'http') {
                                url = 'http://'+url;
                            }
                            $('#info .unit-link').text(unit).attr('href',url);
                        } else {
                            $('#info .unit-link').text('').attr('href','');
                        }
                        break;
                    }
                }
            });
}
//['Blekinge','','Blekingesjukhuset, Karlshamn och Karlskrona','Operation/&#229;tg&#228;rd','Urologi','Resektion och andra avfl&#246;desbefr&#228;mjande ingrepp vid prostatism, benign indikation','5 - 8 veckor','2009-04-15','','Nej','', ''],


$(document).ready(function(){
    $('#portal-columns').loading({overlay_class: 'overlay-loading', auto_show: false });        
    $.tablesorter.addParser({ 
        id: 'capacity', 
        is: function(s) { 
            return false; 
        }, 
        format: function(s) { 
            if (s == 'Ja' || s == 'ja' || s == 'yes' || s == 'Yes') {
                return 0;
            }
            if (s == 'Nej' || s == 'Nej' || s == 'no' || s == 'No') {
                return 1;
            }
            return 2;
        }, 
        type: 'numeric' 
    }); 
    
    $.tablesorter.addParser({ 
        id: 'waittime', 
        is: function(s) { 
            return false; 
        }, 
        format: function(s) {
            var pos = s.search(/\d/);
            if (pos == -1) {
                return 999; //empty last
            }
            return parseInt(s.charAt(pos)+s.charAt(pos+1));
        }, 
        type: 'numeric' 
    }); 

    //check url for presets
    var presets = { 
        initial_sort: gup('questionary')=='a',
        survey: gup('survey'),
        service: gup('utbud'),
        region: $('<span>'+decodeURIComponent(gup('region'))+'</span>').text(),
        unit: $('<span>'+decodeURIComponent(gup('enhet'))+'</span>').text()
    };
    if (presets.survey && presets.survey.length > 1) {
        presets.survey = presets.survey.slice(presets.survey.length-1);
    }
    
    
    //set survey if present
    if (presets.survey) {
        var sel = $('#survey').get(0);
        var val;
        for (var i=0; i<sel.options.length; i++) {
            val = sel.options[i].value;
            if (val.slice(val.length-1)==presets.survey) {
                sel.selectedIndex = i;
                break;
            }
        }
    }
    
	//setup region selector                
	$('#regions').click(function(e){  
          var selected = $(this).val();
          var selected_map = {};
          for (var i=0; i<selected.length; i++) {
              selected_map[selected[i]] = selected[i];
          }
          var data = $('#table').data('tablebuilder.data');
          
          $('#table').buildtable(data.table,{
              row_filter: function(row) { 
                              if (selected_map[row[0].replace(/&#\d{3};/g,'').replace(/[åäöÅÄÖ]/g,'')]) {
                                  return [row[0],row[2],row[6],row[7],row[9]]; 
                              } else {
                                  return null;
                              }
                          }
         }).trigger('update').trigger('sorton');
         setupHover(data);
	});
          
        

    //listen to choice of service
    $('#service').change(function(e){
		var val = $(this).val();
		if (val && val != '' && val != 'NOCHOICE') {
       		$('#portal-columns').loading('hide');
			$.getJSON('/analys/json-spec.seam?services='+val,callback=function(data){
                   data.table.pop(); //last element is empty padding
                   
                   //map '' -> '-'
                   for (var i=0; i<data.table.length; i++) {
                      if (data.table[i][6] == '') { data.table[i][6] = '-';  }
                      if (data.table[i][7] == '') { data.table[i][7] = '-';  }
                      if (data.table[i][9] == '') { data.table[i][9] = '-';  } 
                   } 
                   
                   $('#servicename').text($('#service option:selected').text());
                   
                   $('#table').data('tablebuilder.data',data).buildtable(data.table,{
                       row_filter: function(row) { return [row[0],row[2],row[6],row[7],row[9]]; }
                   }).trigger('update').trigger('sorton');

                   //Tablesorter on table, cranky when specifying headers on an empty table, so we d it here the first time
                   if ( !$('#table').data('tablesorter') ) {
                       var initial_sort;
                       if (presets.initial_sort) {
                         initial_sort = [[2,0], [0,0] ];
                       } else {
                         initial_sort = [[4,0], [0,0] ];
                       } 
	                   $('#table').tablesorter({
	                       sortList: initial_sort,
	                       widgets: ['zebra'],
	                       headers: {
	                                   2: { sorter: 'waittime' },
	                                   4: { sorter: 'capacity' }
	                                   }
	                   }).data('tablesorter',true);
                   }
                   //hover and selects
                   setupHover(data);
                   
                   //presets
                   if (presets.unit) {
                        $('#table tr').each(function(){
                            var tds = $(this).children();
                            if (presets.region == tds.eq(0).text() && presets.unit == tds.eq(1).text()) {
                                $(this).click();
                                return true;
                            }
                            
                        });
                        presets.unit = null;
                   }
                   
                   //disable region choices that are not included in the data
                   var regions = {};
                   $.each(data.table,function(){
                       regions[this[0].replace(/&#\d{3};/g,'').replace(/[åäöÅÄÖ]/g,'')] = this[0];
                   });
                   
                   $('#regions').removeAttr('disabled');
                   $('#regions option').each(function(i){
                       if (!regions[this.value]) {
                           this.disabled = true;
                           this.selected = false;
                           $(this).addClass('disabled');
                       } else {
                           this.selected = true;
                           $(this).removeAttr('disabled').removeClass('disabled');
                       }
                   });
                   $('#portal-columns').loading('hide');
			});
			
		}
    });
    
        //the drop downs
    $('#survey,#service').selectchain({
        load_start: function() { $('#portal-columns').loading('show'); },
        load_end:   function() { 
            $('#portal-columns').loading('hide'); 
            
              // Added timeout hack due to timing issues with ie6 updating of dom
              setTimeout(function(){
              //check presets
              if (presets.service) {
                  var sel = $('#service').get(0);
                  var val;
                  for (var i=0; i<sel.options.length; i++) {
                      val = sel.options[i].value;
                      if (val==presets.service) {
                          sel.selectedIndex = i;
                          $('#service').change();
                          break;
                      }
                  }
                  presets.service = null;
              }
            },1);
        },
        data_func: function(data){  
            var options = '<option id="NOCHOICE">Välj...</option>';
            data = eval('('+data+')');
            data.services.pop();                
            //a bit of an ugly hack to escape html entites
            for (var i=0; i<data.services.length; i++) {
                data.services[i].name = ''+$('<span>'+data.services[i].name.replace('&amp;', '&')+'</span>').text();
            }
            data.services.sort(function(a,b){
                if (a.name < b.name) {
                    return -1;
                }
                if (a.name > b.name) {
                    return 1;
                }
                return 0;
            });
            $.each(data.services,function(i){
                options += '<option class="'+(i%2==0?'even':'odd')+'" value="'+this.id+'">'+this.name+'</option>\n';
            });
            return options;
        
        }
    });


    
    
    
});
})(jQuery);

