﻿/// <reference path="jquery-1.4.2.min.js" />
var AjaxFormlId = "#TB_ajaxContent";

//设置 input 感知效果
$(document).ready(function() {
    jQuery("input:[type=text], input:[type=password], textarea").hover(
    function() {
        jQuery(this).addClass("input_hover");
    },
    function() {
        jQuery(this).removeClass("input_hover");
    });
});

//输出日期格式 YYYY-MM-DD
Date.prototype.toLongDateString = function() {
    return
    this.getFullYear().toString()
        + "-" + this.getMonth() < 10 ? "0" : "" + this.getMonth().toString()
        + "-" + this.getDay() < 10 ? "0" : "" + this.getDay().toString();
}

//取得唯一id
var id = 0;
function newid() {
    id++;
    return "temp_cmda_id_" + id.toString();
}

//扩展tabs功能
jQuery.fn.extend({
    flatTabs: function() {
        this.each(function() {
            //对每个tabs生成唯一id
            var tabid = $(this).attr("id");
            if (tabid == "") {
                tabid = newid();
                $(this).attr("id", tabid);
            }
            tabid = "#" + tabid.toString();
            //生成 tabs ui li 与下面 div对应关系 自动生成 不需要人工设置
            if ($(tabid + " ul li").length != $(tabid + " .content").length) {
                alert("Tabs标签与内容页数量不匹配");
                return false;
            }
            $(tabid + " ul li").each(function(index) {
                var targetId = newid();
                $(this).attr("targetId", targetId);
                $($(tabid + " .content").get(index)).attr("id", targetId);
            });
            //绑定关系
            $(tabid + " ul li").mouseover(function() {
                $(tabid + " .content").hide();
                $(tabid + " ul li").removeClass("selected");
                $(this).addClass("selected");
                var contentid = $(this).attr("targetId");
                $("#" + contentid).show();
            });
            //设定第一个显示
            $(tabid + " ul li").first().addClass("selected");
            $("#" + $(tabid + " ul li").first().attr("targetId")).show();
            return true;
        });
        return this;
    }
});

//按css类名启动tabs功能
$(document).ready(function() {
    $(".tabs").flatTabs();
});

//登录信息跨域 登录用户 匿名用户不需要跨站点登录
function Passport(url, callback) {
    var host = getHost(url);
    //检查是否在当前域名范围内的url
    if (host != null && host != window.location.hostname) {
        //域名是否已经跨域
        var cookieHosts = getCookie("passporthost");
        if (cookieHosts == null) {
            cookieHosts = "";
        }
        if (jQuery.inArray(host, cookieHosts.split(",")) == -1) {
            //未跨域进行获取当前凭证开始跨域操作
            $.getJSON("/App/Passport.aspx?action=GetIdentity", function (json) {
                alert("1");
                //取得凭证，进行跨站造凭证
                if (json.ok && json.data != null && json.data != "") {
                    $.getJSON("http://" + host + "/App/Passport.aspx?action=MakeIdentity&identity=" + json.data + "&callback=?", function (json) {
                        alert("2");
                        if (json.ok) {
                            //写目标域到cookie中缓存
                            document.cookie = "passporthost=" + cookieHosts + (cookieHosts == "" ? "" : ",") + host + ";path=/";
                            if (callback != null) {
                                callback();
                            } else {
                                window.location.href = url;
                            }
                        }
                    });
                }
            });
        }
    }
    //同站点的URL不需要准备
    else if (callback != null) {
        callback();
    } else {
        window.location.href = url;
    }
}

//取得cookie
function getCookie(name) {
    var start = document.cookie.indexOf(name + "=");
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }
    if (start == -1) return null;
    var end = document.cookie.indexOf(';', len);
    if (end == -1) end = document.cookie.length;
    return unescape(document.cookie.substring(len, end));
}

//取得当前url中的域名
function getHost(url) {
    var host = "null";
    if (typeof url == "undefined" || url == null)
        url = window.location.href;
    var regex = /.*\:\/\/([^\/]*).*/;
    var match = url.match(regex);
    if (typeof match != "undefined" && null != match)
        host = match[1];
    return host;
}

