<!--
var ResultatAjax;
var ModeAjax = false;
var Permuter = 1;
//var MyAjax = new Object();
var SerachObjName = new Array("Type_Carreaux","Surface");//,"Offre"

var w3c = (document.getElementById) ? true: false;

var Page = new Object();
Page.width;
Page.height;
Page.top;


var flashlinks=new Array();

function changelinkcolor () {
								for (i=0; i< flashlinks.length; i++) {
																			var flashtype = document.getElementById? flashlinks[i].getAttribute("flashtype")*1 : flashlinks[i].flashtype*1;
																			var flashcolor = document.getElementById? flashlinks[i].getAttribute("flashcolor") : flashlinks[i].flashcolor;
																			if (flashtype == 0) {
																									if (flashlinks[i].style.color!=flashcolor) flashlinks[i].style.color = flashcolor;
																									else flashlinks[i].style.color='';
																									}
																			else if (flashtype == 1) {
																										if (flashlinks[i].style.backgroundColor != flashcolor) flashlinks[i].style.backgroundColor = flashcolor;
																										else flashlinks[i].style.backgroundColor = '';
																										}
																			}
									}

function init() {
					var i=0
					if (document.all) {
											while (eval("document.all.flashlink"+i)!=null){
																								flashlinks[i] = eval("document.all.flashlink"+i);
																								i++;
																								} 
											}
					else if (document.getElementById) {
															while (document.getElementById("flashlink"+i)!=null) {
																													flashlinks[i]= document.getElementById("flashlink"+i);
																													i++;
																													}
															}
					setInterval("changelinkcolor()", 1000)
					}

if (window.addEventListener) window.addEventListener("load", init, false);
else if (window.attachEvent) window.attachEvent("onload", init);
else if (document.all) window.onload=init;

function toogle(name){
							/*var e = document.getElementById(name);
							if(e.style.visibility == "hidden"){
																	e.style.visibility = '';
																}*/						
						}

function hidebox(id) {
						if(w3c) {
									if(document.getElementById(id+'_b')) document.getElementById(id+'_b').style.display = "none";
									if(document.getElementById(id+'_s')) document.getElementById(id+'_s').style.display = "none";
									}
						}

function CloseAllpopUps(){
							var reg = new RegExp("[|]", "g");
							var tableau = document.getElementById("toclose").value.split(reg);
							
							for (var i=0; i < tableau.length; i++) {
																		hidebox(tableau[i]);
																	  }
							}
function Wnredirect(url) {
								var myRandom = parseInt(Math.random()*99999999);  // cache buster
								return  url+"&myRandom="+myRandom;
							  }

Page.getPageCenterX = function () {
										var fWidth;
										var fHeight;
										//For old IE browsers
										if(document.all) {
															fWidth = document.body.clientWidth;
															fHeight = document.body.clientHeight;
														   }
										//For DOM1 browsers
										else if(document.getElementById && !document.all) {
																							fWidth = innerWidth;
																							fHeight = innerHeight;
																						  }
										else if(document.getElementById) {
																			fWidth = innerWidth;
																			fHeight = innerHeight;
																			}
										//For Opera
										else if (is.op) {
															fWidth = innerWidth;
															fHeight = innerHeight;
															}
										//For old Netscape
										else if (document.layers) {
																	fWidth = window.innerWidth;
																	fHeight = window.innerHeight;
																	}
										Page.width = fWidth;
										Page.height = fHeight;
										Page.top = window.document.body.scrollTop;
									  }
Page.loadOut = function () {
								document.getElementById('loading').innerHTML = "";
								}
function POPLegal2(content,titel){
									Page.getPageCenterX();
									var  dH = 147;
									var  dW = 349;
									Stamp = new Date();	
									var Hours;
									var Mins;
									var Time;
									
									Hours = Stamp.getHours();
									Mins = Stamp.getMinutes();
									sec = Stamp.getSeconds();
									  
									nombre = Math.floor(Math.random() * 100)+1;
									new popUp(((Page.width/2)-(dW/2))+nombre,((Page.height/2)-(dH/2))+nombre, (dW+26), (dH+50), Hours+Mins+sec, content, "white", "black", "bold 10pt sans-serif", titel, "#6D6B63", "white", "#dddddd", "gray", "", true, true, false, true, false,"","../");	
									}
