﻿/*******************************************************************************************************************/
/**************************************** Service Members START ****************************************************/
/*******************************************************************************************************************/


ASF.Service = function() {
}

ASF.Service.SetButtonsEnabled = function(enabled, containerId) {
    var container = containerId == null ? $(document) : $("#" + containerId);
    var disabled = (!enabled).toString();

    $(container).each(function() {
        $(this).find(":submit").attr("disabled", disabled);
        $(this).find(":button").attr("disabled", disabled);
    });
}

/*******************************************************************************************************************/
/**************************************** Service Members END ******************************************************/
/*******************************************************************************************************************/

ASF.Document = function() {
}

/*******************************************************************************************************************/
/**************************************** CMS Adv Solution Document START ******************************************/
/*******************************************************************************************************************/

ASF.Document.Adv = function() {
}

ASF.Document.Adv.AttrAdvDocumentKey = "AdvDocumentType";
ASF.Document.Adv.AttrAdvDocumentCssClass = "AdvDocumentCssClass";
ASF.Document.Adv.AttrTargetAdvDocumentId = "TargetAdvDocumentId";
ASF.Document.Adv.AttrTargetAdvDocumentKey = "TargetAdvDocumentKey";
ASF.Document.Adv.AttrTargetAdvDocumentCssClass = "TargetAdvDocumentCssClass";
ASF.Document.Adv.AttrTargetAdvDocumentChangeEvent = "TargetAdvDocumentChangeEvent";
ASF.Document.Adv.AttrTargetAdvDocumentOnInitChange = "TargetAdvDocumentOnInitChange";
ASF.Document.Adv.AttrTargetAdvDocumentOnChange = "TargetAdvDocumentOnChange";
ASF.Document.Adv.AttrTargetAdvDocumentOnChangeDynamic = "TargetAdvDocumentOnChangeDynamic";

ASF.Document.Adv.LoaderUrl = ASF.WebSiteUrl + "/AdvDocument.cms";
ASF.Document.Adv.DefaultChangeEvent = "click";

ASF.Document.Adv.InfoArgs = function(doc, docId, docKey, target, sender, display) {
    this.Doc = doc;
    this.DocId = docId;
    this.DocKey = docKey;
    this.Target = target;
    this.Sender = sender;
    this.Display = display;
}

ASF.Invoke = function(delegate, args) {
    if (delegate != undefined) {
        eval(delegate + "(args)");
        return true;
    }
    else {
        return false;
    }
}

ASF.Document.Adv.OnChange = function(args) {
    var doc = args.Doc;
    var docKey = args.DocKey;
    var target = args.Target;

    var btnBack = $(".go_back");

    if (btnBack.attr(ASF.Document.Adv.AttrTargetAdvDocumentKey) == docKey) {
        btnBack.hide();
    }
    else {
        btnBack.show();
    }

    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=Name]", docKey).html(doc.Name);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=Headline]", docKey).html(doc.Headline);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=SubHeadline]", docKey).html(doc.SubHeadline);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=MainTextHeadline]", docKey).html(doc.MainTextHeadline);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=MainContent]", docKey).html(doc.MainContent);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=MainContentPlaneText]", docKey).html(doc.MainContentPlaneText);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=AdditionalTextHeadline]", docKey).html(doc.AdditionalTextHeadline);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=AdditionalContentPlaneText]", docKey).html(doc.AdditionalContentPlaneText);
    ASF.Document.Adv.FindPart(target, "[AdvDocumentPart=AdditionalContent]", docKey).html(doc.AdditionalContent);

    ASF.Document.Adv.FindPart(target, "img[AdvDocumentPart=Picture]", docKey).attr("src", doc.PictureUrl);
    ASF.Document.Adv.FindPart(target, "span[AdvDocumentPart=Picture]", docKey).attr("background-image", doc.PictureUrl);

    ASF.Document.Adv.ChangeCssClass(target, doc.TargetCssClass);
}

