jQuery.noConflict = function() { return jQuery; };

var anchor = document.location.toString();
var fid;
if(anchor.match('#')) {
  anchor = anchor.split('#')[1];
} else {
  anchor = '';
}

function loadMap() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    map.setCenter(new GLatLng(60.161508, 24.90504), 14);
    map.addControl(new GSmallZoomControl());
    var marker = new GMarker(new GLatLng(60.161508, 24.905040));
    map.addOverlay(marker);
  }
}

$(window).resize(setFooter);

$(document).ready(function() {

  setFooter();

  $('#contact-link').click(showContactForm);
  $('#contact-form-close').click(hideContactForm);
  $('#contact-form-submit').click(handleContactForm);

  $('.exove-form-form').submit(handleExoveForm);

  if(typeof GUnload == 'function') {
    loadMap();
  }

  if(anchor != '') {
    var tst = $('#' + anchor).prevAll().length / 2;
    $(".accordion").accordion({
      header: 'h3',
      alwaysOpen: false,
      active: tst
    });
  } else {
    $(".accordion").accordion({
      header: 'h3',
      alwaysOpen: false,
      active: false
    });
  }

  $('.accordion .main-column-4').height('auto').css('overflow', 'visible');

  $(".carousel").jCarouselLite({
    btnNext: ".carousel-next",
    btnPrev: ".carousel-prev",
    visible: 2,
    btnGo: [".carousel-navi-button-0",
	    ".carousel-navi-button-1",
	    ".carousel-navi-button-2",
	    ".carousel-navi-button-3",
	    ".carousel-navi-button-4",
	    ".carousel-navi-button-5",
	    ".carousel-navi-button-6",
	    ".carousel-navi-button-7",
	    ".carousel-navi-button-8",
	    ".carousel-navi-button-9",
	    ".carousel-navi-button-10",
	    ".carousel-navi-button-11",
	    ".carousel-navi-button-12"],
    afterEnd: function(a) {
	var pos = a[0].id.split('-');
	pos = pos[2];
	$('.carousel-navi-selected').removeClass('carousel-navi-selected');
	$('.carousel-navi-button-' + pos).addClass('carousel-navi-selected');
	var nxt = $('.carousel-navi-button-' + pos).next();
	if(nxt.length == 0) {
	  nxt = $('.carousel-navi-button-0');
	}
	nxt.addClass('carousel-navi-selected');
      }
  });
});

function setFooter() {
  var y = $("#page-footer").offset().top;
  var h = $("#footer").height();
  var wh = $(window).height();
  if(wh > y + h + 40) {
    $("#footer-padding").height(wh - y - h - 40);
  } else {
    $("#footer-padding").height(0);
  }
}

function showContactForm() {
  $('#contact-link').hide();
  $('#contact-form').slideDown("normal");
  return false;
}

function hideContactForm() {
  $('#contact-form').slideUp("normal", hideContactFormReady);
  return false;
}

function hideContactFormReady() {
  $('#contact-link').show();
  $('#contact-form-submit').show();
  $('#contact-form-throbber').hide();
  $('#contact-form-details').hide();
  $('#contact-form-error').hide();
  $('#contact-form-success').hide();
}

function handleContactForm() {
  var contact = $('#contact').val();
  if(!contact || contact == '') {
    $('#contact-form-details').show();
    return false;
  }
  var msg = $('#msg').val();
  $('#contact-form-details').hide();
  $('#contact-form-error').hide();
  $('#contact-form-success').hide();
  $('#contact-form-submit').hide();
  $('#contact-form-throbber').show();

  $.ajax({
    type: 'POST',
    url: '/ajax.php',
    success: contactFormSuccess,
    error: contactFormError,
    dataType: 'text',
    timeout: 6000,
    data: {req: 'contact',
	   contact: contact,
	   msg: msg}
  });

  return false;
}

function contactFormSuccess(data, textStatus) {
  $('#contact-form-throbber').hide();
  $('#contact-form-success').show();
  setTimeout(function() {
      $('#contact-form').fadeOut(3000, hideContactFormReady);
    }, 5000);
  $('#contact').val('');
  $('#msg').val('');
}

