WonLoad.add("shopLoad();", "");
function shopLoad()
{
	if (ajaxd == 1)
	{
		if (document.getElementById('eHandel') != null)
		{
			var anchors = document.getElementById('eHandel').getElementsByTagName("a");
		
			for(var i = 0; i < anchors.length; i++)
			{
				if(anchors[i].rel == "content")
				{
					anchors[i].onclick = function () {
						ajaxLink(this.getAttribute('href'));
						return false;
					}

					anchors[i].href = "javascript:ajaxLink('" + anchors[i].href + "');void(0);";
				}
			}

			delete anchors;
		}
	}
}

function smallBasketUpdate()
{
	if (document.getElementById('basket_small') != null)
	{
		var basket = document.getElementById('basket_small');
	
		var ajaxIndex = ajaxObjects.length;
		ajaxObjects[ajaxIndex] = new sack();
		ajaxObjects[ajaxIndex].requestFile = '?action=shop_small_basket&ajax=1';
		ajaxObjects[ajaxIndex].onCompletion = function() 
		{
			var resp = ajaxObjects[ajaxIndex].response;

			basket.innerHTML = unescape(resp);

			delete resp;
		};
		ajaxObjects[ajaxIndex].runAJAX();

		delete ajaxIndex;
	}
}

function basketAdd(obj, id)
{
	var qty = obj.qty.value;
	var color = 0;
	var size = 0;
	
	if(obj.color != null)
		color = obj.color.value;
		
	if(obj.size != null)
		size = obj.size.value;
		
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = obj.action + '&ajax=1';
	ajaxObjects[ajaxIndex].onCompletion = function() 
	{
		var resp = ajaxObjects[ajaxIndex].response;

		if(unescape(resp) == "TRUE")
		{
			smallBasketUpdate();
		}
		else
		{
			alert(unescape(resp));
		}

		delete resp;

		ajaxLink("?action=shop_show_basket");
	};
	ajaxObjects[ajaxIndex].runAJAX("qty=" + qty + "&color=" + color + "&size=" + size);

	delete ajaxIndex;

	return false;
}

function basketUpdate(obj)
{
	var inputs = obj.getElementsByTagName('input');
	var submitstring = "";
	
	for(i in inputs)
	{
		if(inputs[i].type == 'text' && inputs[i].name.substring(0, 4) == "qty_")
		{
			if(submitstring.length > 0)
				submitstring += "&";
				
			submitstring += inputs[i].name + "=" + inputs[i].value;
		}
	}

	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = obj.action + '&ajax=1';
	ajaxObjects[ajaxIndex].onCompletion = function() 
	{
		var resp = ajaxObjects[ajaxIndex].response;

		if(unescape(resp) == "TRUE")
		{
			smallBasketUpdate();
			ajaxLink('?action=shop_show_basket');
		}
		else
		{
			alert(unescape(resp));
		}

		delete resp;
	};
	ajaxObjects[ajaxIndex].runAJAX(submitstring);

	delete ajaxIndex;

	return false;
}

function basketRemove(obj)
{
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = obj.href + '&ajax=1';
	ajaxObjects[ajaxIndex].onCompletion = function() 
	{
		var resp = ajaxObjects[ajaxIndex].response;

		if(unescape(resp) == "TRUE")
		{
			smallBasketUpdate();
			ajaxLink('?action=shop_show_basket');
		}
		else
			alert(unescape(resp));

		delete resp;
	};
	ajaxObjects[ajaxIndex].runAJAX();
}

function zoom(obj, img)
{
	try
	{
		TJPzoom(obj, 'template/userfiles/images/1024/' + img + '.png', 310, 310);
	}
	catch (E) { }
}

