﻿var DMC = {
    getSelectedImageTimeout: 0,
    getSelectedImage: function(options) {
        var editor = document.getElementById(options.editor);
        var images = editor.GetDocument().images;

        if (images.length > 0) {
            //Clear the select check
            clearTimeout(this.getSelectedImageTimeout);
            this.getSelectedImageTimeout = 0;
            //Get the image selected
            var image = images[images.length - 1].src;
            //Set the value of the input box
            options.target.val(this.GetFileName(image).file);
            //Show the logo
            if (options.imageContainer)
                options.imageContainer.css("background", "url(\"" + image + "\") center center no-repeat").fadeIn(250);
        }
        else
            this.getSelectedImageTimeout = setTimeout(function() { DMC.getSelectedImage(options); }, 250);
    },
    ajaxErrorHandler: function(e, xhr, options, exception) {
        //Toggle favorite exhibitor
        if (xhr.status == 403 && options.url == "/favorites/toggle.aspx")
            alert("You must sign in to use this feature.");
    },
    SelectImage: function(options) {
        //Get CuteEditor element
        var editor = document.getElementById(options.editor);
        editor.FocusDocument();
        editor.ExecCommand("new");
        editor.ExecCommand("ImageGalleryByBrowsing");

        this.getSelectedImage(options);

        return false;
    },
    ClearImage: function(options) {
        if (options.target)
            options.target.val("");
        if (options.imageContainer)
            options.imageContainer.fadeOut(250, function() { $(this).css("background", "transparent"); });

        return false;
    },
    ToggleFavorite: function(sender, id) {
        if (id == "" || id == null || id == 0)
            return false;

        $.post("/favorites/toggle.aspx", { e: id }, function(data) {
            if (sender.is("a")) {
                if (data.result)
                    sender.text("Remove from My Favorites");
                else
                    sender.text("Add to My Favorites");
            }

            if (data.result)
                sender.removeClass("disabled");
            else
                sender.addClass("disabled");

            //$("body").unbind("ajaxError");

        }, "json");

        return false;
    },
    GetFileName: function(path) {
        var match = path.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/);
        return { path: match[1], file: unescape(match[2]) }
    },
    GetDateAsString: function(date) {
        if (!date)
            date = new Date();

        var year = date.getFullYear().toString();
        var month = (date.getMonth() + 1).toString().length == 1 ? ("0" + (date.getMonth() + 1).toString()) : (date.getMonth() + 1).toString();
        var day = date.getDate().toString().length == 1 ? ("0" + date.getDate().toString()) : date.getDate().toString();

        return month + '/' + day + '/' + year;
    },
    GetDateAsYYYYMMDD: function(date) {
        var today = date || new Date();
        var year = today.getFullYear().toString();
        var month = (today.getMonth() + 1).toString().length == 1 ? ("0" + (today.getMonth() + 1).toString()) : (today.getMonth() + 1).toString();
        var day = today.getDate().toString().length == 1 ? ("0" + today.getDate().toString()) : today.getDate().toString();

        return year + month + day;
    },
    AddExhibitorEventToSchedule: function(sender, exhibitorId, eventId) {
        $.post("/users/schedule/add.aspx", { exhibitor: exhibitorId, evt: eventId, type: "e" }, function(data) {
            if (sender.is("a")) {
                sender.removeClass("disabled");
                sender.text("Remove from My Schedule");
            }
        });

        return false;
    },
    RemoveExhibitorEventFromSchedule: function(sender, exhibitorId, eventId) {
        if (sender.is("a")) {
            sender.addClass("disabled");
            sender.text("Add to My Schedule");
        }

        return false;
    },
    ToggleScheduledExhibitorEvent: function(sender, exhibitorId, eventId) {
        $.post("/users/schedule/toggle-exhibitor-event.aspx", { exhibitor: exhibitorId, evt: eventId }, function(data) {
            if (sender.is("a")) {
                if (data.result) {
                    sender.removeClass("disabled");
                    sender.text("Remove from My Schedule");
                }
                else {
                    sender.addClass("disabled");
                    sender.text("Add to My Schedule");
                }
            }
        }, "json");

        return false;
    },
    AddMarketEventToSchedule: function(marketId, eventId, eventOccurrenceId) {
        $.post("/users/schedule/add.aspx", { m: marketId, evt: eventId, id: eventOccurrenceId, type: "m" }, function(data) {
            alert("MESSAGE NEEDED");
        });

        return false;
    },
    ToggleScheduledMarketEvent: function(sender, marketId, eventId, eventOccurrenceId) {
        $.post("/users/schedule/toggle-market-event.aspx", { m: marketId, evt: eventId, id: eventOccurrenceId }, function(data) {
            if (sender.is("a")) {
                //If the result is 'true', the event was added
                if (data.result) {
                    sender.removeClass("disabled");
                    sender.text("Remove from My Schedule");
                }
                //If the result is 'false', the event was removed
                else {
                    sender.addClass("disabled");
                    sender.text("Add to My Schedule");
                }
            }
        }, "json");

        return false;
    },
    GenerateExhibitorKey: function(exhibitorId, target) {
        if (!confirm("Are you sure you want to generate a new key for this exhibitor?"))
            return;
            
        $.post("/exhibitors/services/details/generate-exhibitor-key.aspx", { exhibitor: exhibitorId }, function(data) {
            target.text(data.key);
        }, "json");
    }
};

