function getFormNum (formName){
formNum =-1;
for (i=0;i<document.forms.length;i++){
 tempForm = document.forms[i];
 if (formName == tempForm){
  formNum = i;
  correctForm = tempForm;
  break;}}
return formNum; }
function jmp(formName,elementNum){
getFormNum(formName);
if (formNum>=0){
 with (document.forms[formNum].elements[elementNum]){
  i=selectedIndex;
  if (i>=0) location=options[i].value;} }
}
function O(txt,url){
  a[k]=new Option(txt,url);k++;}
function trim(s) {
 while (s.substring(0,1) == ' ') {
  s = s.substring(1,s.length); }
 while (s.substring(s.length-1,s.length) == ' ') {
  s = s.substring(0,s.length-1); }
 return s;
}
function createCountryLangArray() {
countryLangArray["Spain"]=["English","Dutch","French","German","Italian","Spanish"];
countryLangArray["Germany"]=["English","Dutch","French","German","Italian","Polish","Spanish"];
countryLangArray["Canada"]=["English","Chinese","Dutch","French","German","Italian","Spanish"];
countryLangArray["Netherlands"]=["English","Dutch","French","German","Italian","Spanish"];
countryLangArray["Switzerland"]=["English","Dutch","French","German","Italian","Spanish"];
countryLangArray["France"]=["English","French","German","Italian","Spanish"];
countryLangArray["Belgium"]=["English","Dutch","French","German","Italian","Spanish"];
countryLangArray["UK"]=["English","French","German","Italian","Spanish"];
countryLangArray["Austria"]=["English","German","Polish","Spanish","Italian"];
countryLangArray["Luxembourg"]=["English","German"];
countryLangArray["Italy"]=["English","Italian","German"];
countryLangArray["Greece"]=["English","Dutch","German"];
countryLangArray["Ireland"]=["English","German"];
countryLangArray["Dubai"]=["English","German"];
countryLangArray["Hungary"]=["English","German"];
countryLangArray["Croatia"]=["English"];
countryLangArray["Cyprus"]=["English","German"];
countryLangArray["Bulgaria"]=["English"];
countryLangArray["Australia"]=["English"];
countryLangArray["New Zealand"]=["English"];
countryLangArray["Portugal"]=["English","Dutch","German","Portuguese"];
countryLangArray["Saudi Arabia"]=["English"];
countryLangArray["Oman"]=["English"];
countryLangArray["Qatar"]=["English"];
countryLangArray["Kuwait"]=["English"];
countryLangArray["Bahrain"]=["English"];
countryLangArray["South Africa"]=["English"];
countryLangArray["South Korea"]=["English"];
countryLangArray["Argentina"]=["English","Spanish"];
countryLangArray["Costa Rica"]=["English"];
countryLangArray["USA"]=["English","German","Korean", "Spanish"];
countryLangArray["Russia"]=["English"];
countryLangArray["China"]=["English","German"];
countryLangArray["Turkey"]=["English","German"];
countryLangArray["Poland"]=["English","German"];
countryLangArray["Romania"]=["English"];
countryLangArray["Singapore"]=["English"];
countryLangArray["Hong Kong"]=["English","German"];
countryLangArray["Mexico"]=["English"];
countryLangArray["Finland"]=["English"];
countryLangArray["Czech Republic"]=["English"];
countryLangArray["Denmark"]=["English"];
countryLangArray["Japan"]=["English"];
countryLangArray["India"]=["English"];
countryLangArray["Malta"]=["English"];
}
function createCountryURLArray() {
//list of translated country names in the following order
//deutsch, espanol, francais, italiano,nederlands,polski,portugues
countryURLArray["Spain"]=["Spanien","Espana","Espagne","Spagna","Spanje","Hiszpania","Espanha"];
countryURLArray["Germany"]=["Deutschland","Alemania","Allemagne","Germania","Duitsland","Niemcy","Alemanha"];
countryURLArray["Canada"]=["Kanada","Canada","Canada","Canada","Canada","Kanada","Canada"];
countryURLArray["Netherlands"]=["Niederlande","Holanda","Pays-Bas","Paesi-Bassi","Nederland","Holandia","Holanda"];
countryURLArray["Switzerland"]=["Schweiz","Suiza","Suisse","Svizzera","Zwitserland","Szwajcaria","Suica"];
countryURLArray["France"]=["Frankreich","Francia","France","Francia","Frankrijk","Francja","Franca"];
countryURLArray["Belgium"]=["Belgien","Belgica","Belgique","Belgio","Belgie","Belgia","Belgica"];
countryURLArray["UK"]=["Grossbritannien","Reino-Unido","Royaume-Uni","Regno-Unito","Verenigd-Koninkrijk","Zjednoczone-Krolestwo","Reino-Unido"];
countryURLArray["Austria"]=["Oesterreich","Austria","Autriche","Austria","Oostenrijk","Austria","Austria"];
countryURLArray["Luxembourg"]=["Luxemburg","Luxemburgo","Luxembourg","Lussemburgo","Luxemburg","Luksemburg","Luxemburgo"];
countryURLArray["Italy"]=["Italien","Italia","Italie","Italia","Italie","Wlochy","Italia"];
countryURLArray["Greece"]=["Griechenland","Grecia","Grece","Grecia","Griekenland","Grecja","Grecia"];
countryURLArray["Ireland"]=["Irland","Irlanda","Irlande","Irlanda","Ierland","Irlandia","Irlanda"];
countryURLArray["Dubai"]=["Dubai","Dubai","Dubai","Dubai","Dubai","Dubai","Dubai"];
countryURLArray["Hungary"]=["Ungarn","Hungria","Hongrie","Ungheria","Hongarije","Wegry","Hungria"];
countryURLArray["Croatia"]=["Kroatien","Croacia","Croatie","Croazia","Kroatie","Chorwacja","Croacia"];
countryURLArray["Cyprus"]=["Zypern","Chipre","Chypre","Cipro","Cyprus","Cypr","Chipre"];
countryURLArray["Bulgaria"]=["Bulgarien","Bulgaria","Bulgarie","Bulgaria","Bulgarije","Bulgaria","Bulgaria"];
countryURLArray["Australia"]=["Australien","Australia","Australie","Australia","Australie","Australia","Australia"];
countryURLArray["New Zealand"]=["Neuseeland","Nueva-Zelanda","Nouvelle-Zelande","Nuova-Zelanda","Nieuw-zeeland","Nowa-Zelandia","Nova-Zelandia"];
countryURLArray["Portugal"]=["Portugal","Portugal","Portugal","Portogallo","Portugal","Portugalia","Portugal"];
countryURLArray["Saudi Arabia"]=["Saudi-Arabien","Arabia-Saudí","Arabie-Saoudite","Arabia-Saudita","Saudi-Arabie","Arabia-Saudyjska","Arabia-Saudita"];
countryURLArray["Oman"]=["Oman","Oman","Oman","Oman","Oman","Oman","Oma"];
countryURLArray["Qatar"]=["Qatar","Qatar","Qatar","Qatar","Qatar","Katar","Qatar"];
countryURLArray["Kuwait"]=["Kuwait","Kuwait","Koweit","Kuwait","Kuwait","Kuweit","Kuwait"];
countryURLArray["Bahrain"]=["Bahrain","Bahrein","Bahrein","Bahrein","Bahrain","Bahrajn","Bahrain"];
countryURLArray["South Africa"]=["Sudafrika","Sudafrica","Afrique-du-Sud","Sudafrica","Zuid-Afrika","Afryka-Poludniowa","Africa-do-Sul"];
countryURLArray["South Korea"]=["Sudkorea","Corea-del-Sur","Coree-du-Sud","Corea-del-Sud","Zuid-Korea","Korea-Poludniowa","Coreia-do-Sul"];
countryURLArray["Argentina"]=["Argentinien","Argentina","Argentine","Argentina","Argentinie","Argentyna","Argentina"];
countryURLArray["Costa Rica"]=["Costa-Rica","Costa-Rica","Costa-Rica","Costa-Rica","Costa-Rica","Kostaryki","Costa-Rica"];
countryURLArray["USA"]=["Vereinigte-Staaten","Estados-Unidos","Etats-Unis","Stati-Uniti","Verenigde-Staten","Stany-Zjednoczone","Estados-Unidos"];
countryURLArray["Russia"]=["Russland","Rusia","Russie","Russia","Rusland","Rosja","Russia"];
countryURLArray["China"]=["China","China","Chine","Cina","China","Chinski","China"];
countryURLArray["Turkey"]=["Tuerkei","Turquia","Turquie","Turchia","Turkije","Turcja","Turquia"];
countryURLArray["Poland"]=["Polen","Polonia","Pologne","Polonia","Polen","Polska","Polonia"];
//deutsch, espanol, francais, italiano,nederlands,polski,portugues
countryURLArray["Romania"]=["Rumanien","Rumania","Roumanie","Romania","Roemenie","Rumunia","Romenia"];
countryURLArray["Singapore"]=["Singapur","Singapur","Singapour","Singapore","Singapore","Singapur","Singapura"];
countryURLArray["Hong Kong"]=["Hongkong","Hong-Kong","Hong-Kong","Hong-Kong","Hong-Kong","Kongkong","Hong-Kong"];
countryURLArray["Mexico"]=["Mexiko","Mexico","Mexique","Messico","Mexico","Meksyk","Mexico"];
countryURLArray["Finland"]=["Finnland","Finlandia","Finlande","Finlandia","Finland","Finlandia","Finlandia"];
countryURLArray["Czech Republic"]=["Tschechische-Republik","Republica-Checa","Republique-Tcheque","Repubblica-Ceca","Tsjechisch-Republiek","Czechy","Republica-Checa"];
countryURLArray["Denmark"]=["Danemark","Dinamarca","Danemark","Danimarca","Denemarken","Dania","Dinamarca"];
countryURLArray["Japan"]=["Japan","Japon","Japan","Giappone","Japan","Japania","Japao"];
countryURLArray["India"]=["Indien","India","Inde","India","India","Indie","India"];
countryURLArray["Malta"]=["Malta","Malta","Malte","Malta","Malta","Malta","Malta"];
}
function createLangTransArray() {
//deutsch, espanol, francais, italiano,nederlands,polski,portugues
langTransArray["English"]=["Englisch","Inglés","Anglais","Inglese","Engels","Angielski","Inglês"];
langTransArray["Dutch"]=["Holländisch"," Holandés","Hollandais","Olandese","Nederlands","Holenderski","Holandês"];
langTransArray["French"]=["Französisch","Francés","Français","Francese","Frans","Francuski","Francês"];
langTransArray["German"]=["Deutsch","Alemán","Allemand","Tedesco","Duits","Niemiecki","Alemao"];
langTransArray["Italian"]=["Italienisch","Italiano","Ialien","Italiano","Ialiaans","Italski","Italiano"];
langTransArray["Spanish"]=["Spanisch","Español","Espagnol","Spagnolo","Spaans","Hiszpański","Espanhol"];
langTransArray["Chinese"]=["Chinesisch","Chino","Chinois","Cinese","Chinees","Chińczyk","Chinês"];
langTransArray["Polish"]=["Polnisch","Polaco","Polonais","Polacco","Pools","Polski","Polonês"];
langTransArray["Portuguese"]=["Portugiesisch","Portugués","Portugais","Portoghese","Portugees","Portugalski","Português"];
langTransArray["Korean"]=["독일어","스페인어","불어","이탈리아어","네덜란드어","폴란드어","포르투갈어"];
}
function sortOptions(a) {

if(!Array.indexOf){
 Array.prototype.indexOf = function(obj){
  for(var i=0; i<this.length; i++){
   if(this[i]==obj){
    return i;
   }
  }
  return -1;
 }
}

var lb=a;
var currlang = window.location.pathname.split("/");
currlang = currlang[1];
if (currlang == '') currlang='english';

arrTexts = new Array();
var firstIndex = '';
for(i=0; i<lb.length; i++) {
 tempString = lb[i].text+':'+lb[i].value;
 if (tempString.indexOf(currlang) != -1) {
  firstIndex = tempString;
 }
 arrTexts[i] = lb[i].text+':'+lb[i].value;
}

arrTexts.sort();
if (firstIndex != '') {
 i = arrTexts.indexOf(firstIndex);
 if(i != -1) arrTexts.splice(i, 1);
 arrTexts.unshift(firstIndex);
}

for(i=0; i<lb.length; i++) {
 el = arrTexts[i].split(':');
 lb[i].text = el[0];
 lb[i].value = el[1];
} 
}

