		var urlPrefix = "http://localhost/engelpharma/webshop_uj/";
		
		function myLogger(text, o)
		{
			if(0 && console)
			{
				if(text){console.log(text);}
				console.log(o);
			}
		}
		
		function getObj(id){
			return document.getElementById(id);
		}
		
//			YAHOO.util.Dom.setStyle('slideId1','display','none');
		
		
		function init() {
				if( typeof( window.innerWidth ) == 'number' ) {
					//Non-IE
					myWidth = window.innerWidth;
					myHeight = window.innerHeight;
				} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
					//IE 6+ in 'standards compliant mode'
					myWidth = document.documentElement.clientWidth;
					myHeight = document.documentElement.clientHeight;
				} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
					//IE 4 compatible
					myWidth = document.body.clientWidth;
					myHeight = document.body.clientHeight;
				}
				
				window.toolbar="no";

				return true;
		}
		
		function validateEmail(id)
		{
			var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
			return emailPattern.test(id);
		} 		
		function open_fullscreen (url, title) {
			loadMusicPlayer(null, [selectedMusic,false]);
			window.open(url,title,"width="+(screen.availWidth-0)+",height="+(screen.availHeight-18)+",scrollbars=yes,top=0,left=0,toolbar=no,location=no,directories=no,menubar=no,resizable=no,status=no");
		}

		function lightFocus(element, className, text)
		{
			if(element.value==text)
			{
				element.value ='';
				YAHOO.util.Dom.removeClass(element, className);
			}
		}
		function lightBlur(element, className, text)
		{
			if(element.value=='')
			{
				element.value=text
				YAHOO.util.Dom.addClass(element, className);
			};
		}
		
		function showCatMenu()
		{
			if(categoriesMenu)
			{
				stopIt();
				categoriesMenu.show();
			}
		}
		
		function showArchiv()
		{
			if(archivMenu)
			{
				stopIt();
				archivMenu.show();
			}
		}
		
		function show(el1Name,el2Name){
			YAHOO.util.Dom.setStyle(el1Name,'display','none');
			YAHOO.util.Dom.setStyle(el2Name,'display','block');
		}
		
		
		function findPosX(obj)
		{
			var curleft = 0;
			if(obj.offsetParent)
				while(1) 
				{
				  curleft += obj.offsetLeft;
				  if(!obj.offsetParent)
					break;
				  obj = obj.offsetParent;
				}
			else if(obj.x)
				curleft += obj.x;
			return curleft;
		}

		function findPosY(obj)
		{
			var curtop = 0;
			if(obj.offsetParent)
				while(1)
				{
				  curtop += obj.offsetTop;
				  if(!obj.offsetParent)
					break;
				  obj = obj.offsetParent;
				}
			else if(obj.y)
				curtop += obj.y;
			return curtop;
		}
		  
		var AjaxObject = {
			targetNode: null,
			redirectionUrl: null,
			isSuccess: false,
			handleSuccess:function(o) {
				// This member handles the success response
				// and passes the response object o to AjaxObject's
				// processResult member.
				this.isSuccess = true;
				if(o.responseText !== undefined && this.targetNode !== null)
				{
					this.targetNode.innerHTML=o.responseText;
				}
				if(this.redirectionUrl)
				{
					window.location.href = this.redirectionUrl;
				}
			},
		 
			handleFailure:function(o) {
				// Failure handler
			},
		 
			startRequest:function(url, method, params) {
				if (!method || method=='GET')
				{
					YAHOO.util.Connect.asyncRequest('GET', url+'&ajaxCall=1', callback, "");
				}
				else 
				{
					YAHOO.util.Connect.asyncRequest('POST', url+'&ajaxCall=1', callback, params);
				}
			}
		 
		};
		 
		/*
		 * Define the callback object for success and failure
		 * handlers as well as object scope.
		 */
		var callback = {
			success:AjaxObject.handleSuccess,
			failure:AjaxObject.handleFailure,
			timeout: 5000,
			scope: AjaxObject
			
		};
		
		function ajaxCallAddToCart(prodId, quantityFieldId, message, maxQuantity, message2)
		{
			var quantityField = YAHOO.util.Dom.get(quantityFieldId);
			if (quantityField)
			{
				var quantity = parseFloat(quantityField.value);
				var maxQuantity = parseFloat(maxQuantity);
				if(quantity<=maxQuantity)
				{
					AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameCartList');
					AjaxObject.startRequest('./cart.php?action=add&id='+prodId+'&quantity='+quantity);
					
					alert(message);
				}
				else
				{
					alert(message2);
					quantityField.value = maxQuantity;
				}
			}
		}
		
		function ajaxCallRemoveFromCart(prodId, message)
		{
			//scroll(0,0);
			if (confirm(message))
			{
				AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameCartList');
				AjaxObject.startRequest('./cart.php?action=remove&id='+prodId);

			}
		}
		
		function ajaxCallDropCart(message)
		{
			//scroll(0,0);
			if (confirm(message))
			{
				AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameCartList');
				AjaxObject.startRequest('./cart.php?action=drop');

			}
		}
		
		function ajaxCallShowCart()
		{
			AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameColB');
			AjaxObject.startRequest('./cart.php?action=fullDisplay');
		
		}
		
		function ajaxCallUpdateCart(params, url)
		{
			//AjaxObject.targetNode = YAHOO.util.Dom.get('');
			AjaxObject.redirectionUrl = url;
			AjaxObject.startRequest('./cart.php?action=update', 'POST', params);
		
		}
		
		function ajaxCallUpdateCartPaymentInfo(params, url)
		{
			//AjaxObject.targetNode = YAHOO.util.Dom.get('');
			AjaxObject.redirectionUrl = url;
			AjaxObject.startRequest('./cart.php?action=submitPayment', 'POST', params);
		
		}
		
		
		
		/*login*/
		function ajaxCallUserLogIn(formId, error1, error2)
		{
			var userForm= YAHOO.util.Dom.get(formId);
			var userNameField= userForm.email;
			var pwdField= userForm.password;
			myLogger(userNameField.value);
			myLogger(pwdField.value);
			if (userNameField != null && pwdField!=null 
				&& validateEmail(userNameField.value) && pwdField.value != '')
			{
				//AjaxObject.redirectionUrl = './index.php?page=list&action=categoryMainList';
				//AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameLogIn');
				//AjaxObject.startRequest('./user.php?userAction=logIn&id='+userNameField.value+'&pwd='+hex_md5(pwdField.value));
				//pwdField.value = hex_md5(pwdField.value);
				//userForm.submit();
				goToUrl('./index.php?page=list&action=categoryMainList&userAction=logIn&id='+userNameField.value+'&pwd='+hex_md5(pwdField.value)+'&noHTMLResponse=1');
			}
			else
			{
				YAHOO.util.Dom.setStyle(error1, 'display', 'block');
				YAHOO.util.Dom.setStyle(error2, 'display', 'none');
			}
		
		}
		function ajaxCallUserLogInCartStep2(userName, pwd, error1, error2)
		{
			var userNameField= YAHOO.util.Dom.get(userName);
			var pwdField= YAHOO.util.Dom.get(pwd);

			YAHOO.util.Dom.setStyle(error1, 'display', 'none');
			YAHOO.util.Dom.setStyle(error2, 'display', 'none');
			
			if (userNameField != null && pwdField!=null 
				&& validateEmail(userNameField.value) && pwdField.value != '')
			{
				//AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameLogIn');
				AjaxObject.redirectionUrl = './index.php?page=cart&action=userDetails';
				AjaxObject.startRequest('./user.php?userAction=logIn&id='+userNameField.value+'&pwd='+hex_md5(pwdField.value)+'&noHTMLResponse=1');
				/*
				setTimeout(
					function(){
						if(!AjaxObject.isSuccess){YAHOO.util.Dom.setStyle(error2, 'display', 'block');}
					},3500);
				*/
			}
			else
			{
				YAHOO.util.Dom.setStyle(error1, 'display', 'block');
			}
		
		}
		
		function ajaxCallUserData(action)
		{
			AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameColB');
			AjaxObject.startRequest('./user.php?userAction='+action);
		
		}
		
		function ajaxCallUserLogOut()
		{
			AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrame');
			AjaxObject.startRequest('./user.php?userAction=logOut');
			//setTimeOut(1000,(window.location.href='./index.php');
		}
		
		function ajaxCallUpdateUserData(params, url)
		{
			//AjaxObject.targetNode = YAHOO.util.Dom.get('');
			AjaxObject.redirectionUrl = url;
			AjaxObject.startRequest('./user.php?userAction=updateUserFromPost', 'POST', params);
		}
		
		/**forgotten pwd**/
		function submitForgotPassword(fieldId,errorMsg)
		{
			var emailValue = YAHOO.util.Dom.get(fieldId).value;
			if(validateEmail(emailValue))
			{
				AjaxObject.targetNode = YAHOO.util.Dom.get('mainFrameColB');
				AjaxObject.startRequest('./user.php?userAction=forgotPasswordSubmit&user_email='+emailValue);
			}
			else
			{
				alert(errorMsg);
			}
		}

		
