if (!Array.indexOf) {
  Array.prototype.indexOf = function(elem) {
    for (var i = 0; i < this.length; i++) {
      if (this[i] == elem) return i;
    };
    return -1;
  }
};

Array.prototype.sortColumn = function(col, order) {
  this.sort(function(a, b) {
    if (typeof order == 'undefined' || order == 'asc') {
      return a[col] < b[col] ? -1 : a[col] == b[col] ? 0 : 1;
    } else {
      return a[col] > b[col] ? -1 : a[col] == b[col] ? 0 : 1;
    }
  });
};

gazeta_pl.cjg = {};
gazeta_pl.cjg.calendar = {
  year: 0,
  month: 0,
  day: 0,
  city: '',
  names: 'styczeń,luty,marzec,kwiecień,maj,czerwiec,lipiec,sierpień,wrzesień,październik,listopad,grudzień'.split(/,/),

  init: function() {
    var cal = gazeta_pl.cjg.calendar;
    if ($('#calendar_box').length == 0) return;
    var htm = '<div class="head"><a href="javascript:void(0)" id="calendar_month_prev">&laquo;</a><span id="calendar_month_name"></span><a href="javascript:void(0)" id="calendar_month_next">&raquo;</a></div><div class="body"><table><thead><tr><th>Pn</th><th>Wt</th><th>Śr</th><th>Czw</th><th>Pt</th><th>Sb</th><th>Ndz</th></tr></thead><tbody></tbody></table></div><div class="overlay"></div>';
    $('#calendar_box').html(htm);

    var uri = document.location.href;
    var d;
    if (d = uri.match(/_data=([0-9]{4})-([0-9]{2})(-([0-9]{2}))?/)) {
      cal.year = parseInt(d[1], 10);
      cal.month = parseInt(d[2], 10);
      cal.day = typeof d[4] == 'undefined' ? 0 : parseInt(d[4], 10);
    };
    
    var t;
    if (t = document.location.href.match(/[&?]miasta=([a-zA-Z-]+)/)) {
      cal.city = t.pop();
    } else {
      cal.city = '';
    };
     
    if (cal.year == 0 || !cal.checkDate()) {
      d = new Date();
      cal.year = d.getFullYear();
      cal.month = d.getMonth() + 1;
      cal.day = d.getDate();
    };

    cal.getData();

    $('#calendar_month_prev').click(function() { cal.changeMonth(-1); });
    $('#calendar_month_next').click(function() { cal.changeMonth(1); });
  },

  changeMonth: function(n) {
    var cal = gazeta_pl.cjg.calendar;
    cal.month += n;
    while (cal.month <= 0) {
      cal.year--;
      cal.month += 12;
    };
    while (cal.month >= 13) {
      cal.month -= 12;
      cal.year++;
    };

    cal.getData();
  },

  checkDate: function() {
    var y = this.year;
    var m = this.month+1;
    var d = this.day == 0 ? 1 : this.day;
    
    if (y < 2000 || y > 2200) return false;
    if (m < 1 || m > 12) return false;
    if (d < 1 || d > 31) return false;
    if (d == 31 && (m != 4 && m != 6 && m != 9 && m != 12)) return false;
    if (d > 29 && m == 2) return false;
    if (d == 29 && m == 2 && !(y % 4 == 0 && (y % 100 != 0 || y % 400 == 0))) return false;
    
    return true;
  },

  getData: function() {
    var cal = gazeta_pl.cjg.calendar;
    cal.showOverlay();
    $.ajax({
      url: '/Wydarzenia',
      data: 'm='+cal.month+'&y='+cal.year+'&typ=cjg',
      success: function(msg) {
        msg = msg.replace(/,$/, '');
        msg = msg.split(/,/);
        for (var i = 0; i < msg.length; i++) msg[i] = parseInt(msg[i]);
        cal.hideOverlay();
        cal.generate(msg);
      },
      error: function() {
        cal.hideOverlay();
        cal.generate([]);
      }
    });
  },

  showOverlay: function() {
    var cb = $('#calendar_box');
    var ov = cb.find('.overlay');
    var w = cb.width();
    var h = cb.height();
    ov.css({opacity: 0.66, width: w+'px', height: h+'px', display: 'block'});
  },

  hideOverlay: function() {
    $('#calendar_box .overlay').hide();
  },

  generate: function(linkDay) {
    var cal = gazeta_pl.cjg.calendar;
    var d = new Date(cal.year, cal.month-1, 1);

    var firstDay = d.getDay();
    firstDay = firstDay == 0 ? 6 : firstDay - 1;
    
    var rows = [];
    var row = '';
    var cnt = 0;

    while (firstDay > 0) {
      firstDay--;
      row += '<td class="blank">&nbsp;</td>';
      cnt++;
    };

    d.setMonth(d.getMonth() + 1);
    d.setDate(d.getDate() - 1);
    var days = d.getDate();

    for (var i = 1; i <= days; i++) {
      var cl = '';
      if (i == cal.day) cl = ' class="active"';
      var x = linkDay.indexOf(i) == -1 ? '<span>'+i+'</span>' : cal.makeDayLink(i);
      row += '<td'+cl+'>'+x+'</td>';
      cnt++;
      if (cnt == 7) {
        cnt = 0;
        rows.push(row);
        row = '';
      }
    };

    if (cnt != 0) {
      while (cnt++ < 7) row += '<td class="blank">&nbsp;</td>';
      rows.push(row);
    };
    
    rows = '<tr>'+rows.join('</tr><tr>')+'</tr>';
    $('#calendar_box tbody').html(rows);
    $('#calendar_month_name').html(cal.makeMonthLink());
  },

  makeMonthLink: function() {
    var cal = gazeta_pl.cjg.calendar;
    var lz = cal.leadZero;
    return '<a href="?miasta='+cal.city+'&param=_data='+cal.year+'-'+lz(cal.month)+'">'+cal.names[cal.month-1]+' '+cal.year+'</a>';
  },
  
  makeDayLink: function(n) {
    var cal = gazeta_pl.cjg.calendar;
    var lz = cal.leadZero;
    return '<a href="?miasta='+cal.city+'&param=_data='+cal.year+'-'+lz(cal.month)+'-'+lz(n)+'">'+n+'</a>';
  },

  leadZero: function(n) {
    return n < 10 ? '0'+n : n;
  }
};

