﻿$(function() {
	$.fn.qtip.styles.mystyle = { // Last part is the name of the style
		padding: 3,
		background: 'black',
		color: 'white',
		textAlign: 'center',
		border:
				{
					width: 7,
					radius: 5,
					color: 'black'
				},
		tip: 'bottomLeft',
		name: 'dark'
	}
});

// eXant.iBuilder2 Validators 2.0
$(function() {
    //prepareInputsForHints();
});
/*
function prepareInputsForHints() {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        // test to see if the hint span exists first
        if (inputs[i].parentNode.getElementsByTagName("span")[0]) {
            // the span exists!  on focus, show the hint
            inputs[i].onfocus = showHint;
            // when the cursor moves away from the field, hide the hint
            inputs[i].onblur = function() {
                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
            }
        }
    }
    // repeat the same tests as above for selects
    var selects = document.getElementsByTagName("select");
    for (var k = 0; k < selects.length; k++) {
        if (selects[k].parentNode.getElementsByTagName("span")[0]) {
            selects[k].onfocus = showHint;
            selects[k].onblur = function() {
                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
            }
        }
    }
}

function showHint() {
    var hint = this.parentNode.getElementsByTagName("span")[0];
    var isvalid = true;
    var isrequired = true;
*/
function prepareInputsForHints() {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        // test to see if the hint span exists first
        //if (inputs[i].parentNode.getElementsByTagName("span")[0]) {
        if ($(inputs[i]).next('.hint_rgt, .hint_lft')) {
            // the span exists!  on focus, show the hint
            inputs[i].onfocus = showHint;
            // when the cursor moves away from the field, hide the hint
            inputs[i].onblur = function() {
                $(this).next('.hint_rgt, .hint_lft').css('display', 'none');                
            }
        }
    }
    // repeat the same tests as above for selects
    var selects = document.getElementsByTagName("select");
    for (var k = 0; k < selects.length; k++) {
        //if (selects[k].parentNode.getElementsByTagName("span")[0]) {
        if ($(selects[k]).next('.hint_rgt, .hint_lft')) {
            selects[k].onfocus = showHint;
            selects[k].onblur = function() {
                $(this).next('.hint_rgt, .hint_lft').css('display', 'none');                
            }
        }
    }
}

function showHint() {
    //var hint = this.parentNode.getElementsByTagName("span")[0];
    var hint = $(this).next('.hint_rgt, .hint_lft')[0];
    if (hint == null) return;
    
    var isvalid = true;
    var isrequired = true;
    if (typeof (hint.evaluationfunction) == "function")
        isrequired = isvalid = hint.evaluationfunction(hint, true);
    if (typeof (hint.evaluationisrequiredfunction) == "string")
        isrequired = eval(hint.evaluationisrequiredfunction)(hint, false);

    if (!isvalid) {
        hint.style.display = "inline";
        hint.style.visibility = "inherit";

        // pozycja span
        var spanPos = findPos(hint);
        // szerokość span
        var spanWidth = hint.offsetWidth;
        // szerokość okna przeglądarki
        var browserSize = getBrowserSize();

        if (spanPos[0] + spanWidth > browserSize[0]) {
            // szerokość first col
            var labelWidth = this.parentNode.parentNode.getElementsByTagName("td")[0].offsetWidth;
            // szerokość input
            var inputWidth = this.offsetWidth;

            hint.style.marginLeft = "-" + (labelWidth + inputWidth + spanWidth + 20).toString() + "px";
            hint.setAttribute("class", "hint_lft");
        }
        else {
            hint.setAttribute("class", "hint_rgt");
        }

        if (typeof (hint.customfunction) == "string") {
            items = eval(hint.customfunction)(hint);

            for (i = 0; i < items.length; i++) {
                var m = $("span.hint-item", $(hint)).get(i);
                if (items[i])
                    $(m).removeClass("invalid").addClass("valid");
                else
                    $(m).removeClass("valid").addClass("invalid");
            }
        }
        else {
            var m1 = $("span.hint-item", $(hint)).get(0);
            if (isrequired)
                $(m1).removeClass("invalid").addClass("valid");
            else
                $(m1).removeClass("valid").addClass("invalid");

            var m2 = $("span.hint-item", $(hint)).get(1);
            if (isvalid)
                $(m2).removeClass("invalid").addClass("valid");
            else
                $(m2).removeClass("valid").addClass("invalid");
        }
    }
}