function rateProduct(prod, rate)
{
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].requestFile = '?action=shop_rateproduct&prod=' + prod + '&rate=' + rate + '&ajax=1';
	ajaxObjects[ajaxIndex].onCompletion = function() 
	{
		var resp = ajaxObjects[ajaxIndex].response;

		if (unescape(resp).substr(0, 5) == "login")
		{
			var answer = confirm(unescape(resp).substr(5, unescape(resp).length));
			if (answer)
			{
				ajaxLink('?action=login');
			}
		}
		else
		{
			alert(unescape(resp));
		}

		delete resp;
	};
	ajaxObjects[ajaxIndex].runAJAX();

	delete ajaxIndex;
}

function addTags(obj, prod)
{

	return false;
}

function makeComment(obj, prod)
{
	var comment = obj.comment;

	if (comment.value.length < 2)
	{
		comment.style.border = '1px dashed #eb340a';
	}
	else
	{
		comment.style.border = '1px solid #b6b6b6';

		var ajaxIndex = ajaxObjects.length;
		ajaxObjects[ajaxIndex] = new sack();
		ajaxObjects[ajaxIndex].requestFile = obj.action + '&ajax=1';
		ajaxObjects[ajaxIndex].onCompletion = function() 
		{
			var resp = ajaxObjects[ajaxIndex].response;

			if (unescape(resp) == "TRUE")
			{
				ajaxLink('?action=show_details' + obj.action.substring(obj.action.indexOf('&'), obj.action.length));
			}
			else if (unescape(resp).substr(0, 5) == "login")
			{
				var answer = confirm(unescape(resp).substr(5, unescape(resp).length));
				if (answer)
				{
					ajaxLink('?action=login');
				}
			}

			delete resp, comment;
		};
		ajaxObjects[ajaxIndex].runAJAX('comment=' + escape(comment.value));

		delete ajaxIndex;
	}

	return false;
}

function productDisplay(obj, img)
{
	try
	{
		var newImg = new Image();
		newImg.src = 'template/userfiles/images/440/' + img;
		var width_orig = newImg.width;
		var height_orig = newImg.height;

		if (width_orig <= 0)
		{
			newImg.src = 'template/userfiles/images/440/' + img;
			width_orig = newImg.width;
			height_orig = newImg.height;
		}

		var container = document.getElementById('productImage');
		var source = container.src;
		obj.src = 'template/userfiles/images/131/' + source.substr(source.lastIndexOf('/') + 1, source.length);
		obj.onclick = function () {
			productDisplay(obj, source.substr(source.lastIndexOf('/') + 1, source.length));
		}

		container.onmouseover = function (event) {
			TJPzoom(container, 'template/userfiles/images/1024/' + img, 310, 310);
		}

		var proWidth = width_orig / 100;
		var proHeight = height_orig / 100;
		var cut = width_orig - 440;
		var prooff = cut / proWidth;
		var cutoff = proHeight * prooff;
		var newHeight = Math.round(height_orig - cutoff);

		container.width = 440;
		container.height = newHeight;
		container.style.width = "440px";
		container.style.height = newHeight + "px";
		container.src = "template/userfiles/images/440/" + img;

		setOpacity(container, 0);
		fadeInProduct(container, 0, 20);
	}
	catch (E) 
	{
		productDisplay(obj, img);
	}
}

function fadeInProduct(obj, opacity, increment)
{
	try
	{
		if (opacity <= 100)
		{
			setOpacity(obj, opacity);
			opacity += increment;

			window.setTimeout(function () {
				fadeInProduct(obj, opacity, increment);
			}, 10);
		}
	}
	catch (E) { }
}

