var concours_url;
var concours_data;
var concours_datas;

$(document).ready(function() {
	//initLogin(".menu_membre a.login_ajax");

	//GESTION DES CHAMPS INPUT
	if($(".default-value").length){
		$(".default-value").defaultInputValue();
	} 
	
	if($(".messages").length) {
		displayMessagesPopInBox();
	}
	
	initCheckBoxesConcoursGlisse();
	initOngletsConcoursAccordions();
	
	JuryConcoursSlider.init();
});

var JuryConcoursSlider = JuryConcoursSlider || {};
JuryConcoursSlider.init = function () {
    if($('#carousel_jury li').length > 2){
        $('#carousel_jury').jcarousel({
	        vertical : true,
	        scroll : 1,
	        initCallback:  JuryConcoursSlider.initCallback,
	        buttonNextHTML: null,
	        buttonPrevHTML : null ,
	        wrap: 'circular',
	        visible: 2
	    });	
    }
};
JuryConcoursSlider.initCallback = function (carousel) {
	$('#flecheb_carousel_jury').unbind('click');
	$('#flecheb_carousel_jury').bind('click', function() {
	    carousel.next();
	    return false;
	});
	$('#flecheh_carousel_jury').unbind('click');
	$('#flecheh_carousel_jury').bind('click', function() {
	    carousel.prev();
	    return false;
	});
};

function initOngletsConcoursAccordions() {
	$('div[id^="onglet_accordeon_"]').each(function() {
		$(this).accordion({
			autoHeight: false,
			active: false,
			collapsible: true
		});
	});
}

/**
 * Gestion de la page d'inscription temporaire pour un concours glisse.
 */
function initCheckBoxesConcoursGlisse() {
	check_licence = $('#edit-submitted-licence-1');
	check_ticket = $('#edit-submitted-licence-2');
	num_licence_field = $('#edit-submitted-numero-de-licence');
	if (check_licence.size() && check_ticket.size() && num_licence_field.size()) {
		check_licence.attr('checked', 'checked');
		initCheckBoxesConcoursGlisse_Events(check_licence, check_ticket);
	}
}

function initCheckBoxesConcoursGlisse_Events(check_licence, check_ticket) {
	check_licence.unbind('click', checkBoxesConcoursGlisse_clicked);
	check_ticket.unbind('click', checkBoxesConcoursGlisse_clicked);
	check_licence.bind('click', checkBoxesConcoursGlisse_clicked);
	check_ticket.bind('click', checkBoxesConcoursGlisse_clicked);
}

function checkBoxesConcoursGlisse_clicked() {
	field = $('#edit-submitted-numero-de-licence');
	if ($(this).attr('id') == "edit-submitted-licence-1") {
		field.css('display', 'block');
	}
	else {
		field.css('display', 'none');
	}
}


function InitOverField() {
    var prefix_selector = "";
    if(InitOverField.arguments.length == 1)
        prefix_selector = InitOverField.arguments[0] + " ";

    $(prefix_selector + "form").each(function() {
        var id_form = $(this).attr("id");
        $(prefix_selector +"form#" + id_form + " input, " + prefix_selector + "form#" + id_form + " textarea, " + prefix_selector + "form#" + id_form + " select").each(function() {
            var id = $(this).attr("id");
            var label = $('label[for="' + id + '"]');
            if(label.hasClass("overfield")) {
                if($(prefix_selector + "form#" + id_form + " #" + id).val() == "") label.css("visibility", "visible");
                else label.css("visibility", "hidden");
                $(this).focus(function() {label.css("visibility", "hidden");});
                $(this).blur(function() {
                    setTimeout(function() {
                        if($(prefix_selector + "form#" + id_form + " #" + id).val() == "") {
                            label.css("visibility", "visible");
                        }
                    }, 200);
                });
            }
        });

    });
    
}

function TestEmail(email) {
    var reg = new RegExp("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$", "i");
    return reg.test(email);
}

