// Utility functions


function exists(x) {
  return typeof x !== 'undefined';
}


function is_ipad() {
  return navigator.userAgent.match(/iPad/i) != null;
}


function url() {
  return "" + window.location;
}


function get_pdb_id_from_url(loc) {
  var pieces = loc.split('#')[0].split('/');
  var i = pieces.length-1;
  return pieces[i];
}


function create_canvas_dom(central_pad_tag) {
  var top_dom = $(central_pad_tag);
  var w = top_dom.width();
  var h = top_dom.height();
  var canvas = $('<canvas>')
    .css('background-color', 'black')
  top_dom.append(canvas);
  canvas_dom = canvas[0];
  canvas_dom.width = w;
  canvas_dom.height = h;
  return canvas_dom;
}


function stick_in_top_left(
    parent, target, x_offset, y_offset) {
  var top = parent.position().top;
  var left = parent.position().left;
  parent.append(target);
  var w_parent = parent.outerWidth();
  var h_parent = parent.outerHeight();
  target.width(w_parent - 2*x_offset);
  target.height(h_parent - 2*y_offset);
  target.css({
      'position':'absolute',
      'top': top + y_offset,
      'left': left + x_offset,
      'z-index':'9000'
  });
}


function stick_in_center(parent, target, x_offset, y_offset) {
  var top = parent.position().top;
  var left = parent.position().left;
  var w_parent = parent.outerWidth();
  var h_parent = parent.outerHeight();
  parent.append(target);
  var w_target = target.width();
  var h_target = target.height();
  target.css({
      'position':'absolute',
      'top': top + h_parent/2 - h_target/2 - y_offset,
      'left': left + w_parent/2 - w_target/2 - x_offset,
      'z-index':'9000'
  });
}


function in_array(v, w_list) {
  for (var k=0; k<w_list.length; k+=1) {
    if (v == w_list[k]) {
      return true;
    }
  }
  return false;
}


function del_from_array(x, x_list) {
  for (var i=0; i<=x_list.length; i+=1)
    if (x == x_list[i]) {
      x_list.splice(i, 1);
    }
}


function trim(text) {
  return text.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}


function do_nothing() {
  return false;
}


function clone_dict(d) {
  var new_d = {};
  for (var k in d) {
    new_d[k] = d[k];
  };
  return new_d;
}


function clone_list_of_dicts(list_of_dicts) {
  var new_list = [];
  for (var i=0; i<list_of_dicts.length; i+= 1) {
    new_list.push(clone_dict(list_of_dicts[i]));
  }
  return new_list;
}


function equal_dicts(d, e) {
  for (var k in d) {
    if (!k in e) {
      return false;
    }
    if (d[k] != e[k]) {
      return false;
    }
  }
  return true;
}


function random_string(n_char) {
	var chars = 
	   "0123456789abcdefghiklmnopqrstuvwxyz";
	var s = '';
	for (var i=0; i<n_char; i++) {
		var j = Math.floor(Math.random()*chars.length);
		s += chars.substring(j,j+1);
	}
	return s;
}


function random_id() {
  return 'view:' + random_string(6);
}


function get_current_date() {
  var current_view = new Date();
  var month = current_view.getMonth() + 1;
  var day = current_view.getDate();
  var year = current_view.getFullYear();
  return day + "/" + month + "/" + year;
}



