﻿/*
S.Sams Lifexperience
-----------------------------------------------------
Copyright (C) 2002 - 2008 S.Sams Lifexperience!
All rights reserved
WebSite:	Http://lab.travelive.com.cn/
Msn:		S.Sams@Msn.com
Author:		Sam Shen
		
Modified by : XuJian
description: add select validate
onchange validate
error tip & style
change error & ok styles
controls comparation	             
add checkbox check function
handle hidden elements validate
add $.IsPageValid() interface
//2009-02-07
add $.ResetValidator、$.oneIsValid interface
set tip position dynamicly when elements show or hide
$.EnableBlur
*/
(function($) {
    var isSubmit = true;
    $.ToolTip = {
        CallBackEvent: null
    };
    $.ToolTip.AddParas = function(parameters) {
        $.extend($.ToolTip, parameters || {});
    };
    $.fn.tooltip = function(options) {
        var opts = $.extend({}, $.fn.tooltip.defaults, options);
        //$('body').append('<div class="tooltipshowpanel"></div>');
        //$(document).mouseover(function() { $('.tooltipshowpanel').hide(); });
        this.each(function() {
            // Tooltip
            if ($(this).attr('tip') != undefined) {
                /*$(this).hover(function() {
                $('.tooltipshowpanel')
                .css({ left: $.GetLeft(this) + 'px', top: $.GetTop(this) + 'px' });
                $('.tooltipshowpanel').html($(this).attr('tip'));
                $('.tooltipshowpanel').fadeIn("fast").bgIframe();
                },
                function() {
                $('.tooltipshowpanel').hide();*/
                $(this).focus(function() { 
                    $(this).removeClass('tooltipinputerr');
                    $(this).removeClass('tooltipinputok');
                    $.SetTip($(this).get(0).id, $(this).get(0), "tip", "HelpDiv"); 
                //$(this).blur(function() { $("#div" + $(this).get(0).id).hide(); });
                });
            }
            // Validate
            if ($(this).attr('reg') != undefined) {
                $(this).focus(function() {
                    //$(this).removeClass('tooltipinputerr');
                    //$.SetTip($(this).get(0).id, $(this).get(0), "tip");
                }).blur(function() {
                    if ($.EnableBlur) {
                        $.oneIsValid($(this).get(0));
                    }
                }); // 2009-02-07
            }
        });
        // Form Check
        if (opts.onsubmit) {
            $('form').submit(function() { return $.IsPageValid(); });
        }
    };
    $.EnableBlur = true;
    $.IsPageValid = function() {
        isSubmit = true;
        $('form').find('[reg]').each(function() {
            $.oneIsValid($(this).get(0));
        });
        if ($.ToolTip.CallBackEvent && typeof $.ToolTip.CallBackEvent == "function") {
            try {
                $.ToolTip.CallBackEvent();
            }
            catch (e) { }
        }
        return isSubmit;
    };
    //验证单个是否验证通过 xujian 2009-02-07
    $.oneIsValid = function(elem) {
        var id = elem.id;
        var srcTag = elem.tagName;
        var stype = elem.type;
        var maxValue = $(elem).attr('maxValue');
        var minValue = $(elem).attr('minValue');
        if ($.IsHiddenValidate($(elem))) return true; //continue,保留验证属性,显示时继续验证        
        switch (srcTag) {
            case "INPUT":
                if (stype == "text" || stype == "password") {
                    var thisReg = new RegExp($(elem).attr('reg'));
                    if (!thisReg.test(elem.value)) {
                        $(elem).addClass('tooltipinputerr');
                        $.SetTip(id, elem, "errortip", "TipDiv");
                        isSubmit = false;
                    }
                    else if ($(elem).attr('compareto') != undefined) { //内容比较
                        if (elem.value != $("#" + $(elem).attr('compareto')).val()) {
                            $.SetTip(id, elem, "comparetip", "TipDiv");
                            $(elem).addClass('tooltipinputerr');
                            isSubmit = false;
                        }
                        else {
                            $(elem).removeClass('tooltipinputerr').addClass('tooltipinputok');
                            $("#div" + id).hide();
                        }
                    }
                    else if ($(elem).attr('not') != undefined) {
                        if (elem.value == $(elem).attr('not')) {
                            $.SetTip(id, elem, "nottip", "TipDiv");
                            $(elem).addClass('tooltipinputerr');
                            isSubmit = false;
                        }
                        else {
                            $(elem).removeClass('tooltipinputerr').addClass('tooltipinputok');
                            $("#div" + id).hide();
                        }
                    }
                    else {
                        $(elem).removeClass('tooltipinputerr').addClass('tooltipinputok');
                        $("#div" + id).hide();
                    }
                    if (thisReg.test(elem.value) && maxValue != undefined && minValue != undefined) {
                        if (parseInt(elem.value) > parseInt(maxValue)) {
                            $.SetTip(id, elem, "maxerrtip", "TipDiv");
                            $(elem).removeClass('tooltipinputok').addClass('tooltipinputerr');
                            isSubmit = false;
                        }
                        else if (parseInt(elem.value) < parseInt(minValue)) {
                            $.SetTip(id, elem, "minerrtip", "TipDiv");
                            $(elem).removeClass('tooltipinputok').addClass('tooltipinputerr');
                            isSubmit = false;                            
                        }
                        else {
                            $(elem).removeClass('tooltipinputerr').addClass('tooltipinputok');
                            $("#div" + id).hide();
                        }
                    }
                }
                break;
            case "SELECT":
            case "TEXTAREA":
                var thisReg = new RegExp($(elem).attr('reg'));
                if (!thisReg.test(elem.value)) {
                    $(elem).addClass('tooltipinputerr');
                    $.SetTip(id, elem, "errortip", "TipDiv");
                    isSubmit = false;
                } else {
                    $(elem).removeClass('tooltipinputerr').addClass('tooltipinputok');
                    $("#div" + id).hide();
                }
                break;
        }
        return isSubmit;
    };
    $.SetTip = function(id, elem, tipname, tipClass) {
        //alert($(elem).attr(tipname) + "," + tipClass);
        var tip = $(elem).attr(tipname);
        if (tip != undefined) {
            var thisReg = new RegExp(/_/g);
            tip = tip.replace(thisReg, "&nbsp;");
            if ($("#div" + id).length == 0) {
                var div = "<div id='div" + id + "' class='" + tipClass + "'></div>";
                $(div).appendTo($("body")).html(tip)
                                    .css({ left: $.GetLeft(elem) + $(elem).width() + 28 + 'px', top: $.GetTop(elem) - 14 + 'px' });
            }
            else {
                $("#div" + id).html(tip);
            }
            $("#div" + id).removeClass();
            $("#div" + id).addClass(tipClass).show();
        }
    };
    //隐藏的控件不做验证 xujian 2008-12-20
    $.IsHiddenValidate = function(obj) {
        var IsNeedValidate = false;

        if ($(obj).css("display") == "none" || $(obj).css("visibility") == "hidden") {
            return true;
        }
        var list = $(obj).parents(":hidden");
        for (var i = 0; i < list.length; i++) {
            if ($(obj) == $(list[i]) || list.css("display") == "none"
                || list.css("visibility") == "hidden") {
                IsNeedValidate = true; break;
            }
        }
        return IsNeedValidate;
    };
    $.ResetValidator = function() {
        $(".TipDiv").remove();
        $(".HelpDiv").remove();
        //$(".tooltipinputerr").remove();
    },
    $.extend({
        GetTop: function(object) {
            var go = object;
            var oParent, oTop = go.offsetTop;
            while (go.offsetParent != null) {
                oParent = go.offsetParent;
                oTop += oParent.offsetTop;
                go = oParent;
            }
            return oTop + 20;
        },
        GetLeft: function(object) {
            var go = object;
            var oParent, oLeft = go.offsetLeft;
            while (go.offsetParent != null) {
                oParent = go.offsetParent;
                oLeft += oParent.offsetLeft;
                go = oParent;
            }
            return oLeft;
        },
        onsubmit: true
    });
    $.fn.tooltip.defaults = { onsubmit: true };
    $(document).ready(function() { jQuery('select[reg],input[reg],textarea[reg]').tooltip() });
})(jQuery)