//thickbox浮动窗口封装
function showPanelModal(caption, html, callback, width, height) {
    if (html != null && html != "") {
        if (html.substring(0, 1) != "#") {
            $("body").append("<div id='hideCmdaPanelModal' style='display:none'>" + html + "</div>");
            tb_show(
				caption
				, "#TB_inline?width=" + (width || 630)+ "&height=" + (height || 440) + "&inlineId=hideCmdaPanelModal"
				, false
				, function () { $("#hideCmdaPanelModal").remove(); if (callback != null) callback(); });
        }
        else {
            tb_show(
				caption
				, "#TB_inline?width=" + (width || 630) + "&height=" + (height || 440) + "&inlineId=" + html
				, false
				, callback);
        }
    }
}

//thickbox浮动url窗口封装
//caption:modal标题
//url：ajax页面 页面地址可以为"." 当为"." 是自动转换为 当前页面地址加"ajax" 例如:.=login.aspx自动替换为loginajax.aspx
//data: 待发送 Key/value 参数 例如: { "aaa" : 1, "bbb" : 2 }
//action: 掉用ajax页面的动作 例如checkLogin
//width: 窗口宽度 默认宽度630px
//height: 窗口高度 默认高度430px
//callback: 窗口关闭时回调函数 函数格式为 callback(操作成功状态 true成功 false为取消)
function showAjaxModal(caption, url, action, data, callback, width, height) {
    url = __fixAjaxUrl(url);
    if (data == null) {
        data = {};
    }
    if (action != null && action != "") {
        data.action = action;
    }
    if ($("#hfpsi").length > 0) {
        data.psi = $("#hfpsi").val();
    }
    data.width = width || 630;
    data.height = height || 440;
    var query = jQuery.param(data);
    if (query != "") {
        url = (url.indexOf("?") >= 0 ? url + "&" : url + "?") + query
    }
    tb_show(caption, url, false, callback);
}

//isOk:关闭窗口时 是操作成功关闭还是失败关闭
function closeModal(isOk) {
    tb_remove(isOk);
}

//取得Ajax响应页面内容
function getAjaxJson(url, action, data, callback) {
    url = __fixAjaxUrl(url);
    if (jQuery.isFunction(data)) {
        callback = data;
        data = null;
    }
    if (data == null) {
        data = {};
    }
    if (action != null && action != "") {
        data.action = action;
    }
    if ($("#hfpsi").length > 0) {
        data.psi = $("#hfpsi").val();
    }
    jQuery.getJSON(url, data, callback);
}

//在指定标签处加载Ajax响应页面内容
function loadAjaxHtml(url, action, data, jelements) {
    url = __fixAjaxUrl(url);
    if (jQuery.isFunction(data)) {
        callback = data;
        data = null;
    }
    if (data == null) {
        data = {};
    }
    if (action != null && action != "") {
        data.action = action;
    }
    if ($("#hfpsi").length > 0) {
        data.psi = $("#hfpsi").val();
    }
    if (typeof (jelements) == "string") {
        jelements = $(jelements);
    }
    jQuery.getJSON(url, data, function (json) {
        __loadHtmlFromAjaxJson(json, jelements);
    });
}

//提交浮动窗口表单数据到Ajax响应页面
function postAjaxModal(url, action, data, callback) {
    url = __fixAjaxUrl(url);
    if (jQuery.isFunction(data)) {
        callback = data;
        data = null;
    }
    if (data == null) {
        data = {};
    }
    jQuery.each($(AjaxFormlId + " :input").serializeArray(), function (i, n) {
        data[n.name] = n.value;
    });
    if (action != null && action != "") {
        data.action = action;
    }
    if ($("#hfpsi").length > 0) {
        data.psi = $("#hfpsi").val();
    }
    jQuery.post(url, data, callback, "json");
}