//Valid US Date or Date/Time
$.validator.addMethod("USDateTime", function(value, element) {
    return this.optional(element) || /^(((((0[13578])|([13578])|(1[02]))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(3[01])))|((([469])|(11))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(30)))|((02|2)[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9]))))[\-\/\s]?\d{4})(\s(((0[1-9])|([1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$/.test(value);
});
//Form validation defaults
$.validator.setDefaults({
    errorClass: "invalid",
    wrapper: "li",
    errorLabelContainer: "dl.error > dd > ul",
    errorContainer: "dl.error",
    invalidHandler: function(form, validator) {
        var panel = $("dl.error").slideDown();
        //$.scrollTo(panel, { duration: 400 });
        $.scrollTo(0, { duration: 400 });
    },
    debug: false
});

var signInRequired = function() {
    alert('You must sign in to use this feature.');
    
    return false;
};
function renderPagingControl(functionName, pageNumber, pageCount, groupSize) {
    if (isNaN(pageNumber))
        pageNumber = 1;
    else
        pageNumber = parseInt(pageNumber);
    
    if (isNaN(pageCount))
        pageCount = 0;
    else
        pageCount = parseInt(pageCount);
    
    if (isNaN(groupSize))
        groupSize = 5;
    else
        groupSize = parseInt(groupSize);

    if (pageNumber > pageCount)
        pageNumber = pageCount;

    //var html = '<tbody><tr>';
    var html = '<tbody><tr><th>Go to page</th><td class="gotoPage"><input class="gotoPage center" type="text" value="' + pageNumber + '" /> of ' + pageCount + ' <input type="button" value="Go" onclick="' + functionName + '($(this).prev(\'input.gotoPage\').val()); return false;" /></td>';

    //The page at which we start drawing page numbers
    var startPage = (parseInt((pageNumber % groupSize == 0 ? (pageNumber - 1) : pageNumber) / groupSize) * groupSize) + 1;
    var maxPage = pageCount <= groupSize ? pageCount : ((startPage + groupSize) - 1 > pageCount ? pageCount : (startPage + groupSize) - 1);

    //Prev link
    if (pageNumber > 1)
        html += '<td class="prev"><a href="#" onclick="return ' + functionName + '(' + (pageNumber - 1) + ');">< prev</a></td>';
    else
        html += '<td class="prev">< prev</td>';

    //More pages
    if (startPage > groupSize)
        html += '<td><a href="#" onclick="return ' + functionName + '(' + (startPage - 1) + ');">...</a></td>';

    //Page numbers
    for (var i = startPage; i <= maxPage; i++)
        html += '<td class="' + (i == pageNumber ? 'current-page' : '') + '"><a href="#" onclick="return ' + functionName + '(' + (i) + ');">' + (i) + '</a></td>';

    //More pages
    if (pageCount > ((startPage + groupSize) - 1))
        html += '<td><a href="#" onclick="return ' + functionName + '(' + (startPage + groupSize) + ');">...</a></td>';

    //Next link
    if (pageNumber < pageCount)
        html += '<td class="next"><a href="#" onclick="return ' + functionName + '(' + (pageNumber + 1) + ');">next ></a></td>';
    else
        html += '<td class="next">next ></td>';

    html += '</tr></tbody>';

    $("table.paging").html(html);
};
var BrowserDetect = {
    init: function() {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function(data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function(dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
		{
		    string: navigator.userAgent,
		    subString: "Chrome",
		    identity: "Chrome"
		},
		{ string: navigator.userAgent,
		    subString: "OmniWeb",
		    versionSearch: "OmniWeb/",
		    identity: "OmniWeb"
		},
		{
		    string: navigator.vendor,
		    subString: "Apple",
		    identity: "Safari",
		    versionSearch: "Version"
		},
		{
		    prop: window.opera,
		    identity: "Opera"
		},
		{
		    string: navigator.vendor,
		    subString: "iCab",
		    identity: "iCab"
		},
		{
		    string: navigator.vendor,
		    subString: "KDE",
		    identity: "Konqueror"
		},
		{
		    string: navigator.userAgent,
		    subString: "Firefox",
		    identity: "Firefox"
		},
		{
		    string: navigator.vendor,
		    subString: "Camino",
		    identity: "Camino"
		},
		{		// for newer Netscapes (6+)
		    string: navigator.userAgent,
		    subString: "Netscape",
		    identity: "Netscape"
		},
		{
		    string: navigator.userAgent,
		    subString: "MSIE",
		    identity: "Explorer",
		    versionSearch: "MSIE"
		},
		{
		    string: navigator.userAgent,
		    subString: "Gecko",
		    identity: "Mozilla",
		    versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
		    string: navigator.userAgent,
		    subString: "Mozilla",
		    identity: "Netscape",
		    versionSearch: "Mozilla"
		}
	],
    dataOS: [
		{
		    string: navigator.platform,
		    subString: "Win",
		    identity: "Windows"
		},
		{
		    string: navigator.platform,
		    subString: "Mac",
		    identity: "Mac"
		},
		{
		    string: navigator.userAgent,
		    subString: "iPhone",
		    identity: "iPhone/iPod"
		},
		{
		    string: navigator.platform,
		    subString: "Linux",
		    identity: "Linux"
		}
	]

};
BrowserDetect.init();