function checkoutContinue(obj, currentstep)
{
	var content = document.getElementById('content');
	var submitstring = "";

	switch(currentstep)
	{
		case 2:
		{
			var firstname = document.getElementById('firstname');
			var lastname = document.getElementById('lastname');
			var company = document.getElementById('company');
			var email = document.getElementById('email');
			var address = document.getElementById('address');
			var zip = document.getElementById('zip');
			var city = document.getElementById('city');
			var region = document.getElementById('region');
			var country = document.getElementById('country').options[document.getElementById('country').selectedIndex].value;
			var phone = document.getElementById('telephone');
			var fax = document.getElementById('fax');

			if (firstname.value.length > 0 && lastname.value.length > 0 && email.value.length > 0 && address.value.length > 0 && zip.value.length > 0 && city.value.length > 0 && country.length > 0)
			{
				submitstring = "firstname=" + firstname.value + "&lastname=" + lastname.value + "&company=" + company.value + "&email=" + email.value + "&address=" + address.value + "&zip=" + zip.value + "&city=" + city.value + "&region=" + region.value + "&country=" + country + "&telephone=" + phone.value + "&fax=" + fax.value + "&step2submit=true";
			}
			else
			{
				if (firstname.value.length > 0)
				{
					firstname.style.borderColor = "#B6B6B6";
				}
				else
				{
					firstname.style.borderColor = "red";
				}

				if (lastname.value.length > 0)
				{
					lastname.style.borderColor = "#B6B6B6";
				}
				else
				{
					lastname.style.borderColor = "red";
				}

				if (email.value.length > 0)
				{
					email.style.borderColor = "#B6B6B6";
				}
				else
				{
					email.style.borderColor = "red";
				}

				if (address.value.length > 0)
				{
					address.style.borderColor = "#B6B6B6";
				}
				else
				{
					address.style.borderColor = "red";
				}

				if (zip.value.length > 0)
				{
					zip.style.borderColor = "#B6B6B6";
				}
				else
				{
					zip.style.borderColor = "red";
				}

				if (city.value.length > 0)
				{
					city.style.borderColor = "#B6B6B6";
				}
				else
				{
					city.style.borderColor = "red";
				}

				if (country.length > 0)
				{
					document.getElementById('country').style.borderColor = "#B6B6B6";
				}
				else
				{
					document.getElementById('country').style.borderColor = "red";
				}

				return false;
			}
			break;
		}
		case 3:
		{
			var payment_information = document.getElementById('step3').getElementsByTagName('input');
			var payment_method = '';
			
			for(i = 0; i < payment_information.length; i++)
			{
				if(payment_information[i].type == 'radio')
				{
					if(payment_information[i].checked)
					{
						payment_method = payment_information[i].value;
						break;
					}
				}
			}

			if (payment_method.length > 0)
			{
				submitstring = "payment_information=" + payment_method;
			}
			else
			{
				return false;
			}
			
			break;
		}
	}
	
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].async = true;
	ajaxObjects[ajaxIndex].requestFile = obj.action + '&ajax=1';
	ajaxObjects[ajaxIndex].onCompletion = function() 
	{
		var resp = ajaxObjects[ajaxIndex].response;

		content.innerHTML = unescape(resp);

		delete resp;
	};
	ajaxObjects[ajaxIndex].runAJAX(submitstring);

	return false;
}

function checkoutBack(obj)
{
	var content = document.getElementById('content');
	
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].async = true;
	ajaxObjects[ajaxIndex].requestFile = obj.href + '&ajax=1';
	ajaxObjects[ajaxIndex].onCompletion = function() 
	{
		var resp = ajaxObjects[ajaxIndex].response;

		content.innerHTML = unescape(resp);

		delete resp;
	};
	ajaxObjects[ajaxIndex].runAJAX();
	
	return false;
}