function ContactStockValider(){
									rt = false;
									
									var resultats = document.getElementById('resultats');
									var code = document.forms["StockForm"].elements["code"].value;
									var nom = document.forms["StockForm"].elements["nom"].value;
									var adresse = document.forms["StockForm"].elements["adresse"].value;
									var codepostal = document.forms["StockForm"].elements["codepostal"].value;
									var ville = document.forms["StockForm"].elements["ville"].value;
									var pays = document.forms["StockForm"].elements["pays"].value;
									var tel = document.forms["StockForm"].elements["tel"].value;
									var email = document.forms["StockForm"].elements["email"].value;
									var msg = document.forms["StockForm"].elements["msg"].value;
									
									var bool = (vide(nom))||!Commenceparlettre(nom);
									bool = bool||vide(tel)||vide(codepostal)||vide(ville)||vide(adresse);
									bool = bool||(!checkEmail(email));
									bool = bool||(pays == "#");
									
									if(bool) {
												alert("Please verify all the Fields *.");
												}
									else {
												Page.getPageCenterX();	
												var url = "index.php?Ajax=9&code="+code+"&nom="+nom+"&adresse="+adresse+"&ville="+ville+"&pays="+pays+"&tel="+tel+"&email="+email+"&msg="+msg;
												CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
												resultats.innerHTML = ResultatAjax;
												}
									return rt;
									}
function AddToBascket(Num_Lot) {
									Page.getPageCenterX();	
									var url = "index.php?Ajax=4&Num_Lot="+Num_Lot;
									
									CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
									}
function DeleteFromBascket(id) {
									Page.getPageCenterX();	
									var url = "index.php?Ajax=6&pannelID="+id;
									CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
									
									GetPannier();
									}
function SaveToSend() {
							Page.getPageCenterX();
							var resultats = document.getElementById('resultats');
							var url = "index.php?Ajax=7";
							
							CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
							resultats.innerHTML = "<br>"+ResultatAjax+"<br>";
						}
function SaveBascket() {
							Page.getPageCenterX();	
							var url='AjaxPannier/SaveBascket.php';
							MyAjax.request = MyAjax.createRequestObject();
							MyAjax.request.onreadystatechange = function ()
							{
								if(MyAjax.CheckReadyState(MyAjax.request,'Sav'))
								{
									document.getElementById('code').value=MyAjax.request.responseText;
								}
						
							}
							MyAjax.request.open("GET", Wnredirect(url), true);
							MyAjax.request.send(Wnredirect(url));
						  }
function Patchwork() {
							var resultats = document.getElementById("resultats");
							var url = "index.php?Ajax=10";
							CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
							resultats.innerHTML = ResultatAjax;
							
							if (event.preventDefault) {   event.preventDefault(); } 
							event.returnValue = false;
							  }
function Discount() {
							var resultats = document.getElementById("resultats");
							var url = "index.php?Ajax=12";
							CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
							resultats.innerHTML = ResultatAjax;
							
							if (event.preventDefault) {   event.preventDefault(); } 
							event.returnValue = false;
							  }
function GetPatchwork(Id) {
								Page.getPageCenterX();
								var patchwork_dev = document.getElementById("patchwork_dev");
								var patchwork_ref = document.getElementById("patchwork_ref");
								var reg = new RegExp(" ", "g");
							
								var url = "index.php?Ajax=11&Id="+Id;
								CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
								
								var tableau = ResultatAjax.split(reg);
								
								patchwork_dev.innerHTML = '<img src="http://www.mosaicdelsur.com/'+tableau[1]+'" border="0" width="266" height="266"/>';
								patchwork_ref.value = tableau[0];
								document.getElementById("loading").innerHTML = "";
							  }
function GetPannier(Selected) {
									Page.getPageCenterX();
									var resultats = document.getElementById("resultats");
									var url = "index.php?Ajax=5";
									CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
									
									resultats.innerHTML = "<br>"+ResultatAjax+"<br>";
								 }
function GetDetail(e) {
							Page.getPageCenterX();
							var Num_Lot = e.id;
							var content = document.getElementById("content_show_room_SUISSE");
							var params = "Num_Lot="+Num_Lot;
						
							content.innerHTML = "";
							var reg = new RegExp("|||||");
							
							var url = "index.php?Ajax=3&"+params;
							
							CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
														
							var tableau = ResultatAjax.split("|||||");

							POPLegal2(tableau[0],tableau[1]);
						  }

