// JavaScript Document
function roll(id, img) {
	document.getElementById(id).src = img;
}
function getCenteredCoords(width, height) {
    var xPos = null;
    var yPos = null;
    if (window.ActiveXObject) {
        xPos = window.event.screenX - (width / 2) + 100;
        yPos = window.event.screenY - (height / 2) - 100;
    } else {
        var parentSize = [window.outerWidth, window.outerHeight];
        var parentPos = [window.screenX, window.screenY];
        xPos = parentPos[0] +
            Math.max(0, Math.floor((parentSize[0] - width) / 2));
        yPos = parentPos[1] +
            Math.max(0, Math.floor((parentSize[1] - (height * 1.25)) / 2));
    }
    return [xPos, yPos];
}

function openPopupWindow(openid) {
    //document.getElementById('ops').style.display = 'none';
    //document.getElementById('bucket').innerHTML = 'Signing you in <img src="http://media.carfolks.com/images/ajax-loader-dark.gif"/>';
    var w = window.open('/openid_start.aspx?openid_identifier=' + encodeURIComponent(openid), 'openid_popup', 'width=450,height=500,location=1,status=1,resizable=yes');

    var coords = getCenteredCoords(450, 500);
    w.moveTo(coords[0], coords[1]);
}

var openidguid;
function handleOpenIDResponse(openid_args, authResponse) {
    //$("[id='ops']").css("display", "none");
    //document.getElementById('bucket').innerHTML = authResponse;

    switch (authResponse.split('|')[0]) {
        case "AUTHENTICATED":
            //change the login status on the page to logged in
            //hide the login panel
            $('#loginDialog').jqmHide();
            $("[id$='loggedIn']").val("true");
            $("[id$='LoggedInName']").html(authResponse.split('|')[2]);
            $("[id$='MyAccountLink']").attr("href", "/user");
            $("[id$='LoginStatus']").css("display", "none");
            $("[id$='myAccount']").css("display", "");

            if (typeof onLoginComplete == 'function') {
                onLoginComplete();
            }

            break;
        case "AUTHENTICATED_NO_MATCH":
            $("#regular_email").val(authResponse.split('|')[1]);
            $('#loginPanel').animate({
                opacity: 0,
                height: 'toggle'
            }, 1000);
            openidguid = authResponse.split('|')[2]
            reveal('firstTime');
            break;
        case "CANCELLED":
            $('#loginPanel').animate({
                opacity: 0.25
            }, 1000, function () {

            });
            $('#loginCancelled').css("display", "");
            $('#loginCancelled').css("opacity", "0");
            $('#loginCancelled').animate({
                opacity: 1
            }, 500, function () {

            });
        case "FAILED":
            showErrorMessage(authResponse.split('|')[1]);
            break;
        default:
            //something really bad happened
            break;
    }
}

function tryAgain() {
    $('#loginPanel').animate({
        opacity: 1,
        height: 'toggle'
    }, 1000);

    reveal('signInWAA');
}

function reveal(n) {
    $('#classicSignup').hide();
    $('#signInWAA').hide();
    $('#firstTime').hide();
    $('#forgotPassword').hide();
    $('#signedUp').hide();

    $('#'+n).show();
}

function createNewAccount() {
    reveal('classicSignup');
}

function disableLoginControl(disabled) {
    $('[id$="txtUsername"]').attr("disabled", disabled);
    $('[id$="txtPassword"]').attr("disabled", disabled);
    $('[id$="btnLogin"]').attr("disabled", disabled);
}

function resetForms() {
    var wipeInputs = ['txtEmail', 'txtPassword', 'classic_firstName', 'classic_lastName', 'classic_email', 'classic_password','regular_firstName', 'regular_lastName', 'regular_email'];

    for (var i = 0; i < wipeInputs.length; i++) 
    {
        $("[id$='" + wipeInputs[i] + "']").val("");
    }

    var hide = ['rfvTxtEmail', 'signedUp', 'classic_checkbox_v','classic_emailInUse_v', 'classic_firstName_v', 'classic_lastName_v', 'classic_email_v', 'classic_password_v', 'regular_checkbox_v', 'regular_firstName_v', 'regular_lastName_v', 'regular_email_v'];

    for (i = 0; i < wipeInputs.length; i++) {
        $("[id$='" + hide[i] + "']").hide();
    }

    $("#regular_checkbox").attr("checked", "");
    $("#classic_checkbox").attr("checked", "");
}

function clickButton(e, buttonid) {
    var evt = e ? e : window.event;
    var bt = document.getElementById(buttonid);
    if (bt) {
        if (evt.keyCode == 13) {
            bt.click();
            return false;
        }
    }
}

function showErrorMessage(msg) {
    if (!msg || msg == "") {
        msg = "Error";
    }

    $('#errorMessage').html(msg);
    $('#errorMessage').css("display", "");
    $('#errorMessage').css("opacity", "0");
    $('#errorMessage').animate({
        opacity: 1
    }, 500)
}