function paymentContinue(obj, paymethod, ajax)
{
	setmailoptions();

	switch(paymethod)
	{
		case 'creditcard':
		{
			var ajaxIndex = ajaxObjects.length;
			ajaxObjects[ajaxIndex] = new sack();
			ajaxObjects[ajaxIndex].async = true;
			ajaxObjects[ajaxIndex].requestFile = '?action=shop_checkout_unipay&ajax=1';
			ajaxObjects[ajaxIndex].onCompletion = function() 
			{
				var resp = ajaxObjects[ajaxIndex].response;
				var info = eval("(" + resp + ")");
				
				/*var newForm = document.createElement('form');
				newForm.method = "post";
				newForm.action = "https://ssl.unipay.dk/payments/auth.asp";
				newForm.target = "unipay";
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "AcceptUrl";
				newInput.value = unescape(info.AcceptUrl);
				newForm.appendChild(newInput);
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "DeclineUrl";
				newInput.value = unescape(info.DeclineUrl);
				newForm.appendChild(newInput);
				
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "ReturnTarget";
				newInput.value = "opener";
				newForm.appendChild(newInput);
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "UnipayNumber";
				newInput.value = info.UnipayNumber;
				newForm.appendChild(newInput);
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "Amount";
				newInput.value = info.Amount;
				newForm.appendChild(newInput);
				
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "Currency";
				newInput.value = info.Currency;
				newForm.appendChild(newInput);
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "OrderNumber";
				newInput.value = info.OrderNumber;
				newForm.appendChild(newInput);
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "Test";
				newInput.value = info.Test != null ? info.Test : "1";	
				newForm.appendChild(newInput);
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "InstantCapture";
				newInput.value = "0";
				newForm.appendChild(newInput);
			
				var newInput = document.createElement("input");
				newInput.type = "hidden";
				newInput.name = "Culture";
				newInput.value = info.Culture;
				newForm.appendChild(newInput);
			
				document.body.appendChild(newForm);
			
				window.open("https://ssl.unipay.dk/payments/verify.asp?Culture=" + info.Culture, "unipay", "width=500,height=400,status=1");
				newForm.action = "https://ssl.unipay.dk/payments/initialize.asp?action=init&transactiontypeid=1";
				newForm.target = "unipay";
				newForm.submit();				
				*/
				
				document.getElementById('OrderNumber').value = info;

				var md5check = md5(document.getElementById('protocol').value + document.getElementById('msgtype').value + document.getElementById('UnipayNumber').value + document.getElementById('language').value + document.getElementById('OrderNumber').value + document.getElementById('Amount').value + document.getElementById('Currency').value + document.getElementById('AcceptUrl').value + document.getElementById('DeclineUrl').value + document.getElementById('AcceptUrl').value + document.getElementById('autocapture').value + '' + document.getElementById('testmode').value + 'FChu51J75izIUe93X19D34NP6BQrd677VYHlLmxkTAyZacp74432jKq32bft695v');

				document.getElementById('md5check').value = md5check;
				
				//window.open("https://secure.quickpay.dk/form/","unipay","width=500,height=400,status=1");
				//document.getElementById('unipayform').target = "unipay";
				document.getElementById('unipayform').submit();
				
				
				//InitUnipay('https://ssl.unipay.dk',document.getElementById('unipayform'), 1);

				delete resp, info;
			};
			ajaxObjects[ajaxIndex].runAJAX();
			break;
		}
		
		case 'paypal':
		{
			break;
		}

		case 'ewire':
		{
			document.getElementById('ewireform').submit();
			break;
		}

		case 'b':
		case 'check':
		case 'bank':
		{
			if(ajax == 1)
			{
				var content = document.getElementById('content');
		
				var ajaxIndex = ajaxObjects.length;
				ajaxObjects[ajaxIndex] = new sack();
				ajaxObjects[ajaxIndex].async = true;
				ajaxObjects[ajaxIndex].requestFile = obj.action + '&ajax=1';
				ajaxObjects[ajaxIndex].onCompletion = function() 
				{
					var resp = ajaxObjects[ajaxIndex].response;
			
					content.innerHTML = unescape(resp);
			
					delete resp;
				};
				ajaxObjects[ajaxIndex].runAJAX();
			}
			else
			{
				location.href = obj.action;
			}

			break;
		}
	}

	return false;
}

