
javascript_document = function (root) {
  if (navigator.userAgent.indexOf('MSIE') != -1) {
    IE_CorrectAlpha_PNG();
  }
  make_right_corner(root);
  // make_toggle_chronique(root);
  make_image_swaps(root);
  // google analytics
  if (_uacct != '') urchinTracker();
}

dojo.addOnLoad( function (evt) { javascript_document(document.body); } );

function to_string(object, name){
  s = name+"={";
  for (item in object){
    try {
      s += "\n  "+ item+": "+object[item];
    }
    catch(e) {
      s += "\n  "+ item+": exception "+e;
    }
  }
  return s+"\n}"
}

function process_javascript(root) {
  var elements = root.getElementsByTagName('script');
  for (var i=0; i<elements.length; i++) {
    eval(elements[i].innerHTML);
  }
}

function insert_flash_title(elem, text, prefix_color, text_color, bg_color, width, flash) {
  if (!flash) {
    var flash='titre.swf';
  }
  var title = new SWFObject(resources_url+"flash/"+flash, elem + "_obj", width, 19, "7", bg_color);
  title.addParam("menu", "false");
  title.addParam("scale","noscale");
  title.addParam("wmode","transparent");
  title.addParam("salign", "L");
  title.addVariable("titre", text);
  title.addVariable("couleur_prefixe", prefix_color);
  title.addVariable("couleur_texte", text_color);
  title.write(elem);
}

function insert_haut_bloc(elem, titre, darkColor, bg_color) {
    var bloc = new SWFObject(resources_url+"flash/haut.swf", elem+"_flash", 270,23, "8", bg_color);
    bloc.addVariable("letitre", titre);
    bloc.addVariable("darkColor", darkColor);
    bloc.write(elem);
}

function make_right_corner(root){
  if (!root) {
    root = document;
  }
  var elements = dojo.html.getElementsByClass('right-corner', root)
  for(var i=0;i < elements.length; i++) {
    var img_over = 'transparent url("'+ resources_url+'images/fonds/acheter_orange1.gif") no-repeat scroll top right';
    var img_out = 'transparent url("'+ resources_url+'images/fonds/acheter_gris.gif") no-repeat scroll top right';
    make_background_swap(elements[i], img_over, img_out);
  }
}

// FLASH RESIZE *******************************************************

var ScreenWidth,ScreenHeight;
function getScreenSize() {
  if (self.innerHeight) // all except Explorer
    {
      ScreenWidth = self.innerWidth;
      ScreenHeight = self.innerHeight;
    }
  else if (document.documentElement && document.documentElement.clientHeight)
    // Explorer 6 Strict Mode
    {
      ScreenWidth = document.documentElement.clientWidth;
      ScreenHeight = document.documentElement.clientHeight;
    }
  else if (document.body) // other Explorers
    {
      ScreenWidth = document.body.clientWidth;
      ScreenHeight = document.body.clientHeight;
    }
}

var documentWidth, documentHeight;
function getDocumentSize() {
  var test1 = document.body.scrollHeight;
  var test2 = document.body.offsetHeight;
  if (test1 > test2) // all but Explorer Mac
    {
      documentWidth = document.body.scrollWidth;
      documentHeight = document.body.scrollHeight;
    }
  else // Explorer Mac;
    //would also work in Explorer 6 Strict, Mozilla and Safari
    {
      documentWidth = document.body.offsetWidth;
      documentHeight = document.body.offsetHeight;
    }
}

function getStyle(el,styleProp)
{
  var x = dojo.byId(el);
  if (x.currentStyle)
    var y = x.currentStyle[styleProp];
  else if (window.getComputedStyle)
    var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
  return y;
}

function getElementHeight(elem) {
  elem = dojo.byId(elem);
  if (!elem) return 0;
  if (elem.offsetHeight)
    xPos = elem.offsetHeight;
  else //op5
    xPos = elem.style.pixelHeight;
  return xPos;
}