function contactFormError(data, textStatus) {
  $('#contact-form-throbber').hide();
  $('#contact-form-submit').show();
  $('#contact-form-error').show();
}

function handleExoveForm() {
  fid = '#' + this.id;
  var dt = new Object();

  $(fid + " .exove-form-missing").hide();
  $(fid + " .exove-form-thanks").hide();
  $(fid + " .exove-form-error").hide();
  $(fid + " .exove-form-file").hide();

  var mand = $(fid + " .exove-form-field-mand");
  for(i = 0; i < mand.length; i++) {
    var mid = mand[i].id;
    $('#' + mid).parent().parent().removeClass('missing-field');
  }

  var fields = $(fid + " :input");
  var submitid = '';
  for(i = 0; i < fields.length; i++) {
    if(fields[i].type == 'radio') {
      if(fields[i].checked) {
	dt[fields[i].name] = jQuery.trim(fields[i].value);
      }
    } else if(fields[i].type == 'checkbox') {
      if(fields[i].checked) {
	dt[fields[i].name] = ((dt[fields[i].name] &&
			       dt[fields[i].name] != '') ? 
			      dt[fields[i].name] + ', ' : '') + 
	  jQuery.trim(fields[i].value);
      }
    } else {
      dt[fields[i].name] = jQuery.trim(fields[i].value);
      if(fields[i].type == 'submit') {
	submitid = fields[i].id;
      }
    }
  }

  var mandFailed = false;
  for(i = 0; i < mand.length; i++) {
    var mn = mand[i].name;
    if(!dt[mn] || dt[mn] == '') {
      var mid = mand[i].id;
      $('#' + mid).parent().parent().addClass('missing-field');
      var mandFailed = true;
    }
  }
  if(mandFailed) {
    $(fid + " .exove-form-missing").show();
    return false;
  }

  $(fid + " .exove-form-submit").hide();
  $("#" + submitid + "-throbber").show();

  dt['req'] = 'exoveform';

  $.ajax({
    type: 'POST',
    url: '/ajax.php',
    success: exoveFormSuccess,
    error: exoveFormError,
    dataType: 'text',
    timeout: 6000,
    data: dt
  });
  return false;
}

function exoveFormSuccess(data, textStatus) {
  if(data.substr(0, 2) == 'ER') {
    exoveFormError(data, textStatus);
    return;
  }
  $(fid + " .exove-form-throbber").hide();
  $(fid + " .exove-form-submit").show();
  $(fid + " .exove-form-thanks").show();
  $(fid + " .exove-form-file").show();
}

function exoveFormError(data, textStatus) {
  $(fid + " .exove-form-throbber").hide();
  $(fid + " .exove-form-submit").show();
  $(fid + " .exove-form-error").show();
}

function updateName() {
  document.getElementById("nameDisplay").innerHTML = 
    document.getElementById("author").value;
}

function updateComment() {
  document.getElementById("commentDisplay").innerHTML = 
    superTextile(document.getElementById("showcomment").value);
}

function submitComment() {
  document.getElementById("realcomment").value = 
    superTextile(document.getElementById("showcomment").value);
  return true;
}

/*
   This function is from Jeff Minard - http://www.creatimation.net/
    adapted from code by Stuart Langridge at http://www.kryogenix.org/
 */
 