function JTValiderInscriptionNewsletter() {

    if($("#email").val() != "") {
        if(TestEmail($("#email").val())) {
            $.ajax({
                url: "/inscription_newsletter",
                data: $("#inscription_newsletter").serialize(),
                success: function(data) {
                    $("#frm_insc_news").html(data);
                }
            });
        }
        else {
            alert("Format de l'email incorrect");
        }
    }
    return false;
}

function JTValiderInscriptionNewsletterHP(e) {
e.preventDefault();

    if($("#email").val() != "") {
        if(TestEmail($("#email").val())) {
            $.ajax({
                url: "/inscription_newsletter",
                data: $("#inscription_newsletter").serialize(),
                success: function(data) {
                   
                    $("#frm_insc_news").append(data);
                    $("#inscription_newsletter").toggle();
                }
            });
        }
        else {
            alert("Format de l'email incorrect");
        }
    }
    return false;
}

function JTOuvreInvitation() {
    if(!$('#popin_invitation').hasClass("display"))
        $('#popin_invitation').addClass("display");
}

function JTValiderInvitation() {
    var ok = true;

    if($("#dest_prenom").val() == "" || $("#dest_prenom").val() == $("#dest_prenom").attr("title") ) {
        $("#dest_prenom").addClass("erreur");
        ok = false;
    }
    else {
        $("#dest_prenom").removeClass("erreur");
    }
    if($("#dest_email").val() == "" || $("#dest_email").val() == $("#dest_email").attr("title") ) {
        $("#dest_email").addClass("erreur");
        ok = false;
    }
    else {
        $("#dest_email").removeClass("erreur");
    }
    if($("#exp_prenom").val() == "" || $("#exp_prenom").val() == $("#exp_prenom").attr("title") ) {
        $("#exp_prenom").addClass("erreur");
        ok = false;
    }
    else {
        $("#exp_prenom").removeClass("erreur");
    }
    if($("#message").val() == "") {
        $("#message").addClass("erreur");
        ok = false;
    }
    else {
        $("#message").removeClass("erreur");
    }

    if(ok) {
        if(!TestEmail($("#dest_email").val())) {
            alert("Format de l'email incorrect");
            $("#dest_email").addClass("erreur");
            ok = false;
        }
        else {
            $("#dest_email").removeClass("erreur");
        }
    }

    if(ok) {
        $.ajax({
            url: "/invitation_form",
            type: "POST",
            data: $("#invitation").serialize(),
            success: function(data) {
                $("#invitation").remove();
                $("#popin_invitation div.popup").append(data);
            }
        });
    }

}

function openVotePopInBox(params)
{
    params = params.split('|#|');

    if($("#VotePopInBox").length==0){
	$("body").append('<div id="VotePopInBox" class="overlay"><div class="popup"></div><div class="mask"></div></div>');
    }
    
    displayVotePopInBox();

    loadVotePopInBox('/ajax/concours/vote', 'idConcours='+params[0]+'&idAlbum='+params[1]);
}

function openPopup(params)
{
    params = params.split('|#|');
    
    var divId = params[1];
    var nom = "popup_"+divId;
    var page = window[nom]+'&idAlbum='+params[0];
    var div = $("#"+divId);
    var options = 'directories=0, menubar=0, status=0, location=0, scrollbars=0, resizable=0, toolbar=0, width='+parseInt(div.width())+', height='+parseInt(div.height());
    
    window.open( page , nom , options );
}

function displayVotePopInBox(){
    $('#VotePopInBox').toggleClass("display");
}
function reloadVotePopInBox(e){
    e.preventDefault();
    loadVotePopInBox(concours_url,concours_data);
    return false;
}

function loadVotePopInBox(url,data){
    concours_url = url;
    concours_data = data;
    
    $("#VotePopInBox .popup").html('<div class="ajax_loader"></div>');
    $("#VotePopInBox").removeClass('complete');

    $("#VotePopInBox .popup").load(url,data,function(){
	$("#VotePopInBox").addClass('complete');
	$("#VotePopInBox .popup .close").click(displayVotePopInBox);
	$("#VotePopInBox .popup .reload").click(reloadVotePopInBox);
	$("#VotePopInBox .popup form").submit(submitVotePopInBox);
	InitOverField("#VotePopInBox");
    });
}