function getBrowserSize() {
    var myWidth = 0, myHeight = 0;
    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;
    }
    return [myWidth, myHeight];
}

var isDoCallBackFunction = false;
function ivrMarkSender(sender, retVal) {
    if (retVal == false) {
        $('#' + sender.controltovalidate).addClass("ibuilderInvalidTextBox");
        $('#' + sender.controltocompare).addClass("ibuilderInvalidTextBox");

        if (sender.callBackFunction && isDoCallBackFunction == false) {
            isDoCallBackFunction = true;
            eval(sender.callBackFunction);
            setTimeout("isDoCallBackFunction = false;", 2000);
        }
    }
    else {
        $('#' + sender.controltovalidate).removeClass("ibuilderInvalidTextBox");
        $('#' + sender.controltocompare).removeClass("ibuilderInvalidTextBox");
    }

    return retVal;
}

function ivrRequiredField(sender, mark) {
    var retVal = true;

    var value = ValidatorGetValue(sender.controltovalidate);
    if (ValidatorTrim(value).length == 0) {
        retVal = false;
    }
    if (mark != false)
        return ivrMarkSender(sender, retVal);

    return retVal;
}

function ivrRegularExpression(sender) {
    var retVal = true;

    var value = ValidatorGetValue(sender.controltovalidate);
    if (ValidatorTrim(value).length == 0) {
        retVal = false;
    }
    if (retVal) {
        var rx = new RegExp(sender.validationexpression);
        var matches = rx.exec(value);
        if (matches == null || value != matches[0]) {
            retVal = false;
        }
    }

    return ivrMarkSender(sender, retVal);
}

function ivrLength(sender) {
    var retVal = true;
    var value = ValidatorGetValue(sender.controltovalidate);
    if (ValidatorTrim(value).length == 0) {
        retVal = false;
    }
    if (retVal) {
        var length = parseInt(sender.validationlength);
        retVal = value.length >= length;
    }

    return ivrMarkSender(sender, retVal);
}

function ivrRange(sender) {
    var retVal = true;
    var value = ValidatorGetValue(sender.controltovalidate);
    if (ValidatorTrim(value).length == 0) {
        retVal = false;
    }
    if (retVal) {
        retVal = (ivrValidatorCompare(value, sender.minimumvalue, "GreaterThanEqual", sender) && ivrValidatorCompare(value, sender.maximumvalue, "LessThanEqual", sender));
    }

    return ivrMarkSender(sender, retVal);
}

function ivrCompare(sender) {
    var retVal = true;
    var value = ValidatorGetValue(sender.controltovalidate);
    if (ValidatorTrim(value).length == 0) {
        retVal = false;
    }
    if (retVal) {
        var compareTo = "";
        if ((typeof (sender.controltocompare) != "string") ||
			(typeof (document.getElementById(sender.controltocompare)) == "undefined") ||
			(null == document.getElementById(sender.controltocompare))) {
            if (typeof (sender.valuetocompare) == "string") {
                compareTo = sender.valuetocompare;
            }
        }
        else {
            compareTo = ValidatorGetValue(sender.controltocompare);
        }
        var operator = "Equal";
        if (typeof (sender.operator) == "string") {
            operator = sender.operator;
        }
        retVal = ivrValidatorCompare(value, compareTo, operator, sender);
    }

    return ivrMarkSender(sender, retVal);
}

function ivrValidatorCompare(operand1, operand2, operator, val) {
    var dataType = val.type;
    var op1, op2;
    if ((op1 = ValidatorConvert(operand1, dataType, val)) == null)
        return false;
    if (operator == "DataTypeCheck")
        return true;
    if ((op2 = ValidatorConvert(operand2, dataType, val)) == null)
        return false;
    switch (operator) {
        case "NotEqual":
            return (op1 != op2);
        case "GreaterThan":
            return (op1 > op2);
        case "GreaterThanEqual":
            return (op1 >= op2);
        case "LessThan":
            return (op1 < op2);
        case "LessThanEqual":
            return (op1 <= op2);
        default:
            return (op1 == op2);
    }
}