gazeta_pl.cjg.map = {
  init: function() {
    if (gazeta_pl.cjg_location && typeof gazeta_pl.cjg_location != 'undefined') {
      var geocoder = new google.maps.Geocoder();
      var latlng = new google.maps.LatLng(0, 0);
      var options = {
        zoom: 15,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map($('#location_map').get(0), options);
      geocoder.geocode(
        { address: gazeta_pl.cjg_location, country: 'Poland' },
        function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({map: map, position: results[0].geometry.location});
            var latlng = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng()); 
            map.setCenter(latlng);
          }
        }
      );
    }
  }
};

gazeta_pl.cjg.finder = {
  selMovie: null,
  selCinema: null,
  selId: 0,
  
  init: function() {
    if ($('#i_movie').length == 0) return;
    this.selMovie = $('#i_movie');
    this.selCinema = $('#i_cinema');
    this.selMovie.change(function() { gazeta_pl.cjg.finder.getCinemaList(); });
    this.selCinema.change(function() { gazeta_pl.cjg.finder.getMovieList(); });
    this.selMovie.attr('selectedIndex', 0);
    this.selCinema.attr('selectedIndex', 0);
  },

  getCinemaList: function() {
    var id = this.selMovie.val();
    this.selId = this.selCinema.val();
    this.selCinema.attr('disabled', 'disabled');
    this.selMovie.attr('disabled', 'disabled');
    $.ajax({
      url: '/refreshlist',
      data: 'type=movie&region='+gazeta_pl.cjg_region+'&id='+id,
      success: function(msg) { gazeta_pl.cjg.finder.setList(gazeta_pl.cjg.finder.selCinema, msg); }
    });
  },

  getMovieList: function() {
    var id = this.selCinema.val();
    this.selId = this.selMovie.val();
    this.selCinema.attr('disabled', 'disabled');
    this.selMovie.attr('disabled', 'disabled');
    $.ajax({
      url: '/refreshlist',
      data: 'type=cinema&region='+gazeta_pl.cjg_region+'&id='+id,
      success: function(msg) { gazeta_pl.cjg.finder.setList(gazeta_pl.cjg.finder.selMovie, msg); }
    });
  },

  setList: function(target, msg) {
    msg = typeof msg == 'object' ? msg : JSON.parse(msg);
    var tmpary = [];
    for (var i in msg) tmpary.push({id:i,value:msg[i]});
    tmpary.sortColumn('value');
    var htm = '<option value="">wszystkie</option>';
    for (var i = 0; i < tmpary.length; i++) {
      htm += '<option value="'+tmpary[i].id+'">'+tmpary[i].value+'</option>';
    };
    target.find('option').remove();
    target.append(htm);
    var opts = target.find('option');
    for (var i = 0; i < opts.length; i++) {
      if (opts[i].value == gazeta_pl.cjg.finder.selId) {
        target.attr('selectedIndex', i);
        break;
      }
    };
    this.selCinema.removeAttr('disabled');
    this.selMovie.removeAttr('disabled');
  }
};