function submitVotePopInBox(e){
    e.preventDefault();

    $(this).addClass('submitted');

    $.post($(this).attr("action"), $(this).serialize(), function(datas) {
	if(datas['success']){
	    loadVotePopInBox('/ajax/concours/vote',datas['load']);
	}else{
	    $("#VotePopInBox .popup form.submitted p.error").remove();
	    $("#VotePopInBox .popup form.submitted").append('<p class="error">'+datas['error']+'</p>');
	    $("#VotePopInBox .popup form.submitted").removeClass('submitted');
	}
    },'json');
    
    return false;
}

function openCommentPopInBox( idDiv  )
{
    alert("Ouverture " + idDiv );
}

function abuseAlbum(idAlbum){
    alert("Abus sur  "+idAlbum);
}

function commentAlbum(idAlbum){
    alert("Comment sur  "+idAlbum);
}

function typeAutocompletion() {
    var input = $('#edit-searchstring-autocomplete');
    var chaine = input.val();
    var pos = chaine.indexOf('sfr_autocomp/autocomplete',0);
    var domaine = chaine.substring(0,pos);
    var extension = chaine.substring(pos, pos+25);
    var box = $('#edit-iid').val();
    var finale = domaine+extension+"/"+box;
    $('#edit-searchstring-autocomplete').val(finale);
}

(function($) {  
	  $.fn.defaultInputValue = function() {
		this.each(function() {
			$(this).val($(this).attr('title'));
		});
			
		$(this).click(function(){
			if ($(this).attr('title') == $(this).val()) {
				$(this).val('');
			}
		});
    	
		$(this).blur(function(){
			if ($(this).val() == '') {
				$(this).val($(this).attr('title'));
			}
		});
		
	};

	$.fn.cleanInputValue = function () {
		$(this).submit(function() {
			if (($('input[name="search"]').val() == 'Cherchez une vidéo, un artiste') ||
			     $('input[name="search"]').val() == 'Rechercher parmis les artistes' ||
			     $('input[name="search"]').val() == 'Votre recherche') {
				//$('input[name="search"]').attr('disabled', 'disabled');
			}
			$('input[type="submit"][title="rechercher"]').attr('disabled', 'disabled');
			//$(this).find(':input[value=""]').attr('disabled', 'disabled');
			return true;
		});
	}
})(jQuery);

function initLogin(selecteur){
    if($(selecteur).length){
	$(selecteur).click(displayLoginPopInBox);
    }
}

function displayLoginPopInBox(){    
    $("#LoginPopInBox .popup form p.error").remove();
    $("#LoginPopInBox .popup form #edit-name").attr('value', '');
    $("#LoginPopInBox .popup form #edit-pass").attr('value', '');
    
    $('#LoginPopInBox').toggleClass("display");
    initLoginBox();
    
    return false;
}

function initLoginBox(){
    var loginBox = $("#LoginPopInBox");

    $("#LoginPopInBox .popup .popupbeta a").click(displayLoginPopInBox);
    if(loginBox.hasClass('init')){
        loginBox.removeClass('init');
        $("#LoginPopInBox .popup .close").click(displayLoginPopInBox);
        $("#LoginPopInBox .popup form").submit(submitLoginPopInForm);
        InitOverField("#LoginPopInBox");
    }
}

function displayMessagesPopInBox(){    
    $('.messages').toggleClass("display");
    initMessagesBox();
    return false;
}

function initMessagesBox(){
    var messagesBox = $(".messages");

    if(messagesBox.hasClass('init')){
    	messagesBox.removeClass('init');
        $(".messages .popup .close").click(displayMessagesPopInBox);
    }
}