ASF.Document.Adv.OnChangeDynamic = function(args) {
    var target = $(args.Target);

    if (args.Display) {
        target.show();
    }
    else {
        target.hide();
    }
}

ASF.Document.Adv.CollectionInstance = function() {
    var collection = new Array();

    this.Get = function(key) {
        for (var ind in collection) {
            if (collection[ind].document != null
                && collection[ind].document.Key == key) {
                return collection[ind];
            }
        }

        return null;
    }

    this.Contains = function(key) {
        return this.Get(key) != null;
    }

    this.Add = function(doc) {
        if (doc.document == null) {
            return;
        }

        var key = doc.document.Key;

        if (key != null
            && !this.Contains(key)) {
            collection.push(doc);
        }
    }
}

ASF.Document.Adv.Collection = new ASF.Document.Adv.CollectionInstance();

ASF.Document.Adv.FindPart = function(container, selector, docKey) {
    return container.find(selector).filter(function() {
        var onlyInitialDoc = $(this).attr("AdvDocumentNoChange");

        if (onlyInitialDoc == null
            || onlyInitialDoc == "False") {
            return true;
        }
        else {
            return $(this).attr(ASF.Document.Adv.AttrTargetAdvDocumentKey) == docKey;
        }
    });
}

ASF.Document.Adv.ProcessDynamicContent = function(args) {
    var docKey = args.DocKey;
    target = $(args.Target);
    sender = $(args.Sender);

    target.find("[AdvDocumentPart=DynamicContent]").each(function(ind, domEle) {
        domEle = $(domEle);
        var display = false;

        if (domEle.attr(ASF.Document.Adv.AttrAdvDocumentKey) == docKey) {
            display = true;
        }

        var onChange = sender.attr(ASF.Document.Adv.AttrTargetAdvDocumentOnChangeDynamic);
        args.Display = display;
        args.Target = domEle;
        if (!ASF.Invoke(onChange, args)) {
            ASF.Document.Adv.OnChangeDynamic(args);
        }
    });
}

ASF.Document.Adv.ChangeCssClass = function(target, docCssClass) {
    if (docCssClass == null
        || docCssClass == ""
        || docCssClass == "undefined") {
        return;
    }

    target = $(target);
    var curCssClass = target.attr(ASF.Document.Adv.AttrAdvDocumentCssClass);

    if (docCssClass != curCssClass) {
        if (curCssClass != undefined) {
            target.removeClass(curCssClass);
        }
        target.addClass(docCssClass);
        target.attr(ASF.Document.Adv.AttrAdvDocumentCssClass, docCssClass);
    }
}

ASF.Document.Adv.JsonApply = function(docId, data, sender) {
    var doc = data.document;

    if (doc == null) {
        return;
    }

    if (docId == null) {
        docId = doc.TargetId;
    }

    if (sender == null) {
        sender = $("#" + doc.SenderId);
    }

    var target = $("#" + docId);
    var docKey = doc.Key;
    var args = new ASF.Document.Adv.InfoArgs(doc, docId, docKey, target, sender, true);
    var onChange = sender.attr(ASF.Document.Adv.AttrTargetAdvDocumentOnChange);

    //target.attr(ASF.Document.Adv.AttrAdvDocumentKey, dokKey);

    ASF.Document.Adv.ProcessDynamicContent(args);

    args = new ASF.Document.Adv.InfoArgs(doc, docId, docKey, target, sender, true);
    if (!ASF.Invoke(onChange, args)) {
        ASF.Document.Adv.OnChange(args);
    }
}

ASF.Document.Adv.JsonLoad = function(docId, key, docCssClass, senderId) {
    $.post(
        ASF.Document.Adv.LoaderUrl
        , { DocumentKey: key, TargetId: docId, TargetCssClass: docCssClass, SenderId: senderId }
        , ASF.Document.Adv.JsonLoaded
        , "json");
}

ASF.Document.Adv.JsonLoaded = function(data, status) {
    if (status == "success") {
        ASF.Document.Adv.Collection.Add(data);
        ASF.Document.Adv.JsonApply(null, data);
    }
}

