/** 
* Sling class
*/

var SlingsData = {

    Settings: {
        url: null,
        queryString: null,
        onComplete: function() { alert("oncomplete"); },
        onUpdate: function() { },
        onError: function(XMLHttpRequest, textStatus, errorThrown) {
            $.blockUI({ message: "<h4><a href='#' onclick='$.unblockUI();'>Error loading data, click to close</a></h4>" });
        },
        loader: "#loading",
        onLoading: null,
        showLoader: false,
        blockUI: true
    },

    XmlData: null,
    Types: null,
    Materials: null,
    Models: null,
    Sizes: null,
    ArtNos: new Array(),
    Slings: new Array(),

    Init: function(settings) {

        // Settings
        $.extend(SlingsData.Settings, settings);

        if (SlingsData.Settings.blockUI == true)
            $.blockUI({
                css: {
                    border: 'none',
                    padding: '15px',
                    backgroundColor: '#000',
                    '-webkit-border-radius': '10px',
                    '-moz-border-radius': '10px',
                    opacity: '.5',
                    color: '#fff'
                },
                message: "<h3>" + translation.loading + "<h3>"
            });
        else
            $(SlingsData.Settings.loader).fadeIn();

        $.ajax({
            type: "GET",
            url: SlingsData.Settings.url,
            dataType: "script",
            success: function(data) {
                // Add the data to the object
                SlingsData.Types = types;
                SlingsData.Materials = materials;
                SlingsData.Models = models;
                SlingsData.Sizes = sizes;

            },
            error: SlingsData.Settings.onError,
            complete: SlingsData.SlingsOnComplete
        })

    },

    SlingsOnComplete: function() {
        $.get(pagedata.baseUrl + "SlingData.ashx?a=artlist", function(data) {

            SlingsData.XmlData = data;
            var items = $("artNo", data);

            items.each(function(i, item) {
                var artno = $(item).text();
                SlingsData.ArtNos.push(artno);
                SlingsData.Slings[artno] = new SlingsData.Sling(artno);
            });

            if (SlingsData.Settings.blockUI == true)
                $.unblockUI();
            else
                $(SlingsData.Settings.loader).fadeOut();

            // Run the callback
            SlingsData.Settings.onComplete(SlingsData.ArtNos, SlingsData.Slings);

        });
    },

    GetSlingsByAttribute: function(arr, artnos) {
        
        if (SlingsData.Settings.showLoader == true)
            $(SlingsData.Settings.loader).fadeIn();


        if (typeof (arr) == "string")
            arr = arr.split("|");

        if (artnos == null) {

            var sel = "";
            var val = arr[0].split(",");

            $(val).each(function(i, item) {
                if (i < val.length - 1)
                    sel += "attr[id=" + $.trim(item) + "] artNo,";
            });
            var items = $(sel, SlingsData.XmlData);
            var data = new Array();

            items.each(function(i, item) {
                var artno = $(item).text();
                data.push(artno);
            });

            arr.splice(0, 1)
            SlingsData.GetSlingsByAttribute(arr, data);


            return;
        }
        else if (arr.length > 0) {

            var sel = "";

            $(arr[0].split(",")).each(function(i, item) {
                sel += "attr[id=" + $.trim(item) + "] artNo,";
            });

            var items = $(sel, SlingsData.XmlData);
            var data = new Array();

            items.each(function(i, item) {
                var artno = $(item).text();

                if (jQuery.inArray(artno, artnos) > -1 && jQuery.inArray(artno, data) == -1)
                    data.push(artno);
            });

            arr.splice(0, 1)
            SlingsData.GetSlingsByAttribute(arr, data);
            return;
        }
        SlingsData.ArtNos = artnos;

        $("#resultHeader").show();


        SlingsData.Settings.onUpdate(SlingsData.ArtNos, SlingsData.Slings);


        if (SlingsData.Settings.showLoader == true)
            $(SlingsData.Settings.loader).fadeOut();
    },

    Sling: function(artno) {

        var settings = SlingsData.Settings;

        if (settings.url == null) return;

        this.artno = artno.toString();
        this.regex = (this.artno.length == 7) ? /^([0-9]{2})([0-9]{2})([0-9])([0-9])([0-9])$/ : /^([0-9]{2})([0-9]{3})([0-9])([0-9])([0-9])$/;

        var obj = this.regex.exec(this.artno);

        function getType(id) {
            if (id.length == 1)
                id = "0" + id;

            return (SlingsData.Types[id] != undefined) ? SlingsData.Types[id] : "Type doesn't exist";
        };

        function getMaterial(id) {
            return (SlingsData.Materials[id] != undefined) ? SlingsData.Materials[id] : "Material doesn't exist";
        };

        function getModel(id, obj) {
            // special cases prefix with S, 35350325 & 35300325
            if (/^353[05]0325$/.test(obj[0]))
                id = "S" + id;

            // special cases prefix with S, 3592*** & 35920***
            if (/^3592[0-9]{3}$/.test(obj[0]) || /^35920[0-9]{3}$/.test(obj[0]))
                id = "S2" + id;

            // special cases prefix with S, 3592*** & 35920***
            if (/^3560[0-9]{3}$/.test(obj[0]) || /^3564[0-9]{3}$/.test(obj[0]))
                id = "S" + id;

            return (SlingsData.Models[id] != undefined) ? SlingsData.Models[id] : "Model doesn't exist";
        };

        function getSize(id, obj) {
            // special cases prefix with S, 3506**4/3506**5/3506**6
            if (/^3506[0-9]{2}[456]$/.test(obj[0]))
                id = "S" + id;

            // special cases prefix with S, 3506**4/3506**5/3506**6
            if (/^35[12]1[0-9]{3}$/.test(obj[0]))
                id = "S2" + id;

            return (SlingsData.Sizes[id] != undefined) ? SlingsData.Sizes[id] : { desc: "undefined", color: "undefined" };
        };

        /**
        * Properties
        */
        return {
            artno: this.artno,
            type: getType(obj[2]),
            typeId: obj[2],
            material: getMaterial(obj[3]),
            materialId: obj[3],
            model: getModel(obj[4], obj),
            size: getSize(obj[5], obj),
            sizeId: obj[5]
        };
    },

    GetThumbnail: function(x, y, query) {

        var c = $("<div />")
			.attr("id", "preview-thumbnail")
			.appendTo("body")
			.css({
			    position: "absolute",
			    top: (y + 10) + "px",
			    left: (x + 10) + "px"
			})
			.html('<img src="/images/common/ajax-loader.gif" alt="loading" />');

        $.getJSON(pagedata.baseUrl + "SlingData.ashx?a=slinginfo" + query, function(json, msg) {

            if (json.Error) {
                $(c).remove();
                return;
            }

            $(c).empty();

            $("<img />")
				.attr("src", json.IntroImage)
				.attr("alt", "preview")
				.appendTo(c);

            $("<span />")
				.html(json.MainIntro.replace(/\n/g, "<br />"))
				.appendTo(c);

        });

    }
}
