﻿/// <reference path="prototype.js" />
/// <author name="Lichun" pubdate="2009/06"/>
/// <summary>Prototype Controls Toolkit v1.0.0 alpha2</summary>

if (Prototype.Browser.IE) {
    Prototype.Browser.IE.Version = parseFloat(navigator.appVersion.match(/MSIE (\d+\.\d+)/)[1]);
}

var $T = {};
$T.Util = {};
$T.Util.OldForumUrlReplaceNewForumUrl = function(content){
    var reg = /(\w+).baa.com.cn/gi;
    return content.replace(reg,"baa.bitauto.com/$1");
};
$T.Util.$B = Prototype.Browser;
var $B = $T.Util.$B;
$B.IE6 = ($B.IE && parseFloat(navigator.appVersion.match(/MSIE (\d+\.\d+)/)[1]) <= 6);
$T.Util.ExecuteOnLoaded = function(handler, frame) {
    handler();
//    if (!frame) frame = window;
//    if (($B.IE && frame.document.readyState == 'complete') || (!$B.IE && frame.document.loaded === true)) {
//        handler();
//    }
//    else {
//        var lazyHandler = function(event) {
//            handler(event);
//            Event.stopObserving(frame.document, 'readystatechange', lazyHandler);
//            Event.stopObserving(frame.document, 'domcontentloaded', lazyHandler);
//        };
//        Event.observe(frame.document, 'readystatechange', lazyHandler);
//        Event.observe(frame.document, 'DOMContentLoaded', lazyHandler);
//    }
};


$T.Util.String = {};
$T.Util.String.CountContain = function(password, check) {
    if (password && check) {
        // Declare variables
        var count = 0;
        for (i = 0; i < password.length; i++) {
            if (check.indexOf(password.charAt(i)) > -1) {
                count++;
            }
        }
        return count;
    } else return 0;
};
$T.Util.String.Password = {};
$T.Util.String.Password.UpperCase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$T.Util.String.Password.LowerCase = 'abcdefghijklmnopqrstuvwxyz';
$T.Util.String.Password.Number = '0123456789';
$T.Util.String.Password.Characters = '!@#$%^&*?_~';

$T.Util.String.Password.Strength = function(password) {
    if (password) {
        // Reset combination count
        var score = 0;

        // Password length
        // -- Less than 4 characters
        if (password.length < 5) {
            score += 5;
        }
        // -- 5 to 7 characters
        else if (password.length > 4 && password.length < 8) {
            score += 10;
        }
        // -- 8 or more
        else if (password.length > 7) {
            score += 25;
        }

        // Letters
        var upperCount = $T.Util.String.CountContain(password, $T.Util.String.Password.UpperCase);
        var lowerCount = $T.Util.String.CountContain(password, $T.Util.String.Password.LowerCase);
        var lowerUpperCount = upperCount + lowerCount;
        // -- Letters are all lower case
        if (upperCount == 0 && lowerCount != 0) {
            score += 10;
        }
        // -- Letters are upper case and lower case
        else if (upperCount != 0 && lowerCount != 0) {
            score += 20;
        }

        // Numbers
        var numberCount = $T.Util.String.CountContain(password, $T.Util.String.Password.Number);
        // -- 1 number
        if (numberCount == 1) {
            score += 10;
        }
        // -- 3 or more numbers
        if (numberCount >= 3) {
            score += 20;
        }

        // Characters
        var characterCount = $T.Util.String.CountContain(password, $T.Util.String.Password.Characters);
        // -- 1 character
        if (characterCount == 1) {
            score += 10;
        }
        // -- More than 1 character
        if (characterCount > 1) {
            score += 25;
        }

        // Bonus
        // -- Letters and numbers
        if (numberCount != 0 && lowerUpperCount != 0) {
            score += 2;
        }
        // -- Letters, numbers, and characters
        if (numberCount != 0 && lowerUpperCount != 0 && characterCount != 0) {
            score += 3;
        }
        // -- Mixed case letters, numbers, and characters
        if (numberCount != 0 && upperCount != 0 && lowerCount != 0 && characterCount != 0) {
            score += 5;
        }
        return score;
    } else return 0;
};
var $string = $T.Util.String;
var $pwd = $string.Password;