function getElementTop(elem) {
  elem = dojo.byId(elem);
  if (!elem) return 0;
  yPos = elem.offsetTop;
  tempEl = elem.offsetParent;
  while (tempEl != null) {
    yPos += tempEl.offsetTop;
    tempEl = tempEl.offsetParent;
  }
  return yPos;
}

// SHOW HIDE FUNCTIONS ************************************************
function show(elem){
  dojo.html.removeClass(elem, 'hidden');
}

function hide(elem){
  dojo.html.addClass(elem, 'hidden');
}

function hidden(elem){
  return dojo.html.hasClass(elem, 'hidden');
}

function toggle(elem){
  if (dojo.html.hasClass(elem, 'hidden')) {
    dojo.html.removeClass(elem, 'hidden');
  } else {
    dojo.html.addClass(elem, 'hidden');
  }
}

function resize(elem, h){
  dojo.html.setStyle(elem, 'height', h+'px');
}

// SWAP FUNCTION ******************************************************

function _active_style(ele, event, name){
  /* use this function on elem.ONMOUSEOVER & elem.ONMOUSEOUT to get an
     elem switching its background between elem.IMG_OVER and
     elem.IMG_OUT */
  if (!event) var event = window.event;
  var img_string = (event.type == 'mouseover')  ? ele.img_over : ele.img_out;
  ele.style[name] = img_string;
}

function _make_swap(elem, over, out, active_func, click_func){
  /* use with two other functions:
      . active_func which tells what to do on mouse over, mouse out
      . click_func which tells what to do on click
   */
  elem.img_over = over;
  elem.img_out = out;
  elem.onmouseover = active_func;
  elem.onmouseout = active_func;
  if (click_func)
    elem.onclick = click_func;
}

function active_background(event){
  _active_style(this, event, 'background');
}

function active_border(event){
  _active_style(this, event, 'border');
}

function active_image(e){
  if (!e) var e = window.event;
  var src_string = (e.type == 'mouseover')  ? this.img_over : this.img_out;
  this.src = src_string;
}

function make_background_swap(elem, over, out, click_func){
  _make_swap(elem, over, out, active_background, click_func);
}

function make_border_swap(elem, over, out, click_func){
  _make_swap(elem, over, out, active_border, click_func);
}

function make_image_swap(elem, over, out, click_func){
  _make_swap(elem, over, out, active_image, click_func);
}

function make_image_swaps(root) {
  var elements = dojo.html.getElementsByClass('swap', root);
  if (elements){
    for(var i=0;i < elements.length; i++) {
      var img_src = elements[i].src.split('.');
      img_src[img_src.length-2] += '_over';
      var img_over = img_src.join('.');
      var img_out = elements[i].src;
      make_image_swap(elements[i], img_over, img_out);
    }
  }
}

function make_background_swaps(root) {
  var elements = dojo.html.getElementsByClass('bg-swap', root);
  if (elements){
    for(var i=0;i < elements.length; i++) {
      var img_src = elements[i].style['background'].split('.');
      img_src[img_src.length-2] += '_over';
      var img_over = img_src.join('.');
      var img_out = elements[i].style['background'];
      make_background_swap(elements[i], img_over, img_out);
    }
  }
}

// AJAX FUNCTIONS *******************************************

function to_json(data){
  dojo.require('dojo.json');
  var rdata = {}
  for (key in data) {
    rdata[key]= dojo.json.serialize(data[key]);
  }
  return rdata;
}

