//Event.observe($$('#item li'), 'click', handler) 

Kwo.Widget.Weather = {
  fetch: function(query) {
    if (query) {
      Kwo.Browser.setLocation(query);
      Kwo.exec("/sys/widget.weather", {"query": query}, {"container": "weather"});
      if ($('forecastBox')) Kwo.Widget.Weather.forecast(query);
    }
  },
  forecast: function(query) {
    Kwo.exec("/sys/widget.forecast", {"query": query}, {"container": "forecastBox"});
  },
  search: function (query) {
    if (query) {
      var url = "/sys/service.weather?type=search&query="+escape(query);
      new Ajax.Request(url, { method: 'get', onSuccess: function (transport) {
        var resp = transport.responseText.evalJSON();
        clearSelect('WeatherCode');
        Kwo.Widget.Weather.hide();
        if (resp['error']) {
          $('WeatherError').innerHTML = resp['error'];
          $('WeatherError').show();
        } else {
          for (result in resp['result']) {
            addOption($('WeatherCode'),result,resp['result'][result],'',false);
          }
          $('WeatherSelect').show();;
        }
      } } );
    }
  },
  hide: function () {
    $('WeatherError').hide();
    $('WeatherSearch').hide();
    $('WeatherSelect').hide();
  },
  toggle: function () {
    if ($('WeatherSearch').style.display != 'none' || $('WeatherSelect').style.display != 'none') {
      Kwo.Widget.Weather.hide();
    } else {
      Kwo.Widget.Weather.hide();
      $('WeatherSearch').show();
    }
  }
};

Kwo.Widget.Clock = {
  get: function () {
    if (!$('clock')) return;
    var use_local_flag = false;
    var date = new Date(), s;
    if (window._lang_id === undefined) {
      var lang_id = 1;
    }
    else {
      var lang_id = _lang_id;
    }
    if (use_local_flag == true) {
      s = date.toLocaleString().substr(0, (s.length - 3)).capitalize();
    }
    else {
      var month_names = new Array();
      month_names[1] = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
      month_names[2] = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
      
      var day_names = new Array();
      day_names[1] = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
      day_names[2] = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");

      var now = new Date();

      if (lang_id == 1) {
        s = day_names[lang_id][now.getDay()]+" "+now.getDate()+" "+month_names[lang_id][now.getMonth()]+" "+now.getFullYear();
      }
      else {
        s = day_names[lang_id][now.getDay()]+", "+month_names[lang_id][now.getMonth()]+" "+now.getDate()+", "+now.getFullYear();
      }
      s += " "+now.getHours()+":"+now.getMinutes().toPaddedString(2);
    }
    $('clock').innerHTML = s;
    setTimeout(function () { Kwo.Widget.Clock.get(); }, 10000);
  }
}