ASF.Document.Adv.OnChangeContent = function() {
    var sender = $(this);
    var key = sender.attr(ASF.Document.Adv.AttrTargetAdvDocumentKey);
    var docId = sender.attr(ASF.Document.Adv.AttrTargetAdvDocumentId);
    var docCssClass = sender.attr(ASF.Document.Adv.AttrTargetAdvDocumentCssClass);
    var target = $("#" + docId);

    var onInitChange = sender.attr(ASF.Document.Adv.AttrTargetAdvDocumentOnInitChange);
    var args = new ASF.Document.Adv.InfoArgs(null, docId, key, target, sender, true);

    if (!ASF.Invoke(onInitChange, args)) {
        ASF.Document.Adv.InitChangeContent(docId, key, docCssClass, sender);
    }
}

ASF.Document.Adv.InitChangeContent = function(docId, key, docCssClass, sender) {
    var data = ASF.Document.Adv.Collection.Get(key);
    var senderId = $(sender).attr("id");

    if (data != null) {
        data.document.SenderId = senderId;
        ASF.Document.Adv.JsonApply(docId, data, sender);
    }
    else {
        ASF.Document.Adv.JsonLoad(docId, key, docCssClass, senderId);
    }
}

ASF.Document.Adv.InitJsonLoading = function() {
    var doc = $("[" + ASF.Document.Adv.AttrTargetAdvDocumentId + "]" + "[" + ASF.Document.Adv.AttrTargetAdvDocumentKey + "]");

    doc.each(function(ind, domEle) {
        domEle = $(domEle);

        var event = ASF.Document.Adv.DefaultChangeEvent;
        var eventAttrValue = domEle.attr(ASF.Document.Adv.AttrTargetAdvDocumentChangeEvent);

        if (eventAttrValue != null) {
            event = eventAttrValue;
        }

        domEle.bind(
            event
            , ASF.Document.Adv.OnChangeContent);
    });
}

/*******************************************************************************************************************/
/**************************************** CMS Adv Solution Document END ********************************************/
/*******************************************************************************************************************/

/*******************************************************************************************************************/
/**************************************** PAGES START **************************************************************/
/*******************************************************************************************************************/

function SolutionsDetailsSubMenuClick(documentId) {
    documentId = $get(documentId);
    if (!documentId.className.match("solutions_details_form")) {
        documentId.className += " solutions_details_form";
    }
}

ASF.View = function() {
}

ASF.View.Home = function() {
}

ASF.View.Home.LockShow = false;
ASF.View.Home.LockHide = false;

ASF.View.Home.OnShowComlete = function() {
    ASF.View.Home.LockShow = false;
}

ASF.View.Home.OnHideComlete = function() {
    ASF.View.Home.LockHide = false;
}

ASF.View.Home.OnAdvDocInitChange = function(args) {
    ASF.Document.Adv.ProcessDynamicContent(args);
}

ASF.View.Home.OnAdvDocChangeDynamic = function(args) {
    if (args.Display) {
//        if (!ASF.View.Home.LockShow) {
//            if ($.browser.msie) {
//                args.Target.show();
//            }
//            else {
                ASF.View.Home.LockShow = true;
                //                args.Target.fadeIn("slow", ASF.View.Home.OnShowComlete);

                args.Target.show();
//            }
//        }
    }
    else {
//        if (!ASF.View.Home.LockHide) {
//            if ($.browser.msie) {
//                args.Target.hide();
//            }
//            else {
                ASF.View.Home.LockHide = true;
                //                args.Target.fadeOut("slow", ASF.View.Home.OnHideComlete);
                args.Target.hide();
//            }
//        }
    }
}

/*******************************************************************************************************************/
/**************************************** PAGES END ****************************************************************/
/*******************************************************************************************************************/

$(document).ready(function() {
    ASF.Document.Adv.InitJsonLoading();
});
