/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
 * in FIPS 180-2
 * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 * Also http://anmar.eu.org/projects/jssha2/
 */
(function($){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(string){var lWordCount;var lMessageLength=string.length;var lNumberOfWordsTempOne=lMessageLength+8;var lNumberOfWordsTempTwo=(lNumberOfWordsTempOne-(lNumberOfWordsTempOne%64))/64;var lNumberOfWords=(lNumberOfWordsTempTwo+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;};var wordToHex=function(lValue){var WordToHexValue="",WordToHexValueTemp="",lByte,lCount;for(lCount=0;lCount<=3;lCount++){lByte=(lValue>>>(lCount*8))&255;WordToHexValueTemp="0"+lByte.toString(16);WordToHexValue=WordToHexValue+WordToHexValueTemp.substr(WordToHexValueTemp.length-2,2);}
return WordToHexValue;};var uTF8Encode=function(string){string=string.replace(/\x0d\x0a/g,"\x0a");var output="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){output+=String.fromCharCode(c);}else if((c>127)&&(c<2048)){output+=String.fromCharCode((c>>6)|192);output+=String.fromCharCode((c&63)|128);}else{output+=String.fromCharCode((c>>12)|224);output+=String.fromCharCode(((c>>6)&63)|128);output+=String.fromCharCode((c&63)|128);}}
return output;};$.extend({md5:function(string){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 tempValue=wordToHex(a)+wordToHex(b)+wordToHex(c)+wordToHex(d);return tempValue.toLowerCase();}});})(jQuery);

function validateCaptcha(){
    var challengeField = $("input#recaptcha_challenge_field").val();
    var responseField = $("input#recaptcha_response_field").val();
    //alert(challengeField);
    //alert(responseField);
    //return false;
    var html = $.ajax({
        type: "POST",
        url: "http://www.istoleyourbaby.com/includes/ajax/recaptcha.ajax.php",
        data: "recaptcha_challenge_field=" + challengeField + "&recaptcha_response_field=" + responseField,
        async: false
    }).responseText;
    
    if(html == "success"){
        clearError($('#recaptcha_response_field'));
        return true;
    }else{
        createError($('#recaptcha_response_field'), "Your captcha is incorrect. Please try again");
        Recaptcha.reload();
        return false;
    }
}
/* begin login validation functions */
function clearDefault(field){
    var field = $(field);
    var fieldValue = field.val();
    var defaultValue = field.attr('default');
    if(field.val()=='')
        field.val(defaultValue);
    else if(field.val()==defaultValue)
        field.val('');
    //error_status[field.attr('id')] = (fieldValue==defaultValue || field.val()=='') ?  true : false;
    //return (error_status[field.attr('name')]) ? true : false;
}
function validateLogin(){
    var error_status  = new Object;
    error_status.username = true;
    error_status.password = true;
    var userinput = $('#username');
    var pwinput = $('#password');
}
function checkExists(type, value){
    var exists;
    $.ajax({
        url: "http://www.istoleyourbaby.com/includes/ajax/checkInfo.ajax.php",
        type: "GET",
        data: type+"="+value,
        cache: false,
        async: false,
        success: function(data) {
            exists = (data==1) ? true : false;
        }
    });
    return exists;
}
function checkRegex(value, regex){
    return regex.test(value);
}
function checkLength(value, min, max){
    return (value.length >= min && value.length <= max);
}
function createError(el, msg){
    id = el.attr('id');
    el.addClass('error');
    el.attr('error', msg);
    //reg_msgBox('<span id="'+id+'_msg">'+msg+'<br></span>');
    /*$(el).qtip({
       content: msg,
       show: 'mouseover',
       hide: 'mouseout'
    });*/
    error_status[id] = true;
    return false;
}
function clearError(el){
    id = el.attr('id');
    //$('#'+id+'_msg').remove();
    el.removeClass('error');
	el.removeAttr('error');
    error_status[id] = false;
    //$(el).qtip('destroy');
    return true;
}
function validateEach(el, type){
    if(el.attr('type')!='submit' && el.attr('type')!='image'){
        fieldID = el.attr('id');
        value = el.val();
        if(error_status[fieldID])
            clearError(el);
        if(value == '' || value == el.attr('default'))
            return createError(el, 'Please fill in this field.');
        /*if(el.attr('compare'))
           console.log($('#'+el.attr('compare')).val());*/
				
        if(type=='reg'){
            if(fieldID=='username'){
                if(!checkLength(value, 3, 12))
                    return createError(el, 'Field must contain between 3 and 12 characters.');
                else if(!checkRegex(value, /^([A-Za-z0-9]+)$/))
                    return createError(el, 'Field must contain alpha numeric characters only.');
                else if(el.hasClass('checkExists') && checkExists(el.attr('name'), value))
                    return createError(el, 'This '+el.attr('name')+' already exists. Please try another, or login to your account if you own it.');
                else
                    return clearError(el);
            }
            if(el.hasClass('email')){
                if(!checkLength(value, 6, 50))
                    return createError(el, 'Field must contain between 6 and 50 characters.');
                else if(!checkRegex(value, /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/))
                    return createError(el, 'Field must contain a valid email address.');
                else if(el.hasClass('checkExists') && checkExists(el.attr('name'), value))
                    return createError(el, 'This '+el.attr('name')+' already exists. Please try another, or login to your account if you own it.');
                else if(value != $('#'+el.attr('compare')).val())
                    return createError(el, 'Emails must match.');
                else{
                    clearError($('#'+el.attr('compare')));
                    return clearError(el);
                }
            }
            if(el.attr('type')=='password'){
                if(!checkLength(value, 5, 25))
                    return createError(el, 'Field must contain between 5 and 25 characters.');
                else if(!checkRegex(value, /([A-Za-z0-9\!\@\#\$\^%\&\*\(\)\_\-\+\=\?\{\}\[\]\.]+)/))
                    return createError(el, 'Field must contain only the following characters: (a-z or A-Z) (0-9) ! @ # $ ^ % & * ( ) _ - + = ? { } [ ] .');
                else if(value != $('#'+el.attr('compare')).val())
                    return createError(el, 'Passwords must match.');
                else{
                    clearError($('#'+el.attr('compare')));
                    return clearError(el);
                }
            }
        }
        
    }
}
function validateForm(type){
    var result = false;
    var formItems = $('#'+type+'Form input');
    formItems.each(function(){
        validateEach($(this), type);
    });
    $.each(error_status, function(i, val){
            if(val == true)
                    result = true; 
    });
    return (result) ? false : true;
}
/* end login validation functions */

function submitLogin(){
    $.ajax({
        url: "http://www.istoleyourbaby.com/includes/ajax/login.ajax.php",
        type: "POST",
        data: $(this).serialize(),
        cache: false,
        async: false,
        success: function(data) {
            exists = (data==1) ? true : false;
        }
    });
    return exists;
}
function submitRegister(el){
	var formData, result;
	$.each(el.children('input'), function(){
		var key = $(this).attr('name');
		$(this).val() = formData[key];
	});
	formData.pw = $.md5($.md5(formData.pw)+salt);
    $.ajax({
        url: "http://www.istoleyourbaby.com/includes/ajax/register.ajax.php",
        type: "POST",
        data: "username="+formData.username+"&pw="+formData.pw+"&email="+formData.email+"&recaptcha_response_field="+formData.recaptcha_response_field,
        cache: false,
        async: false,
        success: function(data) {
            result = (data==1) ? true : false;
        }
    });
    return result;
}
var RecaptchaOptions = {theme : 'clean'};

var error_status = new Object; //global error array

$(document).ready(function(){
    $('#recaptcha_table tr').css({height:'20px'});
    $('.recaptcha_image_cell').css({background:'none'});
    var loginToggle = false;
    var loginForm = $('#loginForm_Cont');
    var regToggle = false;
    var loginAction = $('#loginBtn').click(function(){
        if(!loginToggle){
            loginForm.animate({width: 370});
            $('#loginForm_Elements').fadeIn("fast");
            
            loginToggle = true;
        }else{
            $('#loginForm_Elements').hide();
            $('#loginForm_Elements').fadeOut("fast", function(){
                
                loginForm.animate({width: 0});
                
            });
            loginToggle = false;
        }
        return false;
    });
    var regAction = $('#regBtn').click(function(){
        if(!regToggle){
            $('#regCont').slideDown();
            regToggle = true;
        }
        else{
            $('#regCont').slideUp();
            regToggle = false;
        }
        return false;
    });
    $('#loginForm').submit(function(){
        var validate = validateForm('login');
        //console.log(validate);
            //submitLogin();
        return false;
    });
    $('#loginForm input').each(function(){ //attaches the "clearing/adding default value" function to each form item
        $(this).focus(function(){
            clearDefault(this);
        }).blur(function(){
            clearDefault(this);
        });
    });
    $('#regForm').submit(function(){
        form = validateForm('reg');
        if(form)
			if(submitRegister($(this)))
				msgBox('Thank you for registering! Please check your email for a link to activate your account.');
        return false;
    });
    $('#regForm input').blur(function(){
        validateEach($(this), 'reg');
    }).focus(function(){
        if($(this).hasClass('error'))
            validateEach($(this), 'reg');
    });
    $('input.error').live('mouseover mouseout', function(event){
        if(event.type == 'mouseover'){
            $('#reg_msgBox').append($(this).attr('error'));
            //$('#reg_msgBox').slideDown();
        }else{
           // $('#reg_msgBox').slideUp();
            $('#reg_msgBox').empty();
        }
    });
});
