function openWindow(url, name, features) {
  popup = window.open(url,name,features);
  popup.focus();
}


function confirmOrganiserDelete(organiser_pk, organiser_name, doc_root) {
  if (confirm('Vill du ta bort ' + organiser_name + '?')) {
    location.replace(doc_root + 'pro/sin.php?page=search_organisers&delete=' + organiser_pk);
  }
}


function confirmEventDelete(event_pk, event_name, doc_root) {
  if (confirm('Vill du ta bort ' + event_name + '?')) {
    location.replace(doc_root + 'pro/sin.php?page=events&delete=' + event_pk);
  }
}


function confirmTypeDelete(type_pk, parent_pk, type_name, doc_root, type_of) {
  var message = 'Vill du ta bort ' + type_name + '?';
  if (parent_pk == '0') {
    message = 'Vill du ta bort ' + type_name + ' och dess undertyper?';
  }
  if (confirm(message)) {
    location.replace(doc_root + 'pro/sin.php?page=type&type_of=' + type_of + '&delete=' + type_pk);
  }
}


function confirmLongEvent(form) {
  var start_date = validateDateFormat(form.event_start_date.value);
  var start_time = validateTimeFormat(form.event_start_time.value);
  var end_date   = validateDateFormat(form.event_end_date.value);
  var end_time   = validateTimeFormat(form.event_end_time.value);

  if (start_date && start_time && end_date && end_time) {
    var s = start_date.split("-").concat(start_time.split(":"));
    var e = end_date.split("-").concat(end_time.split(":"));
    s = new Date(s[0], s[1], s[2], s[3], s[4], 0);
    e = new Date(e[0], e[1], e[2], e[3], e[4], 0);
    if((e.getTime() - s.getTime()) > 24 * 3600000 - 1) 
      return confirm('Du har registrerat ett evenemang som är längre än ett ' +
                     'dygn - bekräfta att du vill spara detta.');
  }
  return true;
}


function showDistricts(me) {
  var chosen_region = me.value;
  var form = document.forms[0];
  var select_name = 'district';
  var select_box = form.elements[select_name];
  select_box.options.length=0;
  if (regions[chosen_region] != null) {
    var i = 0;
    for (tmp in regions[chosen_region]) {
      select_box.options[i] = new Option(regions[chosen_region][tmp], tmp, false, false);
      i++;
    }
  } else {
    select_box.options[0] = new Option ('Välj först stad', 0, false, false);
  }
}


function showAreas(me) {
  var chosen_district = me.value;
  var form = document.forms[0];
  var select_name = 'area';
  var select_box = form.elements[select_name];
  select_box.options.length=0;
  if (districts[chosen_district] != null) {
    var i = 0;
    for (tmp in districts[chosen_district]) {
      select_box.options[i] = new Option(districts[chosen_district][tmp], tmp, false, false);
      i++;
    }
  } else {
    select_box.options[0] = new Option ('Välj först område', 0, false, false);
  }
}


//function showMusicSubTypes(me) {
//  var chosen_music_type = me.value;
//  if (music_types[chosen_music_type] != null) {
//    var form = document.forms[0];
//    var select_name = 'type_of_music';
//    var select_box = form.elements[select_name];
//    select_box.options.length=0;
//    var i = 0;
//    for (tmp in areas[chosen_town]) {
//      select_box.options[i] = new Option(music_types[chosen_music_type][tmp], tmp, false, false);
//      i++;
//    }
//  }
//}


function updateEventEndDate(me)
{
    var start_date = me.value;
    var form = document.forms[0];
    var end_date = form.elements['event_end_date'];
    if (! end_date.value ||
        start_date.replace(/-/g, "") > end_date.value.replace(/-/g, ""))
    {
        end_date.value = start_date;
    }
}


function updateSearchEventEndDate(me)
{
    var start_date = me.value;
    var form = document.forms[0];
    var end_date = form.elements['end_date'];
    if (! end_date.value ||
        start_date.replace(/-/g, "") > end_date.value.replace(/-/g, ""))
    {
        var date = (parseInt(start_date, 10) + 1).toString();
        end_date.value = date.length == 5 ? "0" + date : date; 
    }
}


function setupSearchEventCalendar(button, dateInput)
{
    Calendar.setup(
        {
            align          : "Br",
            button         : button,
            cache          : true,
            dateStatusFunc : passedDate,
            firstDay       : 1,
            ifFormat       : "%y%m%d",
            inputField     : dateInput,
            range          : [2000, 2100],
            showOthers     : true,
            showsTime      : false,
            singleClick    : false,
            step           : 1
        }
    );
}