function superTextile(s) {
    var r = s;

    // HTML entities first
    r = r.replace(/&/gm, '&amp;');
    r = r.replace(/</gm, '&lt;');
    r = r.replace(/>/gm, '&gt;');

    // quick tags first
    qtags = [['\\*', 'strong'],
             ['\\?\\?', 'cite'],
             ['\\+', 'ins'],  //fixed
             ['~', 'sub'],   
             ['\\^', 'sup'], // me
             ['@', 'code']];

    for (var i=0;i<qtags.length;i++) {
        ttag = qtags[i][0]; htag = qtags[i][1];
        re = new RegExp(ttag+'\\b(.+?)\\b'+ttag,'g');
        r = r.replace(re,'<'+htag+'>'+'$1'+'</'+htag+'>');
    }
    // underscores count as part of a word, so do them separately
    re = new RegExp('\\b_(.+?)_\\b','g');
    r = r.replace(re,'<em>$1</em>');
	
	//jeff: so do dashes
    re = new RegExp('[\s\n]-(.+?)-[\s\n]','g');
    r = r.replace(re,'<del>$1</del>');

    // links
    re = new RegExp('"\\b(.+?)\\(\\b(.+?)\\b\\)":([^\\s]+)','g');
    r = r.replace(re,'<a href="$3" title="$2">$1</a>');
    re = new RegExp('"\\b(.+?)\\b":([^\\s]+)','g');
    r = r.replace(re,'<a href="$2">$1</a>');

    // images
    re = new RegExp('!\\b(.+?)\\(\\b(.+?)\\b\\)!','g');
    r = r.replace(re,'<img src="$1" alt="$2">');
    re = new RegExp('!\\b(.+?)\\b!','g');
    r = r.replace(re,'<img src="$1">');
    
    // block level formatting
	
		// Jeff's hack to show single line breaks as they should.
		// insert breaks - but you get some....stupid ones
	    re = new RegExp('(.*)\n([^#\*\n].*)','g');
	    r = r.replace(re,'$1<br />$2');
		// remove the stupid breaks.
	    re = new RegExp('\n<br />','g');
	    r = r.replace(re,'\n');
	
    lines = r.split('\n');
    nr = '';
    for (var i=0;i<lines.length;i++) {
        line = lines[i].replace(/\s*$/,'');
        changed = 0;
        if (line.search(/^\s*bq\.\s+/) != -1) { line = line.replace(/^\s*bq\.\s+/,'\t<blockquote>')+'</blockquote>'; changed = 1; }
		
		// jeff adds h#.
        if (line.search(/^\s*h[1-6]\.\s+/) != -1) { 
	    	re = new RegExp('h([1-6])\.(.+)','g');
	    	line = line.replace(re,'<h$1>$2</h$1>');
			changed = 1; 
		}
		
		if (line.search(/^\s*\*\s+/) != -1) { line = line.replace(/^\s*\*\s+/,'\t<liu>') + '</liu>'; changed = 1; } // * for bullet list; make up an liu tag to be fixed later
        if (line.search(/^\s*#\s+/) != -1) { line = line.replace(/^\s*#\s+/,'\t<lio>') + '</lio>'; changed = 1; } // # for numeric list; make up an lio tag to be fixed later
        if (!changed && (line.replace(/\s/g,'').length > 0)) line = '<p>'+line+'</p>';
        lines[i] = line + '\n';
    }
	
    // Second pass to do lists
    inlist = 0; 
	listtype = '';
    for (var i=0;i<lines.length;i++) {
        line = lines[i];
        if (inlist && listtype == 'ul' && !line.match(/^\t<liu/)) { line = '</ul>\n' + line; inlist = 0; }
        if (inlist && listtype == 'ol' && !line.match(/^\t<lio/)) { line = '</ol>\n' + line; inlist = 0; }
        if (!inlist && line.match(/^\t<liu/)) { line = '<ul>' + line; inlist = 1; listtype = 'ul'; }
        if (!inlist && line.match(/^\t<lio/)) { line = '<ol>' + line; inlist = 1; listtype = 'ol'; }
        lines[i] = line;
    }

    r = lines.join('\n');
	// jeff added : will correctly replace <li(o|u)> AND </li(o|u)>
    r = r.replace(/li[o|u]>/g,'li>');

    return r;
}

function showTextileHelp() {
  document.getElementById('commentmenu').style.visibility='visible';
}

function hideTextileHelp() {
  document.getElementById('commentmenu').style.visibility='hidden';
}

function createCookie(name, value, days) {
  if(days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    var expires = "; expires=" + date.toGMTString();
  } else {
    expires = "";
  }
  document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
  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 null;
}

function getWindowWidth() {
  if(window.innerWidth) {
    return window.innerWidth;
  } else if(document.documentElement && 
	    document.documentElement.clientWidth != 0) {
    return document.documentElement.clientWidth;	
  } else if (document.body){
    return document.body.clientWidth;
  }		
  return -1;
}
