var cancel_func = null;
var my_prompt = null;

/*var _doc_root = document.getElementById("functions_script").src;
_doc_root = _doc_root.substr(0, _doc_root.length - 21);*/
_doc_root = document.getElementsByTagName("base")[0].href;
_doc_root = _doc_root.substr(0, _doc_root.length-1);

function in_array (needle, haystack, argStrict){var key = '', strict = !!argStrict;if (strict) {for (key in haystack) {if (haystack[key] === needle) {return true;}}} else {for (key in haystack) {if (haystack[key] == needle) {return true;}}}return false;}
function in_array_nc (needle, haystack, argStrict){var key = '', strict = !!argStrict;if (strict) {for (key in haystack) {if (haystack[key].toLowerCase() === needle.toLowerCase()) {return true;}}} else {for (key in haystack) {if (haystack[key].toLowerCase() == needle.toLowerCase()) {return true;}}}return false;}

function get_iframe_document(id)
{
  if (typeof(id) == "object" && id.length > 0) var i = id[0];
  else  var i = document.getElementById(id);
  
  if (i.contentDocument)
    var d = i.contentDocument;
  else if (i.contentWindow)
    var d = i.contentWindow.document;
  else
    var d = window.frames[id].document;
  return d;
}

/* INPUT */
function input_change(e)
{
  var obj = get_target(e);
  obj.className = obj.className.replace(/input_changed/gi, "");
  set_input_changed(obj);
}
function set_input_changed(obj)
{
  var changed = (
      (obj.getAttribute("short_date") != undefined && mk_short_date(obj.getAttribute("short_date")) != mk_short_date(obj.getAttribute("def_short_date")) )
        ||
      (!obj.getAttribute("short_date") && obj.value != obj.getAttribute("def_val"))
   );

  var c = false;
  if ($(obj).parent().is(".input_long")) c = "input_long_changed";
  if ($(obj).parent().is(".input_short")) c = "input_short_changed";

  if (c)
  {
    if (changed) 
    {
      $(obj).addClass("input_changed").addClass(c);
      $(obj.img).fadeIn(300);
    } else
    {
      $(obj.img).fadeOut(200, function() { $(obj).removeClass(c); });
    }
  }
}
function reset_input(e)
{
  var obj = get_target(e);
  obj = obj.input;
  $(obj).val($(obj).attr("def_val")).removeClass("input_changed");
  if (obj.getAttribute("short_date")) obj.setAttribute("short_date", obj.getAttribute("def_short_date"));
  set_input_changed(obj);
}

function check_keys(e)
{
  switch(e.keyCode)
  {
    case 27: 
      if (cancel_func) 
        cancel_func();
      cancel_func = null;
      no_ajax();
      if (close_calendar) close_calendar();
      cancelEvent(e);
      if (my_prompt && my_prompt.cancel_func) my_prompt.cancel_func();
      $("#fade").fadeOut(200);
      break;
  }
}

function class_my_prompt(v, a, ok_func)
{
  this.input_idx = 0;
  
  this.ok_func = function()
  {
    if (ok_func) 
    {
      if (this.input_names !== null)
      {
        var v = Array();
        $("div#my_prompt_inputs input").each(function()
        {
          v.push($(this).val());
        });
        ok_func(v);
      } else
      {
        var v = $("div#my_prompt_inputs input").val();
        ok_func(v==""?null:v);
      }
    }
    else this.cancel_func();
  };
  
  this.cancel_func = function() 
  { 
    $("#div_my_prompt").fadeOut(200);
    $("#fade").fadeOut(200);
  };
  
  this.add_input = function(a)
  {
    var name_html = this.input_names ? "<strong>" + this.input_names[this.input_idx] + "</strong><br />" : "";
    $("div#my_prompt_inputs").append(name_html + "<div class='input_long'><input onkeydown='if(event.keyCode==13) my_prompt.ok_func();' type='text' id='input_my_prompt_" + this.input_idx + "' value='" + a + "' />");
    this.input_idx++;
  }
  $("#fade").fadeIn(300);

  $("div#my_prompt_inputs").html("");
  this.input_names = arguments.length > 3 ? arguments[3] : null;
  if (arguments.length > 3)
  {
    for(n in a)
      this.add_input(a[n]);
  } else
    this.add_input(a);
  
  $("#div_my_prompt").attr("ask_obj", this).fadeIn(300).centerScreen();
  $("#content_my_prompt").html(v);
}
function get_target(e)
{ 
  var e = e || window.event;
  if (e == null) return null;
  return e.target ? e.target : e.srcElement;
}
function get_scroll_top()
{
  return document.documentElement.scrollTop || document.body.scrollTop;
}

/* Dates */