function setupEventInputCalendar(button, dateInput, timeInput)
{
    Calendar.setup(
        {
            align          : "Br",
            button         : button,
            cache          : true,
            dateStatusFunc : passedDate,
            firstDay       : 1,
            ifFormat       : "%y-%m-%d",
            inputField     : dateInput,
            inputField2    : timeInput,
            onUpdate       : setEventTimeInput,
            range          : [2000, 2100],
            showOthers     : true,
            showsTime      : true,
            singleClick    : false,
            step           : 1
        }
    );
}


function setEventTimeInput(cal)
{
    var timeInput, hours, minutes;

    if (cal.params.inputField == 
        document.getElementById("event_start_date_input"))
    {
        timeInput = document.getElementById("event_start_time_input");
    }
    else
    {
        timeInput = document.getElementById("event_end_time_input");
    }

    hours   = cal.date.getHours();
    minutes = cal.date.getMinutes();
    hours   = hours < 10   ? "0" + hours : hours;
    minutes = minutes < 10 ? "0" + minutes : minutes;
    timeInput.value = hours + ":" + minutes;
}


function passedDate(date)
{
    // time of given date is 12:00  (12 * 3600 * 1000 = 43200000)
    return (new Date() > date.getTime() + 43200000) ? true : false;
}


/* Register event handler to click save button when Enter key is pressed */
function saveOnEnterEventHandler ()
{
    if (document.addEventListener)   // Mozilla
        document.addEventListener('keypress', saveOnEnter, true);
    else if (document.attachEvent)   // MSIE
        document.attachEvent('onkeypress', saveOnEnter);
    else                             // Old MSIE
        document.onkeypress = saveOnEnter;
}


/* Validate that given date format is any of "[YY]YY-MM-DD" or "[YY]YYMMDD",
 * and do rudimentary date validation (final date validation is assumed to be
 * done by server). If validation succeds, return a date string as
 * "YYYY-MM-DD", otherwise an empty string is returned.
 *
 */

function validateDateFormat (date)
{
    // Allowed input formats: [YY]YY-MM-DD or [YY]YYMMDD
    var dateFormat = /^(\d{2})?(\d{2})-?(\d{2})-?(\d{2})$/

    var validDate  = "";

    if (dateFormat.test (date))
    {
        var cc = RegExp.$1;
        var yy = RegExp.$2;
        var mm = RegExp.$3;
        var dd = RegExp.$4;
        var yyyy;

        // First a basic date validity check
        if (mm > 0 && mm < 13 && dd > 0 && dd < 32)
        {
            // When century was not given: set date to be within the last 80
            // and next 20 years (adjustment for 22th century needed 2079 :) )
            if (cc == "")
            {
                var now = new Date ();
                yy      = parseInt (yy, 10);

                if ((now.getFullYear () + 21) > (yy + 2000))
                  yyyy = yy + 2000;
                else
                  yyyy = yy + 1900;
            }
            else
            {
                yyyy = cc.concat (yy);
            }

            validDate = yyyy + "-" + mm + "-" + dd;
        }
    }

    return validDate;
}


/* Validate that given time format is any of "HH:MM" or "HHMM",
 * and do rudimentary time validation (final validation is assumed to be
 * done by server). If validation succeds, return a time string as
 * "HH:MM", otherwise an empty string is returned.
 *
 */

function validateTimeFormat(time)
{
    // Allowed input formats: HH:MM or HHMM
    var timeFormat = /^(\d{2}):?(\d{2})$/

    var validTime  = "";

    if (timeFormat.test (time))
    {
        var hh = RegExp.$1;
        var mm = RegExp.$2;

        // First a basic time validity check
        if (hh > -1 && hh < 25 && mm > -1 && mm < 60)
        {
            validTime = hh + ":" + mm;
        }
    }
    return validTime;
}


/* Click save when Enter key is pressed except for textareas and buttons */
function saveOnEnter (e)
{
    if (typeof window.event != "undefined")   // MSIE
    {
        e        = window.event;
        e_target = e.srcElement;
    }
    else
    {
        e_target = e.target;
    }

    if (isKeyEnter (e) &&
        e_target.type != 'button' &&
        e_target.type != 'submit' &&
        e_target.type != 'textarea')
    {
        document.getElementById('save').click();
        return false;
    }

    return true;
}


/* Return true if browser is MSIE, if not return false */
function isBrowserMSIE ()
{
    return navigator.userAgent.indexOf ("MSIE") != -1;
}


/* Return true when Enter key ('CR') is pressed */
function isKeyEnter (evt)
{
    var key   = isBrowserMSIE () ? window.event.keyCode : evt.which;
    var keyCR = "\r".charCodeAt(0);
    return key == keyCR;
}