function Set_Cookie( name, value ) 
{
// set time, it's in milliseconds
//var today = new Date();
//today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct 
expires time, the current script below will set 
it for x number of days, to make it for hours, 
delete * 24, for minutes, delete * 60 * 24
*/
var expires = 60 * 60 * 24 * 90;
var today = new Date();
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
";expires=" + expires_date.toGMTString() + ";path=/"  +  ";domain=.justlanded.com";
}

/* loading animated gif 'new' for community tab */

function createAnimation() {
  link = document.getElementById('new_animation');
  link.style.position = 'relative';
  link.innerHTML = link.innerHTML + '<img src="http://community.justlanded.com/images/icons/new.gif" style="position: absolute; right: -9px; top: -9px;" />';
}

function makeDoubleDelegate(function1, function2) {
  return function() {
    if (function1) function1();
    if (function2) function2();
  }
}

String.prototype.properCase = function()	{
	var strRet = ""; var iTemp = this.length;
	var UcaseNext = false; strRet += this.charAt(0).toUpperCase();

	for(var i=1;i<iTemp;i++){
		s = this.charAt(i);
		strRet += (UcaseNext==true?s.toUpperCase():s.toLowerCase());
		var iChar = this.charCodeAt(i);
		UcaseNext = (iChar==32||iChar==45||iChar==46);
		if(iChar==99||iChar==67)	{
			if(this.charCodeAt(i-1)==77||this.charCodeAt(i-1)==109){
				UcaseNext = true;
			}
		}
	}	return strRet;
}

