﻿/// <reference name="MicrosoftAjax.js"/>

// UI FUNCTIONS ===========================================

function limitTextLength(textbox, maxLength, charRemainingElemId) {
    charRemainingElemId = (charRemainingElemId || null);
    try {
        if (textbox.value.length > maxLength) {
            textbox.value = textbox.value.substring(0, maxLength);
            textbox.focus();
            if (window.event) {
                window.event.cancelBubble = true;
                window.event.returnValue = false;
                if (window.event.keyCode) window.event.keyCode = 0;
            }
        }
        if (charRemainingElemId) {
            $get(charRemainingElemId).innerHTML = (maxLength - textbox.value.length);
        }
    } catch(ex) { }
}

function setFocus(el) {
    if (!el) return;
    el.focus();
    if (el.select) el.select();
}

function setTrim(txtElem) {
    txtElem.value = txtElem.value.trim();
}

function imageSwap(img, fileName) {
    img.src = fileName;
}

// VALIDATION ========================================

function isEmpty(txtElem) {
    return (txtElem.value.length < 1);
}

// AJAX  =============================================

function getWebRequest(verb, url, userContext) {
    var request = new Sys.Net.WebRequest();
    request.set_url(url);
    request.set_httpVerb(verb);
    if (userContext) request.set_userContext(userContext);
    return request;
}

// RATINGS =============================================

function rateEntity(eid, etid, rating, progressID, labelID, shoeScaleID, ratingHintID) {
    $get(progressID).style.display = "inline";
    var ctx = {"progressID":progressID, "labelID":labelID, "shoeScaleID":shoeScaleID, "ratingHintID":ratingHintID};
    var request = getWebRequest("GET", "AjaxHandler.ashx?m=AddRating&eid=" + eid + "&etid=" + etid + "&r=" + rating, ctx);
    if (request) {
        request.add_completed(onRateEntityComplete);
        request.invoke();
    } else {
        alert("Error [rateEntity]: Unable to create web request.");
    }
}

function onRateEntityComplete(executor, eventArgs) {
    var ctx = executor.get_webRequest().get_userContext();
    $get(ctx.progressID).style.display = "none";
    if (executor.get_responseAvailable()) {
        var resp = executor.get_responseData();
        if (resp == "HASRATED") {
            alert("You already rated this item.");
        } else if (resp == "FAIL") {
            alert("Sorry, an unexpected error occurred.  We are unable to save your rating at this time.");
        } else {
            var rating = eval(resp);
            $get(ctx.labelID).innerHTML = rating.DisplayMessage;
            $get(ctx.shoeScaleID).style.width = rating.Percentage + "%";
            $get(ctx.ratingHintID).innerHTML = "THANKS FOR VOTING!";
        }
    }
}

// DOM FUNCTIONS ===========================================

function domGetPos(elem) {
    var leftpos = toppos = 0;
    if (elem.offsetParent) {
        while (true) {
            leftpos += elem.offsetLeft;
            toppos += elem.offsetTop;
            //commenting these 2 lines makes it work in ie7.
            //if (elem.scrollLeft) leftpos -= elem.scrollLeft;
            //if (elem.scrollTop) toppos -= elem.scrollTop;
            if (!elem.offsetParent) break;
            elem = elem.offsetParent;
        }
    } else {
        if (elem.x) leftpos = elem.x;
        if (elem.y) toppos = elem.y;
    }
    return [leftpos, toppos];
}

// HINT FUNCTIONS ===========================================

function popupHint(show, sender, caption, text, hintWidth, topOffset, leftOffset) {
    var divHint = $get("hintContainer"); //in masterpage
    if (!divHint) return;
    if (show) {
        var internalTopOffset = 4;
        if (document.documentMode) {
            if (document.documentMode == 7) internalTopOffset = 11;
        }
        hintWidth = (hintWidth || 250);
        topOffset = (topOffset || 0);
        leftOffset = (leftOffset || 0);
        $get("hintContainerCaption", divHint).innerHTML = caption;
        $get("hintContainerText", divHint).innerHTML = text;
        divHint.style.width = hintWidth + "px";
        var pos = domGetPos(sender);
        divHint.style.left = (pos[0] - parseInt(hintWidth / 2) - leftOffset) + "px";
        divHint.style.top = (pos[1] + internalTopOffset - topOffset) + "px";
    }
    divHint.style.display = (show ? "block" : "none");
}