function MonoSearch(Type) {
								Page.getPageCenterX();
								var parms;
								var resultats = document.getElementById('resultats');
								if(Type == 'NUM') {
													var NumLot = document.getElementById('NumLot').value;
													document.getElementById('RefLot').value = "";
													params = '&NumLot='+ NumLot;
													}
								else{
										var RefLot = document.getElementById('RefLot').value;
										document.getElementById('NumLot').value = "";
										params = '&RefLot='+ RefLot;
										}
							
								var url = 'index.php?Ajax=8&Type='+Type+params;
								
								CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
								
								if (ResultatAjax) { 
													resultats.innerHTML = ResultatAjax;
													document.getElementById('loading').innerHTML = "";
													}
								}


function MultiSearchResult(Selected) {
										Page.getPageCenterX();
										
										var Type_Carreaux = document.getElementById("Type_Carreaux").value;
										var Surface = document.getElementById("Surface").value;
									
										var resultats = document.getElementById("resultats");
										var params ='Type_Carreaux='+Type_Carreaux+'&Surface='+Surface+'&Selected='+Selected;
									
										var url = "index.php?Ajax=2&"+params;
										
										CreerRequet(Wnredirect(url),"",ModeAjax, TraitementStock);
										
										resultats.innerHTML = ResultatAjax;
										}
function ApresVerifierStock (ResultatAjax) {
												var ObjSelected = document.getElementById("ObjSelected").value;
												var k=0;
												
												for ( var j = 0 ; j < SerachObjName.length ; j ++ ) {
																										var ThisValue = document.getElementById(SerachObjName[j]).value;
																										if(ObjSelected == SerachObjName[j]){
																																				k=k+ResultatAjax.getElementsByTagName(SerachObjName[j].toLowerCase()).length;
																																				}
																										if(ObjSelected != SerachObjName[j]){
																																				document.getElementById(SerachObjName[j]).length = 0;
																																				document.getElementById(SerachObjName[j]).options[0] = new Option(all,"0");
																																				var _data = ResultatAjax.getElementsByTagName(SerachObjName[j].toLowerCase());
																																				if(_data.length == 0) {
																																											document.getElementById(SerachObjName[j]).options[0] = new Option("No List available",'0');
																																											}
																																				var i
																																				var dim=_data.length;
																																				for ( i = 0 ; i <dim-1  ; i ++ ) {
																																													//alert(response.getElementsByTagName('value')[i+k].firstChild.data);
																																													document.getElementById(SerachObjName[j]).options[i+1] = new Option(ResultatAjax.getElementsByTagName('value')[i+k].firstChild.data,ResultatAjax.getElementsByTagName('id')[i+k].firstChild.data);
																																													}
																																				k=k+dim;
																																					}
																										 if(ThisValue!=0) document.getElementById(SerachObjName[j]).value = ThisValue;
																								 }
												}


function Type_CarreauxOnChange () {
									document.getElementById("RefLot").value = "";
									document.getElementById("NumLot").value = "";
									
									Page.getPageCenterX();
									document.getElementById("ObjSelected").value = "Type_Carreaux";
									var Type_Carreaux = document.getElementById("Type_Carreaux").value;
									var Surface = document.getElementById("Surface").value;
									if(SerachObjName == "Type_Carreaux") Surface = 0;
									
									var url="index.php?Ajax=1&method=getXMLAll&SerachObjName=Type_Carreaux&Type_Carreaux=" + Type_Carreaux + "&Surface=" + Surface;
									
									CreerRequet(Wnredirect(url),"",ModeAjax,TraitementVerifierStock);
									//alert(ResultatAjax);
									
									//if (ResultatAjax) ApresVerifierStock (ResultatAjax);
									
									//CloseAllpopUps();
									}
function SurfaceOnChange () {
								document.getElementById("RefLot").value = "";
								document.getElementById("NumLot").value = "";
								
								Page.getPageCenterX();
								document.getElementById("ObjSelected").value = SerachObjName;
								var Type_Carreaux = document.getElementById("Type_Carreaux").value;
								var Surface = document.getElementById("Surface").value;
								
								var url = "index.php?Ajax=1&method=getXMLAll&SerachObjName=Surface&Type_Carreaux=" + Type_Carreaux + "&Surface=" + Surface;
								
								CreerRequet(Wnredirect(url),"",ModeAjax,TraitementVerifierStock);
								//alert(ResultatAjax);
								//if (ResultatAjax) ApresVerifierStock (ResultatAjax);
								
								MultiSearchResult("1");
								
								//CloseAllpopUps();
								}