function trim(s) {
while (s.substring(0,1) == ' ') {
s = s.substring(1,s.length);
}
while (s.substring(s.length-1,s.length) == ' ') {
s = s.substring(0,s.length-1);
}
return s;
}
function checkEmail (strng) {
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(strng)) return true;
else return false;
}
function checkString (strng) {
if (trim(strng) == "") return false;
else return true;
}
function checkCaptcha (question, answer) {
 var array = question.split(" ");
 if (array[1] == '+') result = Number(array[0]) + Number(array[2]);
 else result = Number(array[0]) * Number(array[2]);
 if (result == answer) return true;
 else return false;
}
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }

/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);

}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

function showMap(street, city, country, latitude, longitude) {
  var mapElem = document.getElementById("map");
  var address = street + ', ' + city + ', ' + country; 
  if (!GBrowserIsCompatible()) {
    mapElem.style.display= "none";
    return;
  }
  try {
    geocoder = new GClientGeocoder();
    geocoder.getLatLng(
      address,
      function(point) {
        if (latitude != "" && longitude != "") {
          mapElem.style.display = "block";
          mapElem.style.width = "432px";
          mapElem.style.height = "350px";
          var map = new GMap2(mapElem);
          var coords = new GLatLng(latitude, longitude);
          map.setCenter(coords, 13);
          var marker = new GMarker(coords);
          map.addOverlay(marker);
          map.addControl(new GLargeMapControl());
        }
        else if (point) {
          mapElem.style.display = "block";
          mapElem.style.width = "432px";
          mapElem.style.height = "350px";
          var map = new GMap2(mapElem);
          map.addControl(new GSmallMapControl());
          map.setCenter(point, 13);
          var marker = new GMarker(point);
          map.addOverlay(marker);
        }
        else {
          mapElem.style.display = "none";
        }
      }
    );
  }
  catch(err) {
    mapElem.style.display = "none";
  }
}