function setmailoptions()
{
	var chktext = document.getElementById('checkout_order_confirmation_text_email');
	var chkpdf = document.getElementById('checkout_order_confirmation_pdf_email');
	var text = "0";
	var pdf = "0";
	
	if(chktext.checked)
		text = "1";
		
	if(chkpdf.checked)
		pdf = "1";
	
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();
	ajaxObjects[ajaxIndex].async = true;
	ajaxObjects[ajaxIndex].requestFile = 'index.php?action=shop_checkout_mailoptions&ajax=1';
	ajaxObjects[ajaxIndex].onCompletion = function() 
	{
		 
	};
	ajaxObjects[ajaxIndex].runAJAX("text=" + text + "&pdf=" + pdf);
}

function loginUserCheckout(obj, selec)
{
	var error = new Array();

	var email = obj.email;
	var pass = obj.pass;

	if (email.value.length < 2)
	{
		email.style.border = '1px dashed #eb340a';
		email.focus();
		error[0] = true;
	}
	else
	{
		a = email.value.indexOf('@');
		b = email.value.indexOf('@', a+1);
		c = email.value.lastIndexOf('.');
		if (c < a+1) { c = -1; }
		if (a == -1 || b != -1 || c <= a + 2 || a < 1 || c + 2 >= email.value.length || c + 4 < email.value.length)
		{
			email.style.border = '1px dashed #eb340a';
			email.focus();
			error[0] = true;
		}
		else
		{
			email.style.border = '1px solid #b6b6b6';
			error[0] = false;
		}
	}

	if (pass.value.length < 2)
	{
		pass.style.border = '1px dashed #eb340a';
		error[1] = true;
	}
	else
	{
		pass.style.border = '1px solid #b6b6b6';
		error[1] = false;
	}

	if (error[0] == false && error[1] == false)
	{
		var ajaxIndex = ajaxObjects.length;
		ajaxObjects[ajaxIndex] = new sack();
		ajaxObjects[ajaxIndex].requestFile = obj.action + '&ajax=1';
		ajaxObjects[ajaxIndex].onCompletion = function() 
		{
			var resp = ajaxObjects[ajaxIndex].response;

			if (unescape(resp) == "TRUE")
			{
				ajaxLink("?action=shop_checkout&step=2");
			}

			delete resp;
		};

		ajaxObjects[ajaxIndex].runAJAX("email=" + escape(email.value) + "&pass=" + escape(pass.value));

		delete ajaxIndex, error, email, pass;
	}

	return false;
}