function GoGo1 () {
						if(document.getElementById("Type_Carreaux").value == "0"){
																					alert("Please, select a type of tile!");
																					return false;
																					//CloseAllpopUps();
																					};
						if(document.getElementById("Surface").value == "0") {
																				alert("Please, select an area!");
																				return false;
																				//CloseAllpopUps();
																				};
						MultiSearchResult("1");
						//CloseAllpopUps();
						}
function GoGo2 (Name) {
						MonoSearch(Name);
						//CloseAllpopUps();
						}
function TestGoGo2 (event, Name) {
									if(event.keyCode == 13) GoGo2(Name);
									}
function Pannier () {
						//CloseAllpopUps();
						GetPannier();
						}
function Valider(){
						rt = true;
						nom = document.forms["SimulateurPorte"].elements["nom"].value;
						adresse = document.forms["SimulateurPorte"].elements["adresse"].value;
						codepostal = document.forms["SimulateurPorte"].elements["codepostal"].value;
						ville = document.forms["SimulateurPorte"].elements["ville"].value;
						pays = document.forms["SimulateurPorte"].elements["pays"].value;
						tel = document.forms["SimulateurPorte"].elements["tel"].value;
						email = document.forms["SimulateurPorte"].elements["email"].value;
						fonction = document.forms["SimulateurPorte"].elements["fonction"].value;
						msg = document.forms["SimulateurPorte"].elements["msg"].value;
						
						var bool = (vide(nom))||!Commenceparlettre(nom);
						bool = bool||vide(tel)||vide(codepostal)||vide(ville)||vide(adresse);
						bool = bool||(!checkEmail(email));
						bool = bool||(pays == "#")||(fonction == "#");
						
						if(bool) {
									alert("Please verify all the Fields *");
									rt = false;
									}
						return rt;
						}
function avant1(){
						checked = document.forms["SimulateurAuth"].elements["Condition"].checked;
						if(checked){ 
										submit_pass("SimulateurAuth");
										document.forms["SimulateurAuth"].elements["Copyright"].value = "";
										document.forms["SimulateurAuth"].submit();
										}
						else {
								alert("You should read and accept the conditions of use of this simulator");
								return false;
								}
						}
function show_detail(id) {
							document.getElementById("ref").src = "http://www.mosaicdelsur.com/images/Modelos/Dev/"+id+"A.gif"; 
							document.getElementById("dev1").src = "http://www.mosaicdelsur.com/images/Modelos/Dev/"+id+"B.gif";
							document.getElementById("dev2").src = "http://www.mosaicdelsur.com/images/Modelos/Dev/"+id+"C.gif";
							document.getElementById("dev3").src = "http://www.mosaicdelsur.com/images/Modelos/Dev/"+id+"D.gif";
							}
function get_images_detail(id, subtitel) {
											document.getElementById("center").src = "http://www.mosaicdelsur.com/images/Modelos/relieve/Dev/"+id+"A.jpg";
											document.getElementById("subtitel").innerHTML = subtitel;
											}

function get_page(page) {
							document.getElementById("center").src = "../../images/cadre-relieveAN.jpg";
							document.getElementById("subtitel").innerHTML = "&nbsp;";
							if(page != Permuter) {
													var ImagesCacher = document.getElementById("images").innerHTML;
													document.getElementById("images").innerHTML = document.getElementById("ImagesCacher").innerHTML;
													document.getElementById("ImagesCacher").innerHTML = ImagesCacher;
													Permuter = page;
														}
							}
function Details(id, code, ref, Description) {
												document.getElementById("img_detail").src = "http://www.mosaicdelsur.com/images/72CouleursD/"+id+".jpg";
												document.getElementById("reference").innerHTML = ref;
												document.getElementById("code").innerHTML = code;
												document.getElementById("Decrire").innerHTML = Description;
												}
/*function get_photos_detail(id,subtitel){
											document.getElementById("center").src='http://www.mosaicdelsur.com/images/photos/Devl/'+id+'.jpg';
											document.getElementById("subtitel").innerHTML=subtitel;
											}*/