Kwo.Widget.WebSearch = {
  search: function (query,type) {
    $("WebSearchResults").style.display = "none";
    $("WebSearchQuery").value = query;
    $("WebSearchQuery").focus();
    switch (type) {
    case "google":
      Kwo.Widget.WebSearch.googleSearch(query);
      break;
    case "yahoo":
      Kwo.Widget.WebSearch.yahooSearch(query);
      break;
    case "msn":
      Kwo.Widget.WebSearch.msnSearch(query);
      break;
    }
  },
  googleSearch: function (query) {
    var google = new GwebSearch();
    google.setResultSetSize(GSearch.LARGE_RESULTSET);
    google.setSearchCompleteCallback(document, function () {
      $("WebSearchError").style.display = "none";
      $("WebSearchLinks").style.display = "none";
      var links = "";
      if (google.results.length == 0) {
        $("WebSearchError").style.display = "";
      } else {
        google.results.each(function(result) { 
          links += "<div class='link'><a href='"+result.url+"' target='_blank'>"+result.titleNoFormatting+"</a>";
          if (result.content) links += "<div>"+result.content.replace(/<br>/,"")+"</div>";
          links += "</div>";
        } );
        $("WebSearchLinks").innerHTML = links;
        $("WebSearchLinks").style.display = "";
      }
      $("WebSearchResults").style.display = "block";
    } );
    $("WebSearchLinks").innerHTML = "";
    google.clearResults();
    google.execute(query);
  },
  yahooSearch: function (query) {
    $("WebSearchError").style.display = "none";
    $("WebSearchLinks").style.display = "none";
    var url = "/sys/service.websearch?type=yahoo&query="+escape(query);
    new Ajax.Request(url, { method: 'get', onSuccess: function (transport) { 
      var resp = transport.responseText.evalJSON();
      if (resp["result"]["ResultSet"]["Result"].length == 0) {
        $("WebSearchError").style.display = "";
      } else {
        $("WebSearchLinks").innerHTML = "";
        var links = "";
        resp["result"]["ResultSet"]["Result"].each(function(result) { 
          links += "<div class='link'><a href='"+result.Url+"' target='_blank'>"+result.Title+"</a>";
          if (result.Summary) links += "<div>"+result.Summary.replace(/<br>/,"")+"</div>";
          links += "</div>";
        } );
        $("WebSearchLinks").innerHTML = links;
        $("WebSearchLinks").style.display = "";
      }
      $("WebSearchResults").style.display = "";
    } } );
  },
  msnSearch: function (query) {
    $("WebSearchError").style.display = "none";
    $("WebSearchLinks").style.display = "none";
    var url = "/sys/service.websearch?type=msn&query="+escape(query);
    new Ajax.Request(url, { method: 'get', onSuccess: function (transport) { 
      var resp = transport.responseText.evalJSON();
      if (resp["result"]["Results"]["Result"] == undefined) {
        $("WebSearchError").style.display = "";
      } else {
        $("WebSearchLinks").innerHTML = "";
        var links = "";
        resp["result"]["Results"]["Result"].each(function(result) {
          links += "<div class='link'><a href='"+result.Url+"' target='_blank'>"+result.Title+"</a>";
          if (result.Description) links += "<div>"+result.Description.replace(/<br>/,"")+"</div>";
          links += "</div>";
        } );
        $("WebSearchLinks").innerHTML = links;
        $("WebSearchLinks").style.display = "";
      }
      $("WebSearchResults").style.display = "";
    } } );
  },
  getType: function () {
    if ($('TypeGoogle').checked) return "google";
    if ($('TypeYahoo').checked) return "yahoo";
    if ($('TypeMsn').checked) return "msn";
  } 
};

Kwo.Widget.Notify = {
  send: function(elt) {
    Kwo.exec('/sys/visitor.send_notification', elt, {'toggle': 'kwo-notify-throbber', 'reset': true});
  },
  version:1
};

Kwo.Widget.Rating = {
  registry: {},
  handleClick: function(event) {
    event = event || window.event;
    var arr = Event.element(event).id.split('-');
    if (this.registry[arr[0]+'-'+arr[1]+'-'+arr[2]+'-'+arr[3]] == true) return ;
    this.registry[arr[0]+'-'+arr[1]+'-'+arr[2]+'-'+arr[3]] = true;
    Kwo.exec('/rate/ping', {'model_id': arr[2], 'record_id': arr[3], 'note': arr[4]}, {async:false});
  },
  handleMove: function(event) {
    event = event || window.event;
    var arr = Event.element(event).id.split('-');
    if (this.registry[arr[0]+'-'+arr[1]+'-'+arr[2]+'-'+arr[3]] == true) return ;
    var sig = arr[0]+'-'+arr[1]+'-'+arr[2]+'-'+arr[3]+'-';
    var i = 1;
    if (event.type.endsWith('out')) {
      while (i < 10) {
        if (!$(sig+i)) break;
        $(sig+i).src = $(sig+i).src.preg_replace('on', 'off');
        i++;
      }
    }
    else {
      var num = parseInt(arr[4]);      
      for (i = 1; i <= num; i++) {
        $(sig+i).src = $(sig+i).src.preg_replace('off', 'on');
      }
    }
  },
  notify: function(model_id, record_id) {
    $('kwo-star-'+model_id+'-'+record_id+'-1').up('div').hide();
  }
}

Kwo.Widget.Poll = {
  handleResponse: function(msg) {
    Kwo.warn(msg);
  },
  submit: function(id) {
    Kwo.exec('/poll/poll.add_result', $('kwo-poll-'+id), {'toggle': 'kwo-poll-throbber-'+id});
  }
}

function clearSelect(id) {
  var s = $(id);
  while (o = s.lastChild) s.removeChild(o);
}

function addOption(obj, value, text, name, selected) {
  var opt = document.createElement('option');
  var txt = document.createTextNode(text)
  opt.appendChild(txt);
  opt.className = name;
  opt.value = value;
  opt.selected = selected;
  obj.appendChild(opt);
}