function loadLoginPopInBox(url,data){

    $("#LoginPopInBox .popup").addClass('loading');

    $("#LoginPopInBox .popup").load(url,function(){
        $("#LoginPopInBox .popup").removeClass('loading');
        initLoginBox();
    });
}
function submitLoginPopInForm(e){
    e.preventDefault();

    $(this).addClass('submitted');
    $("#LoginPopInBox .popup form p.error").remove();

    $.post($(this).attr("action"), $(this).serialize(), function(datas) {
	if(datas['success']){
	    if(typeof(datas['load']) != "undefined"){
		loadLoginPopInBox('/ajax/login',datas['load']);
	    }
	    if(typeof(datas['redirect']) != "undefined"){
		window.location.href = datas['redirect'];
	    }
	}else{
	    $("#LoginPopInBox .popup form.submitted").append('<p class="error">'+datas['error']+'</p>');
	}
        $("#LoginPopInBox .popup form.submitted").removeClass('submitted');
    },'json');

    return false;
}

function displayPopInNews()
{
    $("#email").click(function () {
        /*Si c'est la valeur par defaut*/
        if($(this).val()==$(this).attr('title')){
            /*On vide le champ*/
            $(this).val('');
        }   
    });
    /**
     *Fonction remplissant les champs avec la valeur par defaut si la valeur courante est nulle
     *Le title doit contenir la valeur par defaut
     */
    $("#email").blur(function () {
        /*Si le champ est vide*/
        if($(this).val()==''){
            /*On remet la valeur par defaut*/
            $(this).val($(this).attr('title'));
        }
    });
    /*On affiche la popin*/
    $("#popin_news").toggle();

}

function closePopInNews()
{
    /*On masque la popin*/
    $("#popin_news").toggle();
    /*On supprime la reponse*/
    $("#frm_insc_news #req").remove();
    /*On affiche le formulaire dans la popin*/
    $("#inscription_newsletter").toggle();
    /*On charge la valeur par default du formualire*/
    $("#email").val($("#email").attr('title'));
}

function displayPopInMailToAFriend(nid) {
    /*On affiche la popin*/
    $(nid).show();
    /*On charge le submit */
    validation_popup_mail_friend();
    $(nid+" a.close").click(function () {
    	/*On masque la popin*/
        $(nid).hide();
        /*On charge la valeur par default du formulaire*/
        $(nid+" input[type='text'], "+nid+" textarea").each(function(){
    		$(this).val($(this).attr('title'));
    	});
    	return false;
    });
    
}

function displayError(champs, error_msg){
    champs.addClass('error');
    champs.after('<span class="error">'+error_msg+'<span>');
}

function processBlankFooterLight(){ // Non utilisée
    var liens = $("#lightFooterLinksList a, #footerBottomInfo a");
    if(liens.length){
        liens.each(function(){
            $(this).attr('target','_blank');
        });
    }else{
        alert($("#lightFooter").length);
        alert(liens.length);
    }
}

function array_key_exists(key, haystack) {
	for(var clef in haystack) {
		if(key == clef)
			return true;
	}
	return false;
}

function in_array(needle, haystack) {
	for(var i = 0 ; i < haystack.length ; i++) {
		if(needle == haystack[i])
			return true;
	}
	return false;
}

function publishToFacebook(fb_description, fb_caption, fb_link, fb_name){       
    FB.ui({ 
        method: 'feed', 
        message: fb_description+' '+fb_link,
        name : fb_name, 
        caption: fb_caption, 
        description: fb_description,
        link : fb_link
    });
    $("#VotePopInBox").removeClass('display');
}

function afficheConcoursReglement(){
    $('#reglementConcours').toggleClass('display'); 
    return false;
}
 
function getPosition(e){
	var left = 0;
	var top = 0;
	left = e.offset().left;
	top = e.offset().top;
	return new Array(left,top);
}