// NEW ////////
function clever_ajax_handler(elem_on_success, elem_on_error, func_on_success) {
  // if error, display and modify 'elem_on_error'
  // if request OK, display 'elem_on_success' and call 'func_on_success'
  // if elem_xxx not provided, use 'elem_on_success' instead
  // use same element to display errors and sucess if only one provided
  if(!elem_on_error)
    elem_on_error = elem_on_success;
  return function(type, res, evt) {
    // get DOM
    elem_on_success = dojo.byId(elem_on_success);
    elem_on_error = dojo.byId(elem_on_error);
    // process response
    if (type =='error') {
      toggle_cursor(false, "Received an error");
      // on bad request: display error text in element 'elem_on_error'
      if (evt.status==400){
	hide(elem_on_success);
	show(elem_on_error);
	elem_on_error.innerHTML = evt.responseText;
	process_javascript(elem_on_error);
      // on forbidden: redirect to login page
      } else if (evt.status==403) {
	document.location = evt.responseText;
      // on internal (unexpected): display full error
      } else if (evt.status==500)
	document.write(evt.responseText);
      // on others: display alert dialog
      else {
	alert(res.message);
      }
    } else {
      try {
	toggle_cursor(false, "Formatting doc");
	if (func_on_success){
	  func_on_success(res);
	} else {
	  hide(elem_on_error);
	  show(elem_on_success);
	  elem_on_success.innerHTML = res;
	  process_javascript(elem_on_success);
	}
      }
      catch(e){
	alert(e+'in:\n'+res);
      }
    }
    toggle_cursor(true, "Ajax request completed");
  }
}

// specific handlers
function on_new_member_comment(res){
  close_dialog();
  comments = dojo.byId('list-comments');
  comments.innerHTML = res + comments.innerHTML;
}

function on_new_band_comment(res){
  close_dialog();
  comments = dojo.byId('list-comments');
  if (!comments){
    comments = dojo.byId('community');
    comments.innerHTML = "Nouveau billet!" + comments.innerHTML;
  } else {
    comments.innerHTML = res + comments.innerHTML;
  }
}

function on_new_member_blog(res){
  close_dialog();
  comments = dojo.byId('ajax-body');
  comments.innerHTML = '<div>Article Posté</div>' + comments.innerHTML;
}

function on_new_band_blog(res){
  close_dialog();
  comments = dojo.byId('news');
  comments.innerHTML = res;
}

function clever_update_element(elem_on_success, url, sendContent, elem_on_error, func_on_success){
  // execute query defined by 'url'
  // see clever_ajax_handler for desc on elem_xxx
  if (!sendContent) var sendContent={};
  sendContent['json'] = true;
  dojo.require('dojo.io.*');
  dojo.io.bind({
    url: ajax_url + url,
	   handler: clever_ajax_handler(elem_on_success, elem_on_error, func_on_success),
	   content: to_json(sendContent),
	   method: 'post'});
  toggle_cursor(false, "Sending request");
}

function clever_send_form(elem_on_success, form, url, data, elem_on_error, func_on_success) {
  // gather all input from form (except button), add 'data' if provided and submit
  // see clever_ajax_handler for desc on elem_xxx
  if (!data) var data={};
  dojo.require('dojo.io.*');
    dojo.io.bind({
      url: ajax_url + url,
	   handler: clever_ajax_handler(elem_on_success, elem_on_error, func_on_success),
	   content: data,
	   formNode: dojo.byId(form),
	   method: 'post'});
  toggle_cursor(false, "Sending request");
}

// OLD ///////
function ajax_handler(element, sentContent) {
  return function(type, res, evt) {
    if (type =='error') {
      if (evt.status==403)
	document.location = evt.responseText;
      else if (evt.status==500)
	document.write(evt.responseText);
      else
	alert(res.message);
    } else {
      toggle_cursor(false, "Formatting doc");
      var elementHTML = dojo.byId(element);
      elementHTML.innerHTML = res;
      // manage body and dialog visibility
      if (element == 'dialog') {
	dojo.html.addClass('ajax-body', 'hidden');
	dojo.html.removeClass('dialog', 'hidden');
      } else if (element == 'ajax-body') {
	dojo.html.addClass('dialog', 'hidden');
	dojo.html.removeClass('ajax-body', 'hidden');
      }
      process_javascript(elementHTML);
      javascript_document(elementHTML);
      toggle_cursor(true, "ajax request completed");
    }
  }
}