$T.UI = {};


$T.UI.AlwaysVisible = {};
$T.UI.AlwaysVisible.DOM = [];
$T.UI.AlwaysVisible.Show = function(targetId, cssClass) {
    var target = $(targetId);
    if (cssClass) {
        target.className = cssClass;
    }
    if ($B.IE6 == true) {
        target.style.position = 'absolute';
        target.reposition = function(event) {
            target.style.top = Math.floor(document.documentElement.scrollTop + document.documentElement.clientHeight / 2) + 'px';
            target.style.left = Math.floor(document.documentElement.scrollLeft + document.documentElement.clientWidth / 2) + 'px';
        };
        $T.UI.AlwaysVisible.DOM.push(target);
        window.onscroll = function() {
            $T.UI.AlwaysVisible.DOM.each(
            function(s) {
                s.reposition();
            }
            );
        };
        window.onresize = window.onscroll;
        target.reposition();
    } else {
        target.style.position = 'fixed';
    }
};

$T.UI.MaskLayer = {};
$T.UI.MaskLayer.DOM = null;
$T.UI.MaskLayer.Modals = [];
$T.UI.MaskLayer.modalLock =
function(event) {

    if (event && $T.UI.MaskLayer.Modals.length > 0 && !Element.descendantOf(event.element(), $T.UI.MaskLayer.Modals[$T.UI.MaskLayer.Modals.length - 1])) {
        event.stop();
        return;
    }
};
$T.UI.MaskLayer.Show = function(opacity) {
    var modal = $T.UI.MaskLayer.Modals[$T.UI.MaskLayer.Modals.length - 1];
    modal.modalLock = function(event) {
        if (event && $T.UI.MaskLayer.Modals.length > 0 && !Element.descendantOf(event.element(), $T.UI.MaskLayer.Modals[$T.UI.MaskLayer.Modals.length - 1])) {
            event.stop();
            return;
        } else {
            if ($T.UI.MaskLayer.Modals.length == 0) {
                document.stopObserving('click', modal.modalLock);
            }
        }
    };
    document.body.focus();

    if (!$T.UI.MaskLayer.DOM) {
        var maskDiv = document.createElement('div');
        maskDiv.style.opacity = opacity;
        maskDiv.style.filter = new Template('alpha(opacity=#{opacity})').evaluate({ 'opacity': (opacity * 100) });
        maskDiv.style.backgroundColor = '#999999';
        maskDiv.style.position = ($B.IE6 == true) ? 'absolute' : 'fixed';
        maskDiv.style.top = '0px';
        maskDiv.style.left = '0px';
        maskDiv.style.width = '100%';
        maskDiv.style.height = '100%';
        maskDiv.innerHTML = '<iframe frameborder="0" scrolling="no" style="width: 100%; height: 100%; background-color: #999999; alpha: 0; filter:alpha(opacity=0);"></iframe>';
        var appendMask = function(event) {
            document.body.appendChild(maskDiv);
            if ($B.IE6) {
                maskDiv.style.height = new Template('#{height}px').evaluate({ 'height': document.documentElement.scrollHeight });
            }
        };

        $T.Util.ExecuteOnLoaded(appendMask);
        $T.UI.MaskLayer.DOM = maskDiv;
    }
    document.observe('click', modal.modalLock);
};
$T.UI.MaskLayer.Close = function() {
    if ($T.UI.MaskLayer.DOM && $T.UI.MaskLayer.Modals.length <= 1) {
        Element.remove($T.UI.MaskLayer.DOM);
        $T.UI.MaskLayer.DOM = null;
    }
    var modal = $T.UI.MaskLayer.Modals[$T.UI.MaskLayer.Modals.length - 1];
    document.stopObserving('click', modal.modalLock);
    $T.UI.MaskLayer.Modals.pop();
};