function showLogin(msg) {
    resetForms();

    if (!msg || msg == "") {
        msg = "You are currently not signed in.";
    }

    $('#notLoggedInMessage').html(msg);
    $('#loggingIn').hide();
    $('#errorMessage').hide();
    reveal('signInWAA');
   
    disableLoginControl("");

    if ($("[id$='loggedIn']").val() != "true") {
        $('#loginDialog').jqmShow();
        hideMap();
    }
}

function showMap() {
    if (!$('#mapContainer')) { return };
    $('#mapContainer').css("width", "350px");
    $('embed').attr("width", "350px");
}

function hideMap() {
    if (!$('#mapContainer')) { return };
    $('#mapContainer').css("width", "0px");
    $('embed').attr("width", "0px");
}

function loginClose(hash) {
    hash.w.fadeOut('2000', function () { hash.o.remove(); });
    showMap();
}
$(document).ready(function () {
    openid.init('openid_identifier');
    $('#loginDialog').jqm({ onHide: loginClose });
    Recaptcha.create("6Le73gsAAAAAAC4BQ5_y0RONzauYWFhP2SDiCW6J",
            "recaptcha", {
                theme: "white"
            });
            $('#forgotPassword').jqm({ toTop: true });
});

function GetSynchronousJSONResponse(url, postData) {
    var xmlhttp = null;
    if (window.XMLHttpRequest)
        xmlhttp = new XMLHttpRequest();
    else if (window.ActiveXObject) {
        if (new ActiveXObject("Microsoft.XMLHTTP"))
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        else
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    // to be ensure non-cached version of response
    url = url + "?rnd=" + Math.random();

    xmlhttp.open("POST", url, false); //false means synchronous
    xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    xmlhttp.send(postData);
    var responseText = xmlhttp.responseText;
    return eval('(' + responseText + ')');
}

var asyncXmlHttp;

function CallAsynchronousJSONResponse(url, postData, callback) {
    asyncXmlHttp = null;
    if (window.XMLHttpRequest)
        asyncXmlHttp = new XMLHttpRequest();
    else if (window.ActiveXObject) {
        if (new ActiveXObject("Microsoft.XMLHTTP"))
            asyncXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        else
            asyncXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    // to be ensure non-cached version of response
    url = url + "?rnd=" + Math.random();

    asyncXmlHttp.onreadystatechange = callback;
    asyncXmlHttp.open("POST", url, true);
    asyncXmlHttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    asyncXmlHttp.send(postData);
}

function showLoginBox() {
    disableLoginControl("disabled");
    $('#errorMessage').css("display", "none");
    $('#loggingIn').css("display", "");
    $('#loggingIn').css("opacity", "0");
    $('#loggingIn').animate({ opacity: 1 }, 0);
}
function loginDirect() {
    showLoginBox();

    var loggedinResponse = GetSynchronousJSONResponse('/loginWS.asmx/Login', "{username:'" + $("[id$='txtUsername']").val() + "', password:'" + $("[id$='txtPassword']").val() + "'}").d;

    disableLoginControl("");
    $('#loggingIn').css("display", "none");
    $('#errorMessage').css("display", "none");

    if (loggedinResponse.success) {
        $('#loginDialog').jqmHide();
        $("[id$='loggedIn']").val("true");
        $("[id$='LoggedInName']").html(loggedinResponse.firstName);
        $("[id$='MyAccountLink']").attr("href", "/user");
        $("[id$='LoginStatus']").css("display", "none");
        $("[id$='myAccount']").css("display", "");

        if (typeof onLoginComplete == 'function') {
            onLoginComplete(); 
        }

    } else if (!loggedinResponse.success) {
        showErrorMessage(loggedinResponse.message);
    }
}

//-- PopUP 
var divPopUp = null

//--Mouse-------------------------------
function Get_MouseCoords(evt) {
    var evt = evt || window.event;
    var x = evt.x || evt.clientX;
    var y = evt.y || evt.clientY;
    return [x, y];
}
function Get_MouseCoord_X(event) {
    var coords = Get_MouseCoords(event);
    return coords[0];
}
function Get_MouseCoord_Y(event) {
    var coords = Get_MouseCoords(event);
    return coords[1];
}

//--My events----------------------------------
function ShowPopup(oEvent, id) {
    HidePopup();
    divPopUp = $get(id);
    oEvent = oEvent || window.event;
    var target = oEvent.target || oEvent.srcElement;

    VisiblePopUp(oEvent);
}

//-- Array
var arText = null;
var arID = null;

function VisiblePopUp(oEvent) {
    if (!divPopUp) {
        return;
    }
    //document.body.appendChild(divPopUp);
    var x = Get_MouseCoord_X(oEvent);
    var y = Get_MouseCoord_Y(oEvent);

    var rightedge = document.body.clientWidth - x;
    var bottomedge = document.body.clientHeight - y;

    var parentElement = document.body.parentElement || document.body.parentNode;

    if (rightedge < divPopUp.offsetWidth)
        divPopUp.style.left = parentElement.scrollLeft + x + 10 - divPopUp.offsetWidth + "px";
    else
        divPopUp.style.left = parentElement.scrollLeft + x + 10 + "px";

    if (bottomedge < divPopUp.offsetHeight) {
        divPopUp.style.top = parentElement.scrollTop + y - divPopUp.offsetHeight + "px";
    } else {
        divPopUp.style.top = parentElement.scrollTop + y + "px";
    }

    if (x != 0 && y != 0)
        divPopUp.style.display = 'block';
}

function HidePopup() {
    if (divPopUp) {
        divPopUp.style.display = 'none';
    }
}

function signupClassic() {
    var lobj = {};

    var validators = ["classic_firstName", "classic_lastName", "classic_email", "classic_password"];
    var failed = false;

    for (var i = 0; i < validators.length; i++) {
        if (!$("#" + validators[i]).val()) {
            $("#" + validators[i] + "_v").show();
            failed = true;
        } else {
            $("#" + validators[i] + "_v").hide();
        }
    }

    if (!($("#classic_checkbox").is(":checked"))) {
        failed = true;
        $("#classic_checkbox_v").show();
    } else {
        $("#classic_checkbox_v").hide();
    }
    
    if (failed) {
        return;
    }

    lobj.firstName = $("[id$='classic_firstName']").val();
    lobj.lastName = $("[id$='classic_lastName']").val();
    lobj.email = $("[id$='classic_email']").val();
    lobj.password = $("[id$='classic_password']").val();

    $("[id$='signupBtnClassic']").attr("disabled", "disabled");
    var signupResponse = GetSynchronousJSONResponse('/loginWS.asmx/SignUp', JSON.stringify(lobj)).d;
    $("[id$='signupBtnClassic']").removeAttr("disabled");

    if (!signupResponse.success) {
        $("#classic_emailInUse_v").show();
    } else {
        resetForms();
        reveal('signedUp');
    }
}




function signup() {
    var lobj = {};

    var validators = ["regular_firstName", "regular_lastName", "regular_email"];
    var failed = false;
    for (var i = 0; i < validators.length; i++) {
        if (!$("#" + validators[i]).val()) {
            $("#" + validators[i] + "_v").show();
            failed = true;
        } else {
            $("#" + validators[i] + "_v").hide();
        }
    }

    if (!($("#regular_checkbox").is(":checked"))) {
        failed = true;
        $("#regular_checkbox_v").show();
    } else {
        $("#regular_checkbox_v").hide();
    }

    if (failed) {
        return;
    }
    lobj.openIDGuid = openidguid
    lobj.firstName = $("[id$='regular_firstName']").val();
    lobj.lastName = $("[id$='regular_lastName']").val();
    lobj.email = $("[id$='regular_email']").val();

    $("[id$='btnSignup']").attr("disabled", "disabled");
    var signupResponse = GetSynchronousJSONResponse('/loginWS.asmx/SignUpOpenID', JSON.stringify(lobj)).d;
    $("[id$='btnSignup']").removeAttr("disabled");

    if (!signupResponse.success) {
        $("#regular_emailInUse_v").show();
    } else {
        $('#firstTime').hide();
        $('#signedUp').show();
        resetForms();
    }
}

function submitForgottenPassword() {

    if (!$("[id$='txtEmail']").val() || $("[id$='txtEmail']").val() == "") {
        $('#rfvTxtEmail').show();
        return false;
    } else {
        $('#rfvTxtEmail').hide();
    }

    reviewWS.ValidateRecaptcha(Recaptcha.get_challenge(), Recaptcha.get_response(), onValidateForgotPasswordRecaptchaSuccess, null);
    return false;
}

function ValidateForgotPassWordRecaptcha() {
  
    return false;
}
function onValidateForgotPasswordRecaptchaSuccess(ret) {
    $("#recaptchaInvalid").hide();
    if (ret == true) {
        if (GetSynchronousJSONResponse('/loginWS.asmx/ForgotPassword', '{ "email":"' + $("[id$='txtEmail']").val() + '" }').d) {
            $("#lostPassword").hide();
            $("#passwordSent").fadeIn('normal');
        }
        else {
            alert("There was a problem sending your password reminder. Please contact us at support@carfolks.com");
            Recaptcha.reload();
        }
    }
    else {
        $("#recaptchaInvalid").show(250);
        //Reload recaptcha in case it fails 
        Recaptcha.reload();
    }
}
function retrievePassword() {
    Recaptcha.reload();

    $("#lostPassword").show();
    $("#passwordSent").hide();

    reveal("forgotPassword");
}