function update_element(element, url, sendContent){
  if (!sendContent) var sendContent={};
  sendContent['json'] = true;
  dojo.require('dojo.io.*');
  dojo.io.bind({
    url: ajax_url + url,
	   handler: ajax_handler(element),
	   content: to_json(sendContent),
	   method: 'post'});
  toggle_cursor(false, "Sending request");
}

function send_form(element, form, url, data, loading) {
  if (!data) var data={};
  dojo.require('dojo.io.*');
  if (!loading){
    dojo.io.bind({
      url: ajax_url + url,
	   handler: ajax_handler(element),
	   content: data,
	   formNode: dojo.byId(form),
	   method: 'post'});
  }
  else{
    dojo.io.bind({
      url: ajax_url + url,
	   content: data,
	   formNode: dojo.byId(form),
	   method: 'post',
	   load: loading});
  }
  toggle_cursor(false, "Sending request");
}

function swap_ajax(element, model, id, view, data){
  toggle_cursor(false, "Request "+view);
  if (!data)
    var data = {};
  data["model"] = model;
  data["id"] = id;
  data["view"] = view;
  if (admin) data['admin'] = true;
  // make ajax call
  update_element(element, '/object-view/', data);
}

function open_popup(url, params, width, height) {
  if (!width) var width=515;
  if (!height) var height=210;
  var values = [];
  for (key in params) {
    if (key!='toJSONString')
      values.push(key + '=' + params[key]);
  }
  var get_url = url + '?' + values.join('&');
  window.open(get_url, '_blank', 'status=0,toolbar=0,menubar=0,scrollbars=0,resizable=yes,width='+width+',height='+height);
}

function open_playtv(alire) {
  if (!alire) {
    alire = ''
  }
  var url = peopulse_url + 'playtv/?alire='+ alire;
  window.open(url, 'playtv', 'status=0,toolbar=0,menubar=0,scrollbars=0,type=fullWindow,fullscreen');
}

// CURSOR FUNCTIONS ********************************************

// ADDED by MANU. Use boolean parameter to ensure its display at accurate time
function toggle_cursor(hide, msg){
  var loading = dojo.byId("loading");
  if (self.running_to){
    clearTimeout(self.running_to);
    self.running_to = undefined;
  }
  // hidding request will occur after a timeout
  // do not provide 'hide' to bypass timeout
  if (hide){
    self.running_to = setTimeout(hide_cursor, 1000);
  } else {
    if (!msg) var msg = "Loading";
    loading.innerHTML = loading.innerHTML.replace('...', '')+ msg+"<br>...";
    dojo.html.addClass(document.body, 'waiting');
    dojo.html.removeClass(loading, 'hidden');
  }
}

function hide_cursor(){
  var loading = dojo.byId("loading");
  loading.innerHTML = "";
  dojo.html.removeClass(document.body, 'waiting');
  dojo.html.addClass(loading, 'hidden');
}


// CONCERTS **********************************************************
var toggled = 'none';
function toggle_all(element){
  var concertslist = dojo.html.getElementsByClass( 'concerts', element.parentNode.parentNode)[0];
  var concerts = concertslist.getElementsByTagName( 'li');
  if (toggled != 'all'){
    toggled = 'all';
    element.innerHTML = "tout replier";
    for (var i=0; i<concerts.length; i++){
      show_concert(concerts[i]);
    }
  }else {
    toggled = 'none';
    element.innerHTML = "tout d&eacute;plier";
    for (var i=0; i<concerts.length; i++){
      hide_concert(concerts[i]);
    }
  }
}

function toggle_concert(element){
  /* if the element to display id the current one: do nothing */
  var info = dojo.html.getElementsByClass( 'concert-info', element)[0];
  if (hidden(info)){
    show_concert(element);
  } else {
    hide_concert(element);
  }
}

