/* French initialisation for the jQuery UI date picker plugin. */
/* Written by Keith Wood (kbwood{at}iinet.com.au) and Stéphane Nahmani (sholby@sholby.net). */
function getTimePicker(name){
  return parseInt($.datepicker.formatDate("@", $(name).datepicker('getDate')));
}

function getTimePicker24h(name){
  return getTimePicker(name) + 3600 * 24 * 1000;
}

$.ajaxSetup({'async': false});

function trace(obj) {
  if (typeof console != "undefined" &&
      !(typeof DEBUG != "undefined" && DEBUG))
    console.log(obj);
  return obj;
}

function l_() {
  var args = arguments;
  if (args.length < 1 || args.length > 2)
    throw "Error: l_([\"arg1 arg2 ...\",] \"body\")";
  var body = args[args.length - 1];
  return Function.apply(null,
			(args.length == 1 ? [] : args[0].split(" "))
			.concat(body.indexOf(";") == -1 ?
				"return "+body+";" : body));
}

function rendertemplate(list, template, templateempty) {
  // the list's empty
  if (list.length == 0)
    return $(templateempty).html();
  var b = "";
  for (var i in list) {
    var item = list[i];
    b += $(template).html()
      .replace(/{([a-z0-9_| ]+)}/gi, function(s, key) {
	var parts = $.map(key.split("|"), $.trim);
	if (!(parts[0] in item)) return "";
	// transform the attribute using the optional tag
	return (parts.length == 1 ?
		item[parts[0]] :
		(eval(parts[1]))(item[parts[0]]));
      });
  }
  return b;
}

function objtoarray(o) {
  var r = [];
  for (var i in o)
    r.push(o[i]);
  return r;
}

function findid(list, id, defaultvalue) {
  if (typeof defaultvalue == "undefined")
    defaultvalue = null;
  for (var i in list)
    if (list[i]["id"] == id)
      return list[i];
  return defaultvalue;
}
function timedelta(d, x) {
  d.setTime(d.getTime()+x);
  return d;
}


(function($) {
  // trace
  $.fn.trace = function() {
    this.each(function() {
      trace($(this).text());
    });
    return this;
  };

  // misc
   $.identity = function(obj) { return obj; };
   $.now = function() { return (new Date()).getTime(); };
  $.redirect = function(url) {
    window.onbeforeunload = null;
    document.location.href = url;
  };
  $.isLanguage = function(lang) {
    return (typeof navigator.language != "undefined" ?
	    navigator.language :
	    navigator.userLanguage).search(new RegExp(lang, "i")) != -1;
  };

   $.isDate = function(obj) { return typeof obj.getDate != "undefined";};

  $.max = function(arr, fun, inv) {
    if (arr.length == 0)
      return null;
    var res = fun(arr[0]);
    if (typeof inv == "undefined") {
      for (var i in arr) {
	var val = fun(arr[i]);
	if (val > res) res = val;
      }
    } else {
      for (var i in arr) {
	var val = fun(arr[i]);
	if (val < res) res = val;
      }
    }
    return res;
  };
   $.min = function(arr, fun) { return max(arr, fun, 1); };

  // sprintf by Sabin Iacob
  var formats = {
    '%': function(val) {return '%';},
    'b': function(val) {return  parseInt(val, 10).toString(2);},
    'c': function(val) {return  String.fromCharCode(parseInt(val, 10));},
    'd': function(val) {return  parseInt(val, 10) ? parseInt(val, 10) : 0;},
    'u': function(val) {return  Math.abs(val);},
    'f': function(val, p) {return  (p > -1) ? Math.round(parseFloat(val) * Math.pow(10, p)) / Math.pow(10, p): parseFloat(val);},
    'o': function(val) {return  parseInt(val, 10).toString(8);},
    's': function(val) {return  val;},
    'x': function(val) {return  ('' + parseInt(val, 10).toString(16)).toLowerCase();},
    'X': function(val) {return  ('' + parseInt(val, 10).toString(16)).toUpperCase();}
  };

  var re = /%(?:(\d+)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosxX])/g;

  var dispatch = function(data){
    if(data.length == 1 && typeof data[0] == 'object') { //python-style printf
      data = data[0];
      return function(match, w, p, lbl, fmt, off, str) {
	return formats[fmt](data[lbl]);
      };
    } else { // regular, somewhat incomplete, printf
      var idx = 0; // oh, the beauty of closures :D
      return function(match, w, p, lbl, fmt, off, str) {
	return formats[fmt](data[idx++], p);
      };
    }
  };
  $.sprintf = function(format) {
    var argv = Array.apply(null, arguments).slice(1);
    return format.replace(re, dispatch(argv));
  };


})(jQuery);