function get_page_photos(event,page){
										if (event.preventDefault) {   event.preventDefault(); } 
										event.returnValue = false;
										document.forms["PhotosPages"].elements["page"].value =  page;
										document.forms["PhotosPages"].submit();
											}
function get_page_pressephotos(event,pressepage){
													if (event.preventDefault) {   event.preventDefault(); } 
													event.returnValue = false;
													document.forms["PressePages"].elements["pressepage"].value =  pressepage;
													document.forms["PressePages"].submit();
														}
function show_faq_content(id,lien){
									var NbQuetions = 18;
									for (var i = 1; i <= NbQuetions; i++) {
																			document.getElementById("content_"+i).style.display = "none";
																				}
									document.getElementById("titel").innerHTML=lien.innerHTML;
									document.getElementById("content_"+id).style.display = "block";
									}
function get_images_detail_presse(id) {
												document.getElementById("center").src = "../images/Presse/"+id+".jpg";
												}
function get_images_detail_repro(id){
										document.getElementById("reprocenter").src = "http://www.mosaicdelsur.com/images/Reproduction/catalogue/"+id+"+.jpg";
										}
function CreerRequet(url,parametre,mode,methode){
					var httpRequest = false;
					if (window.XMLHttpRequest) { 
								httpRequest = new XMLHttpRequest();
								if (httpRequest.overrideMimeType) {
									httpRequest.overrideMimeType("text/xml");
								}
							} else if (window.ActiveXObject) { // IE
								try {
									httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
								} catch (e) {
									try {
										httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
									} catch (e) {
													//alert(httpRequest);
													}
								}
							}
					
					 if (!httpRequest) {
										//alert("Abandon : Impossible de créer une instance XMLHTTP");
										return false;
												}
					 if(mode == true) httpRequest.onreadystatechange = function() { methode(httpRequest); };
					 httpRequest.open("POST", url, false);
					 httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
					 httpRequest.send(parametre);
					 if(mode == false){
											methode(httpRequest);
												}
						}
function Traitement(httpRequest){
						  try {
								if (httpRequest.readyState == 4) {
										if (httpRequest.status == 200) {
																		 ResultatAjax = httpRequest.responseText;
																			} 
										else {
												//alert('Un problème est survenu au cours de la requête.');
													}
										}
									}
							catch( e ) {
											//alert("Une exception s'est produite : " + e.description);
											}
								}
function TraitementStock(httpRequest){
										  try {
												if (httpRequest.readyState < 4) {
																					document.getElementById('loading').style.top = (Page.top + Page.height/2);
																					document.getElementById('loading').style.left = Page.width/2-75;
																					document.getElementById('loading').style.position = "absolute";
																					document.getElementById('loading').innerHTML = "<table border=0 cellpadding=0 cellspacing=1 width=160 bgcolor=gray><tr><td align=center class=loading height=45 bgcolor=#FFFF66><img src='../images/snake_transparent.gif'/>&nbsp;&nbsp;Loading..</td></tr></table>";
																					}
												if (httpRequest.readyState == 4) {
														if (httpRequest.status == 200) {
																						// alert(httpRequest.responseText);
																						 //resultats.innerHTML = httpRequest.responseText;
																						 ResultatAjax = httpRequest.responseText;
																						 //alert(ResultatAjax);
																						 setTimeout('Page.loadOut()',20);
																						 return true;
																							} 
														else {
																//alert('Un problème est survenu au cours de la requête.');
																	}
														}
													}
											catch( e ) {
															//alert("Une exception s'est produite : " + e.description);
															}
												}
function TraitementVerifierStock (httpRequest) {
												  try {
															if (httpRequest.readyState < 4) {
																								document.getElementById('loading').style.top = (Page.top + Page.height/2);
																								document.getElementById('loading').style.left = Page.width/2-75;
																								document.getElementById('loading').style.position = "absolute";
																								document.getElementById('loading').innerHTML = "<table border=0 cellpadding=0 cellspacing=1 width=160 bgcolor=gray><tr><td align=center class=loading height=45 bgcolor=#FFFF66><img src='../images/snake_transparent.gif'/>&nbsp;&nbsp;Loading..</td></tr></table>";
																							}
															if (httpRequest.readyState == 4) {
																								if (httpRequest.status == 200) {
																																//ResultatAjax = httpRequest.responseText;
																																ResultatAjax = httpRequest.responseXML.documentElement;
																																//alert(ResultatAjax);
																																setTimeout('Page.loadOut()',20);
																																return true;
																																	} 
																								else {
																										//alert('Un problème est survenu au cours de la requête.');
																										document.getElementById('loading').innerHTML = "HTTP " + httpRequest.status;
																											}
																								}
															}
													 catch( e ) {
																	//alert("Une exception s'est produite : " + e.description);
																	}
													}