function input_date_focus(e)
{
  var obj = get_target(e);
  obj.has_focus = true;
  obj.long_date = obj.value;
  obj.value = obj.getAttribute("short_date");
}
function input_date_blur(e)
{
  var obj = get_target(e);
  obj.has_focus = false;
  if (obj.value == "") { obj.setAttribute("short_date", ""); obj.value = ""; return; }
  var new_date = mk_date(obj.value);
  if (!new_date || typeof(new_date) == "undefined") return false; // Dit voorkomt dat als je 2 keer de functie uitvoert, de waarde kapot gaat
  if (new_date)
  {
    obj.setAttribute("short_date", mk_short_date(obj.value));
    obj.value = new_date;
  } else
  {
    obj.value = obj.long_date;
  }
}
function set_input_date(input, epoch)
{
  if (!epoch || epoch == "") { input.value = ""; input.setAttribute("short_date", ""); return; }
  var d = new Date(); 
  d.setTime(epoch*1000);
  var dag = d.getDate();
  var maand = d.getMonth()+1;
  var tmp = mk_short_date(dag + " " + maand + " " + d.getFullYear());
  input.value = tmp;
  input.setAttribute("short_date", tmp);
  input_date_blur(input);
}
function input_def_val_focus(e)
{
  var e = e || windows.event;
  var obj = e.target || e.srcElement;
  calert($(obj).attr("actived"));
  if (!$(obj).attr("actived"))
    $(obj).removeClass("grayed").val("").attr("actived", true);
}
function input_def_val_blur(e)
{
  var obj = get_target(e);
  if (!$(obj).attr("actived") || $(obj).val() == "") 
    $(obj).addClass("grayed").val($(obj).attr("empty_value")).removeAttr("actived");
}
function str_splitter(s)
{
  if (s == undefined) return false;
  var positions = Array();
  pos = s.indexOf("-"); pos = pos>0?pos:9999; positions.push(pos);
  pos = s.indexOf(" "); pos = pos>0?pos:9999; positions.push(pos);
  pos = s.indexOf("/"); pos = pos>0?pos:9999; positions.push(pos);
  pos = s.indexOf("\\"); pos = pos>0?pos:9999; positions.push(pos);
  pos = s.indexOf(","); pos = pos>0?pos:9999; positions.push(pos);
  pos = s.indexOf("."); pos = pos>0?pos:9999; positions.push(pos);
  positions.sort();
  pos = positions[0];
  return pos==9999?false:pos;
}
function get_dag(d)
{
  d = d > 7 ? d-7 : (d < 0 ? d + 7 : d);
  return dagen[d];
}
function extract_date(date)
{
  if (date == "" || str_splitter(date) == false) return null;
  var tmpdate = date;
  var dag = tmpdate.substr(0, str_splitter(tmpdate)).match(/[0-9]+/g);
  if (dag == null) return null;
  dag = dag[0];
  if (arguments[1]) dag -= arguments[1];
  if (dag.length > 0 && dag[0] == "0") dag = dag.substr(1);
  tmpdate = tmpdate.substr(str_splitter(tmpdate) + 1);
  var tmp_split = str_splitter(tmpdate); tmp_split = tmp_split?tmp_split:tmpdate.length;
  var maand = tmpdate.substr(0, tmp_split).match(/[0-9]+/g);
  if (!maand)
  {
    var maand = String(tmpdate.substr(0, tmp_split).match(/[a-zA-Z]+/g));
    for (n in maanden)
      if (maanden[n].toLowerCase()==maand.toLowerCase()
        || maanden[n].toLowerCase().indexOf(maand.toLowerCase()) === 0) { maand = n- -1; break; }
  }
  if (isNaN(maand)) return null;
  var jaar = tmpdate.substr(str_splitter(tmpdate) + 1).match(/[0-9]{2,4}/g);
  var d = new Date();
  if (jaar == null) jaar = d.getFullYear();
  d.setDate(1);
  d.setYear(jaar); d.setMonth(maand-1); d.setDate(dag);
  return d;
}
function mk_date(date)
{
  var d = extract_date(date);
  if (!d) return null;
  if (arguments[2]) arguments[2].short_date = d.getDate() + " " + (d.getMonth()+1) + " " + d.getFullYear();
  return get_dag(d.getDay()-1) + " " + d.getDate() + " " + maanden[d.getMonth()] + " "  + d.getFullYear();
}
function hookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)
  {
    if(eventName == 'mousewheel')
      element.addEventListener('DOMMouseScroll', callback, false);  
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
    element.attachEvent("on" + eventName, callback);
}

function unhookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.removeEventListener)
  {
    if(eventName == 'mousewheel')
      element.removeEventListener('DOMMouseScroll', callback, false);  
    element.removeEventListener(eventName, callback, false);
  }
  else if(element.detachEvent)
    element.detachEvent("on" + eventName, callback);
}
function mk_short_date(date)
{
  if (typeof(date) == "string")
  {
    var d = extract_date(date);
    if (!d) return null;
  } else d = date;
  var dag = d.getDate();
  var maand = d.getMonth()+1;
  return dag + " " + maand + " " + d.getFullYear();
}
function dates_before_submit()
{
  $("input[short_date]").each(function()
  {
    $(this).trigger("focus");//val($(this).attr("short_date"));
  });
}
function cancelEvent(e)
{
  e = e ? e : window.event;
  if(e.stopPropagation)
    e.stopPropagation();
  if(e.preventDefault)
    e.preventDefault();
  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
}

/* SYSTEM */
Date.prototype.getWeekNr = function (dowOffset) 
{
  dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
  var newYear = new Date(this.getFullYear(),0,1);
  var day = newYear.getDay() - dowOffset; //the day of week the year begins on
  day = (day >= 0 ? day : day + 7);
  var daynum = Math.floor((this.getTime() - newYear.getTime() -
  (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
  var weeknum;
  if(day < 4) 
  {
    weeknum = Math.floor((daynum+day-1)/7) + 1;
    if(weeknum > 52) 
    {
      nYear = new Date(this.getFullYear() + 1,0,1);
      nday = nYear.getDay() - dowOffset;
      nday = nday >= 0 ? nday : nday + 7;
  
      weeknum = nday < 4 ? 1 : 53;
    }
  }
  else weeknum = Math.floor((daynum+day-1)/7);
  return weeknum;
};
function calert(s)
{
  if (typeof(console) != "undefined")
    console.log(s);
}
function remove_img(element_id)
{
  var img = $("img#" + element_id).attr("src");
  var url = "modules/ajax/remove_img.php?img=" + escape(img);
  new ajax_json(url, function(data)
  {
    $("img#" + element_id).parent().fadeOut(300, function() { $(this).attr("src", "");});//.next().hide(); });
  });
}
function melt_name(v,t,a)
{
  if (t=="") return v + " "+ a;
  else return v + " " + t + " " + a;
}
function hide_group_members(obj)
{
  $(obj).closest(".members").hide(300);
  $("div.members").each(function()
  {
    $($(this)[0].obj).removeClass("opened");
  });
  $(document).unbind("click", group_members_doc);
}
function group_members_doc(e)
{
  var target = get_target(e.originalEvent);
  if ($(target).closest("div.members").length <= 0)
    hide_group_members($("div.members div"));
}
function show_group_members(obj)
{
  $.timeout(function() { $(document).bind("click", group_members_doc); }, 10);
  
  var info_obj = $(obj).parent().find("div.members");
  if (info_obj.length <= 0)
  {
    var url = "./modules/ajax/groups_get_members.php?group_ID=" + $(obj).closest(".groep").attr("group_ID");
    new ajax_json(url, function(xml)
    {
      var img;
      $(obj).parent().append("<div class='members corner_5' />");
      var info_obj = $(obj).parent().find("div.members");
      info_obj[0].obj = obj;
      $(obj).addClass("opened");
      info_obj.append("<div class='close'><span onclick='hide_group_members(this);'>x</span></div>");
      var l = xml.json.leden;
      for (n in l)
      {
        img = l[n].pasfoto ? "<img class='pasfoto' src='./_data/pasfotos/50/" + l[n].ID + ".png' />" : "<img class='no_pasfoto' src='./webimages/blank.gif'>";
        info_obj.append("<a class='corner_5' href='" + _doc_root + "/profiel/" + l[n].ID + "/'>" + img + melt_name(l[n].voornaam, l[n].tussenvoegsel, l[n].achternaam) + "</a>");
      }
      info_obj.show(400);
    });
  } else
  {
    $(obj).addClass("opened");
    info_obj.show(400);
  }
}
function group_join(user_ID, group_ID, v)
{
  var url = "./modules/ajax/groups_join.php?user_ID=" + user_ID + "&group_ID=" + group_ID + "&v=" + v;
  new ajax_json(url, "r");
}

function hookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)
  {
    if(eventName == 'mousewheel')
      element.addEventListener('DOMMouseScroll', callback, false);  
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
    element.attachEvent("on" + eventName, callback);
}
function unhookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.removeEventListener)
  {
    if(eventName == 'mousewheel')
      element.removeEventListener('DOMMouseScroll', callback, false);  
    element.removeEventListener(eventName, callback, false);
  }
  else if(element.detachEvent)
    element.detachEvent("on" + eventName, callback);
}

function jquery_selector_escape(str)
{
  return str.replace(/([\!\"\#\$\%\&\'\(\)\*\+\,\.\/\:\;\<\=\>\?\@\[\\\]\^\`\{\|\}\~])/g, "\\$1");
}