function show_concert(element){
  var info = dojo.html.getElementsByClass( 'concert-info', element)[0];
  dojo.html.addClass(element, 'expanded');
  show(info);
}

function hide_concert(element){
  var info = dojo.html.getElementsByClass( 'concert-info', element)[0];
  dojo.html.removeClass(element, 'expanded');
  hide(info);
}

/* PHOTOS ************************************************************/
index = 0
function next_image(max){
  index = (index+1)%max;
  update_image(index);
}

function prev_image(max){
  index = index==0 ? (max-1): index-1;
  update_image(index);
}

function update_image(new_index, src){
  index = new_index;
  if (src)
    dojo.byId('viewed').src = src;
  else{
    var imgs = dojo.html.getElementsByClass( 'pointer', dojo.byId('vignettes'));
    dojo.byId('viewed').src = imgs[index].src;
  }
}

/* CHRONIQUES *******************************************************/
function toggle_chronique(class_list,selected){
  root = dojo.byId(class_list);
  var chroniques_arrows = dojo.html.getElementsByClass( class_list+"-arrow", root);
  var chroniques_header = dojo.html.getElementsByClass( class_list+"-header", root);
  var chroniques_details = dojo.html.getElementsByClass( class_list+"-details", root);
  // these 3 tabs should have same size
  for (var i=0; i<chroniques_arrows.length; i++){
    if (selected && (selected == chroniques_arrows[i]) || (!selected && (i==0))) {
      // toggle selected element
      var original = chroniques_arrows[i].src;
      var start = original.indexOf(resources_url);
      var index = original.indexOf('_exp');
      if (index != -1){
	// '_exp' is present: already expanded, so collapse it
	chroniques_arrows[i].src = original.substring(start,index)+ original.substring(index+4, original.length);
	hide(chroniques_details[i]);
	show(chroniques_header[i]);
      }
      else{
	// not expanded yet: add '_exp'
	var extension = original.lastIndexOf('.');
	chroniques_arrows[i].src = original.substring(start,extension) + '_exp' + original.substring(extension, original.length);
	hide(chroniques_header[i]);
	show(chroniques_details[i]);
      }
    } else {
      // collapse all other element
      var original = chroniques_arrows[i].src;
      var start = original.indexOf(resources_url);
      var index = original.indexOf('_exp');
      if (index != -1){
	// '_exp' is present, element has been previously expanded, collapse it
	chroniques_arrows[i].src = original.substring(start,index)+ original.substring(index+4, original.length);
	hide(chroniques_details[i]);
	show(chroniques_header[i]);
      }
    }
  }
}

function make_toggle_chronique(root) {
  var elements = dojo.html.getElementsByClass( 'toggle-first-chronique', root);
  for(var i=0;i < elements.length; i++) {
    // extract the chronique class id that should be the only other class name
    toggle_chronique(elements[i].id);
  }
}

// SIDE-BAR **********************************************************
/* potes ************************************************************/
function toggle_mini_small(elem){
  var mini_comment = elem.parentNode;
  //  dojo.html.replaceClass(mini_comment, 'mini-height-50', 'mini-height-auto');
  var mini_full = dojo.html.getElementsByClass('mini-full', mini_comment)[0];
  hide(elem);
  show(mini_full);
}

function toggle_mini_full(elem){
  var mini_comment = elem.parentNode;
  //  dojo.html.replaceClass(mini_comment, 'mini-height-auto', 'mini-height-50');
  var mini_small = dojo.html.getElementsByClass('mini-small', mini_comment)[0];
  hide(elem);
  show(mini_small);
}

/* FLASH sorter adapeter */
function submit_order(url, order){
  data = {'order' : order};
  dojo.io.bind({
    url: ajax_url + url,
	   content: data,
	   handler: ajax_handler('dialog'),
	   method: 'post'});
}