$T.UI.ModalPopup = {};
$T.UI.ModalPopup.DOM = null;
$T.UI.ModalPopup.Show = function(title, content, cssClass, handlerClose, template) {
    var modal = document.createElement('div');
    modal.className = cssClass;
    if (!template)
        template = '<h2>#{title}</h2><div class="close"><a href="javascript:void($modal.close());">关闭</a></div><div class="bot">#{content}</div>';
    modal.innerHTML = new Template(template)
                        .evaluate({ 'title': title, 'content': content, 'cssClass': cssClass });
    if (handlerClose)
        modal.handlerClose = handlerClose;
    var appendModal = function(event) {
        $T.UI.MaskLayer.Modals.push(modal);
        $T.UI.MaskLayer.Show(0.2);
        document.body.appendChild(modal);
        $T.UI.AlwaysVisible.Show(modal);
    };

    $T.Util.ExecuteOnLoaded(appendModal);
    $T.UI.ModalPopup.DOM = modal;
};
$T.UI.ModalPopup.Close = function() {
    if ($T.UI.ModalPopup.DOM) {
        document.body.removeChild($T.UI.ModalPopup.DOM);
        $T.UI.ModalPopup.DOM = null;
        $T.UI.MaskLayer.Close();
    }
};
$modal = $T.UI.ModalPopup.Show;
$modal.close = function() {
    if ($T.UI.ModalPopup.DOM) {
        var handlerClose = $T.UI.ModalPopup.DOM.handlerClose;
        $T.UI.ModalPopup.Close();
        if (handlerClose)
            handlerClose();
    }
}

$T.UI.ExpandPanel = {};
$T.UI.ExpandPanel.Show = function(panelId, cssClass, triggerId, onShow, onClose) {
    var panel = $(panelId);
    var trigger = $(triggerId);
    if (!panel.autoHide) {
        panel.autoHide = function(event) {
            if (event && trigger && event.element && (trigger == event.element() || Element.descendantOf(event.element(), panel) || Element.descendantOf(event.element(), trigger))) {
                return;
            }
            else {
                $T.UI.ExpandPanel.Close(panelId);
            }
        };
    }
    document.observe('click', panel.autoHide);
    if (!panel.stopAutoHide) {
        panel.stopAutoHide = function(event) {
            if (panel.autoHideTimeout) {
                clearTimeout(panel.autoHideTimeout);
            }
        };
    }
    if (!panel.startAutoHide) {
        panel.startAutoHide = function(event) {
            if (panel.autoHideTimeout) {
                clearTimeout(panel.autoHideTimeout);
            }
            if (event) {
                panel.autoHideTimeout = setTimeout(panel.autoHide, 670);
            }
        };
    }

    if (panel.style.display == 'none') {
        panel.className = cssClass;
        panel.style.display = '';
        panel.style.zIndex = 999998;
    }
    Event.observe(panel, 'mouseover', panel.stopAutoHide);
    Event.observe(panel, 'mouseout', panel.startAutoHide);
    if (trigger) {
        Event.observe(trigger, 'mouseover', panel.stopAutoHide);
        Event.observe(trigger, 'mouseout', panel.startAutoHide);
        Event.observe(trigger, 'click', panel.autoHide);
        panel.trigger = trigger;
    }
    panel.startAutoHide();
    if (onShow) {
        onShow();
    }
    if (onClose) {
        panel.onClose = onClose;
    }
};
$T.UI.ExpandPanel.Close = function(panelId) {
    var panel = $(panelId);
    if (panel.autoHideTimeout) {
        clearTimeout(panel.autoHideTimeout);
    }
    document.stopObserving('click', panel.autoHide);
    Event.stopObserving(panel, 'mouseover', panel.stopAutoHide);
    Event.stopObserving(panel, 'mouseout', panel.startAutoHide);
    var trigger = panel.trigger;
    if (trigger) {
        Event.stopObserving(trigger, 'mouseover', panel.stopAutoHide);
        Event.stopObserving(trigger, 'mouseout', panel.startAutoHide);
        Event.stopObserving(trigger, 'click', panel.autoHide);
        panel.trigger = null;
    }
    if (panel.style.display != 'none') {
        panel.style.display = 'none';
    }
    if (panel.onClose) {
        panel.onClose();
    }
};