function vide(Var){
						if(Var == "") return true;
						else return false;
						}
function Commenceparlettre(Var){
						var char = Var.charAt(0);
						var code = Var.charCodeAt(0);
						var boo = ((code >= 97)&&(code <= 122))||((code >= 65)&&(code <= 90));
						if(isNaN(char) && boo) return true;
						else return false;
						}
function ReelPositive(nbr){
									return (!isNaN(nbr)&&(nbr>0));
									}
function EntierPositive(nbr){
									var nb = Math.floor(nbr);
									return ((nb == nbr)&&(nbr>0));
									}
function trim(str) {
    return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
function checkEmail(email) { // vérif validité email par REGEXP
   var reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,63}$/i
   return (reg.exec(email)!=null)
}
function submit_pass(name)
{
  var pass=document.forms[name].elements["Password"].value;
  document.forms[name].elements["Password"].value = "";
  var buf=MD5(pass);
  document.forms[name].elements["md0"].value = buf;

  //document.forms[name].submit;
  return false;
}
function submit_passchange()
{
  var pass1=document.forms["change"].elements["Password1"].value;
  var pass2=document.forms["change"].elements["Password2"].value;
  document.forms["change"].elements["Password1"].value = "";
  document.forms["change"].elements["Password2"].value = "";
  var buf1=MD5(pass1);
  document.forms["change"].elements["md1"].value = buf1;
  var buf2=MD5(pass2);
  document.forms["change"].elements["md2"].value = buf2;

  document.forms["change"].submit;
  return false;
}
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Copyright (C) Paul Johnston 1999 - 2000.
 * Updated by Greg Holt 2000 - 2001.
 * See http://pajhome.org.uk/site/legal.html for details.
 */

/*
 * Convert a 32-bit number to a hex string with ls-byte first
 */

var hex_chr = "0123456789abcdef";
function rhex(num)
{
  str = "";
  for(j = 0; j <= 3; j++)
    str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
           hex_chr.charAt((num >> (j * 8)) & 0x0F);
  return str;
}

/*
 * Convert a string to a sequence of 16-word blocks, stored as an array.
 * Append padding bits and the length, as described in the MD5 standard.
 */
function str2blks_MD5(str)
{
  nblk = ((str.length + 8) >> 6) + 1;
  blks = new Array(nblk * 16);
  for(i = 0; i < nblk * 16; i++) blks[i] = 0;
  for(i = 0; i < str.length; i++)
    blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
  blks[i >> 2] |= 0x80 << ((i % 4) * 8);
  blks[nblk * 16 - 2] = str.length * 8;
  return blks;
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally 
 * to work around bugs in some JS interpreters.
 */
function 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 rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * These functions implement the basic operation for each round of the
 * algorithm.
 */
function cmn(q, a, b, x, s, t)
{
  return add(rol(add(add(a, q), add(x, t)), s), b);
}
function ff(a, b, c, d, x, s, t)
{
  return cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t)
{
  return cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t)
{
  return cmn(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t)
{
  return cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Take a string and return the hex representation of its MD5.
 */
function MD5(str)
{
  x = str2blks_MD5(str);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
 
  for(i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

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

    a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = gg(c, d, a, b, x[i+11], 14,  643717713);
    b = gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = gg(c, d, a, b, x[i+15], 14, -660478335);
    b = gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = gg(b, c, d, a, x[i+12], 20, -1926607734);
    
    a = hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = hh(b, c, d, a, x[i+14], 23, -35309556);
    a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = hh(d, a, b, c, x[i+12], 11, -421815835);
    c = hh(c, d, a, b, x[i+15], 16,  530742520);
    b = hh(b, c, d, a, x[i+ 2], 23, -995338651);

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

    a = add(a, olda);
    b = add(b, oldb);
    c = add(c, oldc);
    d = add(d, oldd);
  }
  return rhex(a) + rhex(b) + rhex(c) + rhex(d);
}
-->