function validation_popup_mail_friend(){
$('input[id^=edit-email-friend-my]').blur(function () {validateEmail(this);});
$('input[id^=edit-email-friend-friend]').blur(function () {validateEmailFriend(this);});

$('.share_mail_overlay form').submit(function () {
	var error =$(this).find('span.error, span.ok');
        var id = $(this).attr("id");
        var parent = $(this).closest('div');
	var tmp = id.split("-");
        
	id = tmp[tmp.length-1];
	if(isNaN(id)) {
		var node = $(this).find('#edit-node').val();
		id = null;
	} else {
		var node = $(this).find('#edit-node-'+id).val();
	}
	if(isNaN(node)) {
		node =MD5(node);
	}
	var data = '';
	if(id && node) {
		data = 'email=' + $(this).find('#edit-email-friend-my-'+id).val()+'&friend='+$(this).find('#edit-email-friend-friend-'+id).val()+'&message='+$(this).find('#edit-email-friend-message-'+id).val()+'&node='+$(this).find('#edit-node-'+id).val();
	} else {
		data = 'email=' + $(this).find('#edit-email-friend-my').val()+'&friend='+$(this).find('#edit-email-friend-friend').val()+'&message='+$(this).find('#edit-email-friend-message').val()+'&node='+$(this).find('#edit-node').val();
	}
	$.ajax({
          url: '/email-to-friend',
		  data: data,
          dataType: 'json',
          type: 'post',
          success: function (j) {
        	if(!j.ok) { 
        		 if(id) {
        			validateEmail($('input[id=edit-email-friend-my-'+id+']'));
        			validateEmailFriend($('input[id=edit-email-friend-friend-'+id+']'));
        		 } else {
	        		 validateEmail($('input[id=edit-email-friend-my]'));
	        		 validateEmailFriend($('input[id=edit-email-friend-friend]'));
        		 }
        	} else { 
                    if(parent)
                    {
                        parent.html(j.msg);
                    }
                    else
                    {
                        if(node) {
                            $("#share_mail_"+node+" #share_email_content div").html(j.msg);
                        }
                    }
        	}
          }
        });
	return false;
});

}
 
function validateEmail(elem) {
var t;
var cible;
t = $(elem).val();cible = $(elem).next('#validateEmail');
var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
if(t.search(emailRegEx) != -1)
{
	valideChampsInsc(1, cible); 
}
else
{
	valideChampsInsc(2, cible);
}
}

function validateEmailFriend(elem) {
var t;
var cible;
t = $(elem).val();cible = $(elem).next('#validateEmailFriend');
var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
if(t.search(emailRegEx) != -1)
{
	valideChampsInsc(1, cible); 
}
else
{
	valideChampsInsc(4, cible);
}
}

var MD5 = function (string) {
 
function RotateLeft(lValue, iShiftBits) {
	return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
}

function AddUnsigned(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);
	}
	}

	function F(x,y,z) {return (x & y) | ((~x) & z);}
	function G(x,y,z) {return (x & z) | (y & (~z));}
	function H(x,y,z) {return (x ^ y ^ z);}
function I(x,y,z) {return (y ^ (x | (~z)));}

function FF(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function GG(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function HH(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function II(a,b,c,d,x,s,ac) {
	a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
	return AddUnsigned(RotateLeft(a, s), b);
};

function ConvertToWordArray(string) {
	var lWordCount;
	var lMessageLength = string.length;
	var lNumberOfWords_temp1=lMessageLength + 8;
	var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
	var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
	var lWordArray=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] | (string.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;
};

function WordToHex(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;
};

function Utf8Encode(string) {
	string = string.replace(/\r\n/g,"\n");
	var utftext = "";

	for (var n = 0; n < string.length; n++) {

		var c = string.charCodeAt(n);

		if (c < 128) {
			utftext += String.fromCharCode(c);
		}
		else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		}
		else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}

	}

	return utftext;
};

var x=Array();
var k,AA,BB,CC,DD,a,b,c,d;
var S11=7, S12=12, S13=17, S14=22;
var S21=5, S22=9 , S23=14, S24=20;
var S31=4, S32=11, S33=16, S34=23;
var S41=6, S42=10, S43=15, S44=21;

string = Utf8Encode(string);

x = ConvertToWordArray(string);

a = 0x67452301;b = 0xEFCDAB89;c = 0x98BADCFE;d = 0x10325476;

for (k=0;k<x.length;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();
}