/***************search*************************/
		function ajaxCallProductSearch(searchText, errorMsg)
		{
			var container= YAHOO.util.Dom.get('mainFrameColB');
			
			
			if (searchText.length > 2 && container != null)
			{
				AjaxObject.targetNode = container;
				AjaxObject.startRequest('./list.php?action=search&searchText='+searchText);				
			}
			else
			{
				alert(errorMsg);
			}
		
		}
		
		function goToUrl(url)
		{
			//setTimeout(function(){window.location.href = url;},500);
			window.location.href = url;
		}
		
		
		/*** validate ***/
		function validateForm(formId)
		{
			var isError = false;
			var elements = YAHOO.util.Dom.getElementsBy ( 
							function(o)
							{
								var currElIsEmpty = false;
								if(YAHOO.util.Dom.getAttribute(o, 'type')=='checkbox')
								{
									currElIsEmpty = (o.checked) ? false : true;
								}
								else
								{
									currElIsEmpty = (o.value=='') ? true : false;
								}
								
								//required
								var requiredValue = YAHOO.util.Dom.getAttribute(o, 'required');
								if(requiredValue)
								{
									if(currElIsEmpty) {
										YAHOO.util.Dom.addClass(o, 'requiredFieldError');
										return true;
									} 
									else if(requiredValue == 'email' && !validateEmail(o.value))
									{
										YAHOO.util.Dom.addClass(o, 'requiredFieldError');
										return true;
									}
								}

								//depend on an other INPUT element
								var dependElId = YAHOO.util.Dom.getAttribute(o, 'requiredIf');
								if(dependElId && currElIsEmpty)
								{
									if(YAHOO.util.Dom.get(dependElId).value!='')
									{
										YAHOO.util.Dom.addClass(o, 'requiredFieldError');
										return true;
									}
								}
								//depend on an a CHECKBOX
								var dependElId = YAHOO.util.Dom.getAttribute(o, 'requiredIfChecked');
								if(dependElId && currElIsEmpty)
								{
									if(YAHOO.util.Dom.get(dependElId).checked)
									{
										YAHOO.util.Dom.addClass(o, 'requiredFieldError');
										return true;
									}
								}
								//should be equals with an other elemen
								dependElId = YAHOO.util.Dom.getAttribute(o, 'equals');
								if(dependElId)
								{
									var dependEl = YAHOO.util.Dom.get(dependElId);
									if(dependEl.value != o.value)
									{
										YAHOO.util.Dom.addClass([o, dependEl] , 'requiredFieldError');
										return true;
									}
								}
								
								YAHOO.util.Dom.removeClass(o, 'requiredFieldError');
								return false;
							}, 
							'input', 
							formId
			);
			
			YAHOO.util.Dom.getElementsBy ( 
							function(o)
							{
								if(YAHOO.util.Dom.getAttribute(o, 'required') && o.value=='')
								{
									YAHOO.util.Dom.addClass(o, 'requiredFieldError');
									isError = true;
								}
							},
							'select',
							formId
			);
			
			if(!isError && (elements == null || elements.length == 0))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		
		
		function submitUserRegistrationForm(formId, errorMsg)
		{
			if(validateForm(formId))
			{
				var passwordField = YAHOO.util.Dom.get('users_password');
				passwordField.value = hex_md5(passwordField.value);
				
				var passwordOldField = YAHOO.util.Dom.get('users_passwordOld');
				if(passwordOldField && passwordOldField.value!=''){passwordOldField.value = hex_md5(passwordOldField.value);}
				
				YAHOO.util.Dom.get(formId).submit();
			}
			else
			{
				alert(errorMsg);
			}
		}
		
		
		
/******************** contact *****************/
				function validate(inputFields)
				{
					var isValid=true;
					for(var i=0; i<inputFields.length; i++)
					{
						if(inputFields[i].value.length == 0)
						{
							isValid = false;
						}
					}
					return isValid;
				}
				
				function sendEmail(parentId, alertText, lang)
				{
					var inputFields = YAHOO.util.Dom.getElementsBy(
															function(el) {return true;},
															'input', 
															parentId
															);
					if (validate(inputFields))
					{
						var emailText ='Új kapcsolatfelvétel a weblapról: \n\r\n\r';
						for(var i=0; i<inputFields.length; i++)
						{
							emailText += '\n\r' + inputFields[i].name + ': ' + inputFields[i].value;
						}
						if (parentId == 'contactFields')
						{
							emailText += '\n\r\n\r' + YAHOO.util.Dom.get('comment').value;
							window.location.href = 'http://www.thomaskatona.com/blog/sendEmail.php?type=contact&text=' + emailText;
						}
						else
						{
							window.location.href = 'http://www.thomaskatona.com/blog/sendEmail.php?type=reckon&email=' + document.getElementById('reckonMyPage').value;
						}			
						
					}
					else 
					{
						alert(alertText);					
					}
				}

	function hideDomeElement(e, elementId) {
		YAHOO.util.Dom.setStyle(''+elementId,'display','none')
	}	
				
/*******************image protect**************/

	var images;
	var imageI=0;
	var protectorIsOpen = false;

	imageProtection = {
		init: function() 
		{
			YAHOO.util.Event.addListener("copyrightCover", "click", imageProtection.handle, ["close"], true);
			YAHOO.util.Event.addListener("copyrightCover", "mouseout", imageProtection.handle, ["close"], true);
			YAHOO.util.Event.addListener(document.body, "click", imageProtection.handle, ["close"], true); 
		},
		handle: function(event, action) 
		{
			if(action[0]==="open")
			{
				//imageProtectorFn.show();
				YAHOO.util.Dom.setStyle('copyrightCover', 'display', 'block'); 
				YAHOO.util.Dom.setStyle('copyrightCover', 'top', action[1]+'px'); 
				YAHOO.util.Dom.setStyle('copyrightCover', 'left', ((myWidth-action[3])/2-8)+'px'); 
				YAHOO.util.Dom.setStyle('copyrightCover', 'height', action[2]+'px'); 
				YAHOO.util.Dom.setStyle('copyrightCover', 'width', action[3]+'px'); 
				protectorIsOpen = true;
				YAHOO.util.Event.stopEvent(event);
			}
			else if (action[0]==="close" && protectorIsOpen)
			{
				//imageProtectorFn.hide();
				YAHOO.util.Dom.setStyle('copyrightCover', 'display', 'none'); 
				protectorIsOpen = false;
				YAHOO.util.Event.stopEvent(event);
			}
		}
	}
 			
/***************** right click protection **************/
	function rightClickAlert(e, msg) {
		alert(msg);
		YAHOO.util.Event.stopEvent(e);
	}
	function handleKeyPress_hu(type, args, obj) {
		switch (args[0]) {
			case 67:    //C
				alert("Az oldalon található teljes tartalom szerzoi jogvédelem alatt áll! \n \n       Thomas Katona Photography. Minden jog fenntartva. \n");
				YAHOO.util.Event.stopEvent(e);
				break;
		}
	}		
	function handleKeyPress_en(type, args, obj) {
		switch (args[0]) {
			case 67:    //C
				alert("Thomas Katona Photography. All rights reserved. \n");
				YAHOO.util.Event.stopEvent(e);
				break;
		}
	}

/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
var hexcase=0;function hex_md5(a){return rstr2hex(rstr_md5(str2rstr_utf8(a)))}function hex_hmac_md5(a,b){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a),str2rstr_utf8(b)))}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72"}function rstr_md5(a){return binl2rstr(binl_md5(rstr2binl(a),a.length*8))}function rstr_hmac_md5(c,f){var e=rstr2binl(c);if(e.length>16){e=binl_md5(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binl_md5(a.concat(rstr2binl(f)),512+f.length*8);return binl2rstr(binl_md5(d.concat(g),512+128))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?"0123456789ABCDEF":"0123456789abcdef";var b="";var a;for(var d=0;d<c.length;d++){a=c.charCodeAt(d);b+=f.charAt((a>>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b="";var d=-1;var a,e;while(++d<c.length){a=c.charCodeAt(d);e=d+1<c.length?c.charCodeAt(d+1):0;if(55296<=a&&a<=56319&&56320<=e&&e<=57343){a=65536+((a&1023)<<10)+(e&1023);d++}if(a<=127){b+=String.fromCharCode(a)}else{if(a<=2047){b+=String.fromCharCode(192|((a>>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binl(b){var a=Array(b.length>>2);for(var c=0;c<a.length;c++){a[c]=0}for(var c=0;c<b.length*8;c+=8){a[c>>5]|=(b.charCodeAt(c/8)&255)<<(c%32)}return a}function binl2rstr(b){var a="";for(var c=0;c<b.length*32;c+=8){a+=String.fromCharCode((b[c>>5]>>>(c%32))&255)}return a}function binl_md5(p,k){p[k>>5]|=128<<((k)%32);p[(((k+64)>>>9)<<4)+14]=k;var o=1732584193;var n=-271733879;var m=-1732584194;var l=271733878;for(var g=0;g<p.length;g+=16){var j=o;var h=n;var f=m;var e=l;o=md5_ff(o,n,m,l,p[g+0],7,-680876936);l=md5_ff(l,o,n,m,p[g+1],12,-389564586);m=md5_ff(m,l,o,n,p[g+2],17,606105819);n=md5_ff(n,m,l,o,p[g+3],22,-1044525330);o=md5_ff(o,n,m,l,p[g+4],7,-176418897);l=md5_ff(l,o,n,m,p[g+5],12,1200080426);m=md5_ff(m,l,o,n,p[g+6],17,-1473231341);n=md5_ff(n,m,l,o,p[g+7],22,-45705983);o=md5_ff(o,n,m,l,p[g+8],7,1770035416);l=md5_ff(l,o,n,m,p[g+9],12,-1958414417);m=md5_ff(m,l,o,n,p[g+10],17,-42063);n=md5_ff(n,m,l,o,p[g+11],22,-1990404162);o=md5_ff(o,n,m,l,p[g+12],7,1804603682);l=md5_ff(l,o,n,m,p[g+13],12,-40341101);m=md5_ff(m,l,o,n,p[g+14],17,-1502002290);n=md5_ff(n,m,l,o,p[g+15],22,1236535329);o=md5_gg(o,n,m,l,p[g+1],5,-165796510);l=md5_gg(l,o,n,m,p[g+6],9,-1069501632);m=md5_gg(m,l,o,n,p[g+11],14,643717713);n=md5_gg(n,m,l,o,p[g+0],20,-373897302);o=md5_gg(o,n,m,l,p[g+5],5,-701558691);l=md5_gg(l,o,n,m,p[g+10],9,38016083);m=md5_gg(m,l,o,n,p[g+15],14,-660478335);n=md5_gg(n,m,l,o,p[g+4],20,-405537848);o=md5_gg(o,n,m,l,p[g+9],5,568446438);l=md5_gg(l,o,n,m,p[g+14],9,-1019803690);m=md5_gg(m,l,o,n,p[g+3],14,-187363961);n=md5_gg(n,m,l,o,p[g+8],20,1163531501);o=md5_gg(o,n,m,l,p[g+13],5,-1444681467);l=md5_gg(l,o,n,m,p[g+2],9,-51403784);m=md5_gg(m,l,o,n,p[g+7],14,1735328473);n=md5_gg(n,m,l,o,p[g+12],20,-1926607734);o=md5_hh(o,n,m,l,p[g+5],4,-378558);l=md5_hh(l,o,n,m,p[g+8],11,-2022574463);m=md5_hh(m,l,o,n,p[g+11],16,1839030562);n=md5_hh(n,m,l,o,p[g+14],23,-35309556);o=md5_hh(o,n,m,l,p[g+1],4,-1530992060);l=md5_hh(l,o,n,m,p[g+4],11,1272893353);m=md5_hh(m,l,o,n,p[g+7],16,-155497632);n=md5_hh(n,m,l,o,p[g+10],23,-1094730640);o=md5_hh(o,n,m,l,p[g+13],4,681279174);l=md5_hh(l,o,n,m,p[g+0],11,-358537222);m=md5_hh(m,l,o,n,p[g+3],16,-722521979);n=md5_hh(n,m,l,o,p[g+6],23,76029189);o=md5_hh(o,n,m,l,p[g+9],4,-640364487);l=md5_hh(l,o,n,m,p[g+12],11,-421815835);m=md5_hh(m,l,o,n,p[g+15],16,530742520);n=md5_hh(n,m,l,o,p[g+2],23,-995338651);o=md5_ii(o,n,m,l,p[g+0],6,-198630844);l=md5_ii(l,o,n,m,p[g+7],10,1126891415);m=md5_ii(m,l,o,n,p[g+14],15,-1416354905);n=md5_ii(n,m,l,o,p[g+5],21,-57434055);o=md5_ii(o,n,m,l,p[g+12],6,1700485571);l=md5_ii(l,o,n,m,p[g+3],10,-1894986606);m=md5_ii(m,l,o,n,p[g+10],15,-1051523);n=md5_ii(n,m,l,o,p[g+1],21,-2054922799);o=md5_ii(o,n,m,l,p[g+8],6,1873313359);l=md5_ii(l,o,n,m,p[g+15],10,-30611744);m=md5_ii(m,l,o,n,p[g+6],15,-1560198380);n=md5_ii(n,m,l,o,p[g+13],21,1309151649);o=md5_ii(o,n,m,l,p[g+4],6,-145523070);l=md5_ii(l,o,n,m,p[g+11],10,-1120210379);m=md5_ii(m,l,o,n,p[g+2],15,718787259);n=md5_ii(n,m,l,o,p[g+9],21,-343485551);o=safe_add(o,j);n=safe_add(n,h);m=safe_add(m,f);l=safe_add(l,e)}return Array(o,n,m,l)}function md5_cmn(h,e,d,c,g,f){return safe_add(bit_rol(safe_add(safe_add(e,h),safe_add(c,f)),g),d)}function md5_ff(g,f,k,j,e,i,h){return md5_cmn((f&k)|((~f)&j),g,f,e,i,h)}function md5_gg(g,f,k,j,e,i,h){return md5_cmn((f&j)|(k&(~j)),g,f,e,i,h)}function md5_hh(g,f,k,j,e,i,h){return md5_cmn(f^k^j,g,f,e,i,h)}function md5_ii(g,f,k,j,e,i,h){return md5_cmn(k^(f|(~j)),g,f,e,i,h)}function safe_add(a,d){var c=(a&65535)+(d&65535);var b=(a>>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<<b)|(a>>>(32-b))};
	
	