//提交浮动窗口表单数据到Ajax响应页面
function postAjaxModalLoadHtml(url, action, data, jelements) {
    url = __fixAjaxUrl(url);
    if (jQuery.isFunction(data)) {
        callback = data;
        data = null;
    }
    if (data == null) {
        data = {};
    }
    jQuery.each($(AjaxFormlId + " :input").serializeArray(), function (i, n) {
        data[n.name] = n.value;
    });
    if (action != null && action != "") {
        data.action = action;
    }
    if ($("#hfpsi").length > 0) {
        data.psi = $("#hfpsi").val();
    }
    if (typeof (jelements) == "string") {
        jelements = $(jelements);
    }
    jQuery.post(url, data, function (json) {
        __loadHtmlFromAjaxJson(json, jelements);
        closeModal(json.ok);
    }, "json");
}

function resizeAjaxModal(width, height) {
    TB_WIDTH = width + 30;
    TB_Height = height + 60;
    tb_position();
}

function __getCurrUrlPath() {
    var index = window.location.href.indexOf("?");
    return index >= 0 ? window.location.href.substring(0, index) : window.location.href;
}

function __removeUrlPathExt(url) {
    var index = url.lastIndexOf(".");
    return index >= 0 ? url.substring(0, index) : url;
}

function __fixAjaxUrl(url) {
    if (url != null && url != "") {
        if (url.substring(0, 1) == ".") {
            url = __removeUrlPathExt(__getCurrUrlPath()) + "ajax.aspx" + url.substring(1, url.length);
        }
    }
    return url;
}

function __loadHtmlFromAjaxJson(json, jelements) {
    if (json.ok && json.data.html == undefined) { //调用 AjaxFormBase页面
        jelements.html(json.data);
    }
    else if (json.ok) { //调用 AjaxFormBase页面中的 AjaxHtmlFormJson返回值
        var html = "";
        if (json.data.style != null && json.data.style != "") {
            html += "\n<style type=\"text/css\">\n" + json.data.style + "\n</style>"
        }
        if (json.data.html != null && json.data.html != "") {
            html += "\n" + json.data.html + ""
        }
        jelements.html(html);
        if (json.data.script != null && json.data.script != "") {
            eval(json.data.script);
        }
    }
    else {
        alert(json.message);
    }
}

var __isLogin;
//检查登录状态，如果没有登录出登录窗口登陆后继续
$(document).ready(function () {
    $(".vlogin").each(function () {
        var thisbackup = this;
        var data = null;
        var returnUrl = $(this).attr("returnUrl");
        if (returnUrl != undefined && returnUrl != "") {
            data = { "returnUrl": returnUrl };
        }
        var oldClick = this.onclick;
        this.onclick = null;

        //绑定定截获登录Click事件
        $(this).click(function (event) {
            if (__isLogin == null) { //无法确定当前登陆状态 进行检测 并取消后续操作
                event.preventDefault();
                event.stopImmediatePropagation();
                jQuery.getJSON("/app/LoginAjax.aspx?action=IsLogin", function (json) {
                    __isLogin = json.ok && json.data;
                    if (!__isLogin) { //未登陆 进行登陆操作
                        showAjaxModal("登录", "/app/LoginAjax.aspx", "getLoginForm", data, function (isOk) { //登陆成功后 重新触发操作
                            __isLogin = isOk;
                            if (__isLogin) {
                                $(thisbackup).trigger("click");
                            }
                        }, 400, 160);
                    }
                    else {
                        $(thisbackup).trigger("click");
                    }
                });
            }
            else if (!__isLogin) { //已经检测过 还处于未登录状态
                event.preventDefault();
                event.stopImmediatePropagation();
                showAjaxModal("登录", "/app/LoginAjax.aspx", "getLoginForm", data, function (isOk) { //登陆成功后 重新触发操作
                    __isLogin = isOk;
                    if (__isLogin) {
                        $(thisbackup).trigger("click");
                    }
                }, 400, 160);
            }
            else {
                if (oldClick != null) oldClick(event);
            }
        });

        //绑定登录完成后自动转向
        if (data != null) {
            $(this).click(function (event) {
                window.location.href = returnUrl;
            });
        }
    });
});