$(document).ready(function() {
  // nawigacja 
  $('#navH .dropdown').hover(
    function() { $(this).addClass('hover'); },
    function() { $(this).removeClass('hover'); }
  );
  
  // newsletter
  $('#newslzaj #nltZajNewSubmit').attr('src', 'http://bi.gazeta.pl/i/obrazki/cjg/2010/zamow_btn.png');
  
  gazeta_pl.cjg.calendar.init();
  gazeta_pl.cjg.map.init();
  gazeta_pl.cjg.finder.init();

  // search
  var selOptionsLength = $('#searchH_sel option').length;
  if (selOptionsLength > 0) {
 
    var searchHTML = '<div class="searchSel0">';
 
    //check for active element if not specified get first
    var activeSearch = $('#searchH_sel option').eq(0);
    if ($('#searchH_sel option:selected').length > 0) {
      activeSearch = $('#searchH_sel option:selected')
    };
    searchHTML += '<a href="#" class="selectedVal" alt="'+activeSearch.attr("value")+'">'+activeSearch.text()+'</a>';
    
    // go trough services select and create proprer html
    for (var i = 0; i < selOptionsLength; i++) {
      var currentOption = $('#searchH_sel option').eq(i);
      searchHTML += '<a href="#" class="'+currentOption.attr("value")+'" alt="'+currentOption.attr("value")+'">'+currentOption.text()+'</a>';
    };
 
    searchHTML += '</div>';
 
    //build it
    $('#searchH .b').wrap('<div class="searchSel">');
    $('.searchSel').prepend(searchHTML);
    $('#searchH .searchSel0').hover(function() { $('#searchH0').addClass('hovered'); }, function() { $('#searchH0').removeClass('hovered'); });
 
    // change search type after click
    $('.searchSel0 a').click(function(e) {
      e.preventDefault();
      if( $(this).hasClass('selectedVal')) return;
      $('.searchSel0 .selectedVal').text($(this).text());
      $('.searchSel0 .selectedVal').attr('alt', $(this).attr('alt'));
      $('.searchSel0 a').removeClass('selected');
      $(this).addClass('selected');
 
      $('#searchH_sel option:selected').attr('selected', '');
      $('#searchH_sel option[value='+$(this).attr("alt")+']').attr('selected', 'selected');
      $('#searchH_sel').change( function(){ searchH.searchH_sel = $(this).find(':selected').attr('value')}); 
      $('#searchH_sel').change();
 
      // google logo in search bar
      if ($(this).attr('alt') == 'internet') {
        if ($('#searchH .t').val() == '') $('#searchH .t').addClass('google');
      } else {
        $('#searchH .t').removeClass('google');
      }
      $('#searchH .t.google').focus(function() { $(this).removeClass('google'); });
      $('#searchH .t.google').blur(function() {
        if($(this).val() == '') {$(this).addClass('google')}
      }); 
    });
  }
});