$T.UI.Confirm = {};
$T.UI.Confirm.DOM = null;
$T.UI.Confirm.Show = function(title, content, cssClass, handlerOk, handlerCancel, parentModal, template) {
    if (!$T.UI.Confirm.DOM) {
        var div = document.createElement('div');
        div.className = cssClass;
        if (!template)
            template = '<h2>#{title}</h2><div class="close"><a href="javascript:void($confirm.cancel());">关闭</a></div><div class="bot">#{content}<p><input type="button" class="button_queding" onclick="javascript:void($confirm.ok());"/><input type="button" class="button_quxiao" onclick="javascript:void($confirm.cancel());"/></p></div>';
        div.innerHTML = new Template(template).evaluate({ 'title': title, 'content': content });
        var appendConfirm = function(event) {
            $T.UI.MaskLayer.Modals.push(div);
            $T.UI.MaskLayer.Show(0.2);
            if ($T.UI.MaskLayer.DOM) {
                $T.UI.MaskLayer.DOM.style.zIndex = 10000001;
                div.style.zIndex = 10000002;
            }
            $T.UI.AlwaysVisible.Show(div);
            document.body.appendChild(div);
        };
        div.handlerCancel = handlerCancel;
        div.handlerOk = handlerOk;
        div.parentModal = parentModal;
        $T.Util.ExecuteOnLoaded(appendConfirm);
        $T.UI.Confirm.DOM = div;
    }
};
$T.UI.Confirm.Close = function() {
    if ($T.UI.Confirm.DOM) {
        Element.remove($T.UI.Confirm.DOM);
        if ($T.UI.MaskLayer.DOM && $T.UI.Confirm.DOM.parentModal) {
            $T.UI.MaskLayer.DOM.style.zIndex = '';
        }
        $T.UI.MaskLayer.Close();
        $T.UI.Confirm.DOM = null;
    }
};
var $confirm = $T.UI.Confirm.Show;
$confirm.ok = function() {
    if ($T.UI.Confirm.DOM) {
        var handlerOk = $T.UI.Confirm.DOM.handlerOk;
        $T.UI.Confirm.Close();
        if (handlerOk) {
            handlerOk();
        }
    }
};
$confirm.cancel = function() {
    if ($T.UI.Confirm.DOM) {
        var handlerCancel = $T.UI.Confirm.DOM.handlerCancel;
        $T.UI.Confirm.Close();
        if (handlerCancel) {
            handlerCancel();
        }
    }
};

$T.UI.Alert = {};
$T.UI.Alert.DOM = null;
$T.UI.Alert.Show = function(title, content, cssClass, handlerOk, parentModal, template) {
    if (!$T.UI.Alert.DOM) {
        var div = document.createElement('div');
        div.className = cssClass;
        if (!template)
            template = '<h2>#{title}</h2><div class="close"><a href="javascript:void($alert.ok());">关闭</a></div><div class="bot">#{content}<p><input type="button" class="button_queding" onclick="javascript:void($alert.ok());"/></p></div>';
        div.innerHTML = new Template(template).evaluate({ 'title': title, 'content': content });
        var appendAlert = function(event) {
            $T.UI.MaskLayer.Modals.push(div);
            $T.UI.MaskLayer.Show(0.2);
            if ($T.UI.MaskLayer.DOM) {
                $T.UI.MaskLayer.DOM.style.zIndex = 10000001;
                div.style.zIndex = 10000002;
            }

            $T.UI.AlwaysVisible.Show(div);
            document.body.appendChild(div);
        };
        div.handlerOk = handlerOk;
        div.parentModal = parentModal;
        $T.Util.ExecuteOnLoaded(appendAlert);
        $T.UI.Alert.DOM = div;
    }
};
$T.UI.Alert.Close = function() {
    if ($T.UI.Alert.DOM) {
        Element.remove($T.UI.Alert.DOM);
        if ($T.UI.MaskLayer.DOM && $T.UI.Alert.DOM.parentModal) {
            $T.UI.MaskLayer.DOM.style.zIndex = '';
        }
        $T.UI.MaskLayer.Close();
        $T.UI.Alert.DOM = null;
    }
};
var $alert = $T.UI.Alert.Show;
$alert.ok = function() {
    if ($T.UI.Alert.DOM) {
        var handlerOk = $T.UI.Alert.DOM.handlerOk;
        $T.UI.Alert.Close();
        if (handlerOk) {
            handlerOk();
        }
    }
};

