﻿var contestmessageInnerHTML;
var formSlide;
var formSubmitting = false;
function pageLoaded()
{
    var formHtml = '<form action="./" method="post" id="ilmoitakilpailu">' + $('ilmoitakilpailu').innerHTML + '</form>';
    Element.remove($('ilmoitakilpailu'));
    new Insertion.After("contests-col2", formHtml);
    formSlide = new fx.Height($("ilmoitakilpailu"), {duration: 300, onComplete: function() {} });
    formSlide.hide();
    $("ilmoitakilpailu-aktivoi").innerHTML = 'Ilmoita kilpailu';
    addEvent($("ilmoitakilpailu-aktivoi"), "click", toggleFormSlide);
    addEvent($("tarkista-url"), "click", function(e) {
        $('tarkista-url').value = 'Tarkistetaan...';
        $('tarkista-url').disabled = true;
        new Ajax.Request("./?checkurl=" + $('contesturl').value, {
           method: 'post',
           onSuccess : notAdded, onFailure : isAdded
         });
         Event.stop(e); 
    });
    addEvent($("ilmoitakilpailu"), "submit", function(e){
        if (formSubmitting || !validate()) {
            Event.stop(e);
            return false;
        }
        formSubmitting = true;
        $('contestsubmit').value = 'Lähetetään...';
        $('contestsubmit').disabled = true;
        new Ajax.Request("./", {
           method: 'post',
           parameters : Form.serialize(this),
           onSuccess : added, onFailure : failed
         });
         Event.stop(e); 
    });
}

function notAdded(request) {
    $('tarkista-url').disabled = false;
    $('tarkista-url').value = 'Tarkista';
    alert('Kilpailua ei ole vielä lisätty!');
}

function isAdded(request) {
    $('tarkista-url').disabled = false;
    $('tarkista-url').value = 'Tarkista';
    //alert('Kilpailu on jo lisätty');
    alert('Tarkistus epäonnistui. Tarkista tiedot (kuten kilpailun URL) ja lähetä uudestaan.');
    // Ruuhkaa, IP-tarkistus epäonnistui? Lomakkeessa virheitä (URL)? Jo lisätty? ...
}

function toggleFormSlide() {
    if ($('contests-notify')) Element.remove($('contests-notify'));
    formSlide.toggle();
    if (Element.hasClassName($('ilmoitakilpailu-aktivoi'), 'aktivoitu'))
        Element.removeClassName($('ilmoitakilpailu-aktivoi'), 'aktivoitu');
    else
        Element.addClassName($('ilmoitakilpailu-aktivoi'), 'aktivoitu');
}

function added(originalRequest) {
    resetsubmit();
    toggleFormSlide();
    new Insertion.Before("ilmoitakilpailu", '<div id="contests-notify"><h3>'+ originalRequest.responseText + '</h3><p><strong>Kilpailun lähettäminen onnistui.</strong> Kiitos!</p></div>');
    $('ilmoitakilpailu').reset();
}

function failed() {
    resetsubmit();
    alert('Kilpailun lisääminen epäonnistui. Sama kilpailu saattaa olla jo ilmoitettu.');
}

function resetsubmit() {
    formSubmitting = false;
    $('contestsubmit').value = 'Lähetä';
    $('contestsubmit').disabled = false;
}

function validate() {
    if (
        $("contesttitle").value.length <= 0
        || $("contesturl").value.length <= 0
        || ($("contesturl").value.indexOf("http://") != 0 && $("contesturl").value.indexOf("https://") != 0)
        || ($("contestvalue").value.length > 0
            && !validateAndFixNumber($("contestvalue")))
        || $("contestdescription").value.length <= 0
        || !validateAndFixDate($("contestdate"))
       ) {
       if (contestmessageInnerHTML == null) contestmessageInnerHTML = $('contestmessage').innerHTML;
       $('contestmessage').innerHTML = '<strong style="color:red;background:yellow">Täytä puuttuva tai korjaa virheellinen tieto.</strong>';
       if ($("contesttitle").value.length <= 0)
            Element.addClassName($('contesttitlelbl'), 'invalid');
       else
            Element.removeClassName($('contesttitlelbl'), 'invalid');
       if ($("contesturl").value.length <= 0 || ($("contesturl").value.indexOf("http://") != 0 && $("contesturl").value.indexOf("https://") != 0))
            Element.addClassName($('contesturllbl'), 'invalid');
       else
             Element.removeClassName($('contesturllbl'), 'invalid');
       if ($("contestvalue").value.length > 0
            && !validateAndFixNumber($("contestvalue")))
            Element.addClassName($('contestvaluelbl'), 'invalid');
       else
            Element.removeClassName($('contestvaluelbl'), 'invalid');
       if (!validateAndFixDate($("contestdate")))
            Element.addClassName($('contestdatelbl'), 'invalid');
       else
             Element.removeClassName($('contestdatelbl'), 'invalid');
       if ($("contestdescription").value.length <= 0)
            Element.addClassName($('contestdescriptionlbl'), 'invalid');
       else
            Element.removeClassName($('contestdescriptionlbl'), 'invalid');
       return false;
   }
   $('contestmessage').innerHTML = contestmessageInnerHTML;
   Element.removeClassName($('contesttitlelbl'), 'invalid');
   Element.removeClassName($('contesturllbl'), 'invalid');
   Element.removeClassName($('contestvaluelbl'), 'invalid');
   Element.removeClassName($('contestdatelbl'), 'invalid');
   Element.removeClassName($('contestdescriptionlbl'), 'invalid');
   return true;
}

function validateAndFixDate(datefield) {
    var val = datefield.value;
    //jos täysin ohjeen mukainen päivämäärä
    if (val.match(/^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{2,4}$/))
        return true;
    //jos vuosi puuttuu, lisätään se
    if (val.match(/^[0-9]{1,2}\.[0-9]{1,2}\.?$/)) {
        var today = new Date();
        var year = today.getFullYear();
        if (val.lastIndexOf('.') == val.length - 1)
            datefield.value = val + year;
        else
            datefield.value = val + '.' + year;
        return true;
    }
    return false;
}

function validateAndFixNumber(numberfield) {
   var validChars = "0123456789 ";
   var isNumber = true;
   var character;
   var text = numberfield.value;
 
   for (var i = 0; i < text.length && isNumber; i++) { 
      character = text.charAt(i); 
      if (validChars.indexOf(character) == -1) {
         isNumber = false;
      }
   }
   numberfield.value = text.replace(' ', '');
   return isNumber;
}

function popup(href, name, width, height) {
    var win = window.open(href, name, 'width=' + width + ',height='
        + height + ',scrollbars=1,status=1,location=1,resizable=1');
    if (win != null) {
        win.focus();
        return false;
    }
    return true;
}