Array.prototype.contains = function(e){
  for (var i = 0; i < this.length; i++)
    if (this[i] == e)
      return true;
  return false;
};


function Dialog(){ }

// For information dialog
Dialog.defaultTitle = "Information";
Dialog.defaultTime = 5;
Dialog.title = Dialog.defaultTitle;
Dialog.time = Dialog.defaultTime;
Dialog.dialogInfo = '#dialog_info';
Dialog.timeout = null;

Dialog.showInfo = function(msg, title){
  if(typeof(Dialog.dialogInfo) == "string")
    Dialog.dialogInfo = $(Dialog.dialogInfo);
  if (!Dialog.dialogInfo[0].className){
    Dialog.dialogInfo.dialog({
      bgiframe: true,
      resizable: false,
      modal: false,
      buttons: { "Ok": function() { Dialog.dialogInfo.dialog("close"); } },
      close: function(event, ui) { },
      open: function(event, ui) {
        var d = Dialog.dialogInfo;
        d.dialog('option', 'title', Dialog.title + " (" + Dialog.time + ")");
        setTimeout(Dialog.refreshDialogInfo, 1000);
      },
      autoOpen: false
    });
  }
  if (title)
    Dialog.title = title;
  Dialog.time = Dialog.defaultTime;
  Dialog.dialogInfo.html(msg);
  Dialog.dialogInfo.dialog('option', 'title', Dialog.title + " (" + Dialog.time + ")");
  Dialog.dialogInfo.dialog('open');
};

Dialog.refreshDialogInfo = function(){
  Dialog.time--;
  if (Dialog.time <= 0){
    Dialog.dialogInfo.dialog('close');
    return;
  }
  Dialog.dialogInfo.dialog('option', 'title', Dialog.title + " (" + Dialog.time + ")");
  setTimeout(Dialog.refreshDialogInfo, 1000);
};

//For modal dialog
Dialog.dialogModal = '#dialog_selector';
Dialog.OK = 1;
Dialog.CANCEL = 2;
Dialog.answer = Dialog.CANCEL;
Dialog.buttons = null;
Dialog.btnOk = function(){ if (Dialog.buttons && (Dialog.buttons.length > 1)) return Dialog.buttons[1]; return null;};
Dialog.btnCancel = function(){ if (Dialog.buttons && Dialog.buttons.length) return Dialog.buttons[0]; return null;};
Dialog.closeModalOk = function(){ Dialog.answer = Dialog.OK; Dialog.dialogModal.dialog("close"); };
Dialog.closeModalCancel = function(){ Dialog.answer = Dialog.CANCEL; Dialog.dialogModal.dialog("close"); };
Dialog.defaultOptions = {
    bgiframe: true,
    resizable: false,
    modal: true,
    //show: 'slide',
    title: 'Information',
    buttons: {
      'Cancel': Dialog.closeModalCancel,
      'Validate': Dialog.closeModalOk
    },
    open: function(){ Dialog.buttons[1].focus(); },
    close: function(event, ui) { trace(Dialog.answer); },
    autoOpen: false
    //closeOnEscape: false
    //position: ['left', 'center']
  };

Dialog.setOptions = function(options){
  for (var opt in options)
    Dialog.dialogModal.dialog('option', opt, options[opt]);
};

Dialog.setDefaultOptions = function(){
  Dialog.dialogModal.dialog(Dialog.defaultOptions);
};

Dialog.isOpen = function(){
  if (typeof(Dialog.dialogModal) == "string")
    return false;
  return Dialog.dialogModal.dialog("isOpen");
};

Dialog.showModal = function(msg, options){
  if(typeof(Dialog.dialogModal) == "string")
    Dialog.dialogModal = $(Dialog.dialogModal);
  //if (!Dialog.dialogModal[0].className)
    Dialog.setDefaultOptions();
  if (options)
    Dialog.setOptions(options);
  Dialog.dialogModal.html(msg);
  Dialog.answer = Dialog.CANCEL;
  Dialog.buttons = $(Dialog.dialogModal[0].parentNode).find('button');
  Dialog.dialogModal.dialog('open');
};

function Cookie() {}

Cookie.create = function(name,value,days) {
  var expires = "";
  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = "; expires=" + date.toGMTString();
  }
  document.cookie = name + "=" + value + expires + "; path=/";
};

Cookie.read = function(name, def) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ')
      c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0)
      return c.substring(nameEQ.length,c.length);
  }
  return def;
};

Cookie.erase = function(name) {
  trace("erase cookie");
  Cookie.createCookie(name,"",-1);
};