function md5 ( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // + namespaced by: Michael White (http://getsprink.com)
    // +    tweaked by: Jack
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: md5('Kevin van Zonneveld');
    // *     returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'
 
    var xl;
 
    var rotateLeft = function(lValue, iShiftBits) {
        return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
    };
 
    var addUnsigned = function(lX,lY) {
        var lX4,lY4,lX8,lY8,lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
    };
 
    var _F = function(x,y,z) { return (x & y) | ((~x) & z); };
    var _G = function(x,y,z) { return (x & z) | (y & (~z)); };
    var _H = function(x,y,z) { return (x ^ y ^ z); };
    var _I = function(x,y,z) { return (y ^ (x | (~z))); };
 
    var _FF = function(a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var _GG = function(a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var _HH = function(a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var _II = function(a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };
 
    var convertToWordArray = function(str) {
        var lWordCount;
        var lMessageLength = str.length;
        var lNumberOfWords_temp1=lMessageLength + 8;
        var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
        var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
        var lWordArray=new Array(lNumberOfWords-1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount-(lByteCount % 4))/4;
        lBytePosition = (lByteCount % 4)*8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
        lWordArray[lNumberOfWords-2] = lMessageLength<<3;
        lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
        return lWordArray;
    };
 
    var wordToHex = function(lValue) {
        var wordToHexValue="",wordToHexValue_temp="",lByte,lCount;
        for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            wordToHexValue_temp = "0" + lByte.toString(16);
            wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length-2,2);
        }
        return wordToHexValue;
    };
 
    var x=[],
        k,AA,BB,CC,DD,a,b,c,d,
        S11=7, S12=12, S13=17, S14=22,
        S21=5, S22=9 , S23=14, S24=20,
        S31=4, S32=11, S33=16, S34=23,
        S41=6, S42=10, S43=15, S44=21;
 
    str = this.utf8_encode(str);
    x = convertToWordArray(str);
    a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
    
    xl = x.length;
    for (k=0;k<xl;k+=16) {
        AA=a; BB=b; CC=c; DD=d;
        a=_FF(a,b,c,d,x[k+0], S11,0xD76AA478);
        d=_FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
        c=_FF(c,d,a,b,x[k+2], S13,0x242070DB);
        b=_FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
        a=_FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
        d=_FF(d,a,b,c,x[k+5], S12,0x4787C62A);
        c=_FF(c,d,a,b,x[k+6], S13,0xA8304613);
        b=_FF(b,c,d,a,x[k+7], S14,0xFD469501);
        a=_FF(a,b,c,d,x[k+8], S11,0x698098D8);
        d=_FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
        c=_FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
        b=_FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
        a=_FF(a,b,c,d,x[k+12],S11,0x6B901122);
        d=_FF(d,a,b,c,x[k+13],S12,0xFD987193);
        c=_FF(c,d,a,b,x[k+14],S13,0xA679438E);
        b=_FF(b,c,d,a,x[k+15],S14,0x49B40821);
        a=_GG(a,b,c,d,x[k+1], S21,0xF61E2562);
        d=_GG(d,a,b,c,x[k+6], S22,0xC040B340);
        c=_GG(c,d,a,b,x[k+11],S23,0x265E5A51);
        b=_GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
        a=_GG(a,b,c,d,x[k+5], S21,0xD62F105D);
        d=_GG(d,a,b,c,x[k+10],S22,0x2441453);
        c=_GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
        b=_GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
        a=_GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
        d=_GG(d,a,b,c,x[k+14],S22,0xC33707D6);
        c=_GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
        b=_GG(b,c,d,a,x[k+8], S24,0x455A14ED);
        a=_GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
        d=_GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
        c=_GG(c,d,a,b,x[k+7], S23,0x676F02D9);
        b=_GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
        a=_HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
        d=_HH(d,a,b,c,x[k+8], S32,0x8771F681);
        c=_HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
        b=_HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
        a=_HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
        d=_HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
        c=_HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
        b=_HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
        a=_HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
        d=_HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
        c=_HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
        b=_HH(b,c,d,a,x[k+6], S34,0x4881D05);
        a=_HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
        d=_HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
        c=_HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
        b=_HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
        a=_II(a,b,c,d,x[k+0], S41,0xF4292244);
        d=_II(d,a,b,c,x[k+7], S42,0x432AFF97);
        c=_II(c,d,a,b,x[k+14],S43,0xAB9423A7);
        b=_II(b,c,d,a,x[k+5], S44,0xFC93A039);
        a=_II(a,b,c,d,x[k+12],S41,0x655B59C3);
        d=_II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
        c=_II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
        b=_II(b,c,d,a,x[k+1], S44,0x85845DD1);
        a=_II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
        d=_II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
        c=_II(c,d,a,b,x[k+6], S43,0xA3014314);
        b=_II(b,c,d,a,x[k+13],S44,0x4E0811A1);
        a=_II(a,b,c,d,x[k+4], S41,0xF7537E82);
        d=_II(d,a,b,c,x[k+11],S42,0xBD3AF235);
        c=_II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
        b=_II(b,c,d,a,x[k+9], S44,0xEB86D391);
        a=addUnsigned(a,AA);
        b=addUnsigned(b,BB);
        c=addUnsigned(c,CC);
        d=addUnsigned(d,DD);
    }
 
    var temp = wordToHex(a)+wordToHex(b)+wordToHex(c)+wordToHex(d);
 
    return temp.toLowerCase();
}

function utf8_encode ( argString ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var string = (argString+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}