﻿var slideValueMinimum = 10;
var slideValueDefault = 90;
var slideValueMaximum = 86;

var fullImageTemplate = "<img src='{0}' width='400'/> ";
var fullSWFTemplate = "<object width='{2}' height='{4}'><param name='movie' value='{0}'><embed src='{1}' width='{3}' height='{5}'></embed></object>";
var fullFLVTemplate = "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' width='{2}' height='{4}'><param name='quality' value='high'><param name='wmode' value='transparent'><param name='allowfullscreen' value='true'><param name='movie' value='/Style Library/FostPlus CW Styles/FlvMediaPlayer/player.swf'><param name='FlashVars' value='screencolor=ffffff&image=/Style Library/FostPlus CW Styles/Images/Logo.png&autostart={7}&file={1}'><embed width='{3}' height='{5}' flashvars='screencolor=ffffff&image=/Style Library/FostPlus CW Styles/Images/Logo.png&autostart={6}&file={0}' quality='high' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' src='/Style Library/FostPlus CW Styles/FlvMediaPlayer/player.swf' wmode='transparent'></embed></object>";
var toolTipTemplate = "<em>{0}</em><br />{1}<br /><br /><em>{2}</em>";
var thumbImageTemplate = "<li><a href='#'><img title='{0}' src='{1}' url='{2}' downloadurl='{3}'/></a></li> ";

var tinstance;

// Reset all events
function resetAll(instance) {
    var instanceid = "#" + instance.id + " ";
    tinstance = instanceid;

    // Link eventhandler on dropdown field
    $(document).ready(function() {
        $("select").change(function(event) {
            queryFieldValues(instanceid, this.id)
        });
    });

    // Link eventhandler on slider
    $(instanceid + ".slider").Slider(
    {
        accept: $(instanceid + ".indicator").get()[0],
        onSlide: function(cordx, cordy, procx) {
            cordx -= $(instanceid + '.slider').left;

            var temp = slideValueMinimum + ((slideValueMaximum - slideValueMinimum) * procx / 100);
            $(instanceid + '.results img').css('width', temp + 'px');

        },
        values: [[slideValueDefault, 0]]
    });

    // Link eventhandler on search button
    $(instanceid + ".searchbutton").click(function() {
        queryImages(instanceid);
    });

    // Disable the search button 
    $("input").each(function(i) {
        this.disabled = true;
    });

    // Dispable all selects
    var found = false;
    $("select").each(function(i) {
        if (found) this.disabled = true;
        found = true;
    });

    // Query the result
    queryImages(instanceid);

}

// Query Images Webservice Call
function queryImages(instanceid) {

    var sb = new SOAPObject("GetResults");
    sb.ns = "http://fostplus.be/webservices/";
    sb.appendChild(new SOAPObject("url")).val($(instanceid).attr("listurl"));

    var s = "";
    $("select").each(function(i) {
        if (s != "")
            s += ";"
        s += this.name + ":" + this.value;
    });
    sb.appendChild(new SOAPObject("query")).val(s);
    sb.appendChild(new SOAPObject("lcid")).val($(instanceid).attr("lcid"));

    var sr = new SOAPRequest("http://fostplus.be/webservices/GetResults", sb);
    SOAPClient.Proxy = $(instanceid).attr("webserviceurl");
    SOAPClient.SendRequest(sr, processImages); //Send request to server and assign a callback
}

// Query Images Webservice Call Back
function processImages(respObj, raw) {
    try {
        var resultsXml = respObj.Body[0].GetResultsResponse[0].GetResultsResult[0].MediaLibrarySearchResult;

        if (resultsXml != null && resultsXml.length > 0) {
            $(tinstance + ".results .resultscontent").html("<ul></ul>");
            $(resultsXml).each(function(i) {
                var temp = format(thumbImageTemplate,
                    formatToolTip(this.Name[0].Text, this.Description[0].Text, this.Date[0].Text),
                    this.ThumbnailUrl[0].Text,
                    this.Url[0].Text,
                    this.DownloadUrl[0].Text);
                $(tinstance + ".results ul").append(temp);
            });
            $(tinstance + ".results .slider").css("display", "block");
        } else {
            $(tinstance + ".results .resultscontent").html($(tinstance + ".results .resultscontent").attr("noresultstext"));
            $(tinstance + ".results .slider").css("display", "none");
        }

        resetEvents(tinstance);
    } catch (e) { alert("Error: " + e.message); }
}

// Query Field Values Webservice Call
function queryFieldValues(instanceid, fieldname) {
    var sb = new SOAPObject("GetFieldValues");
    sb.ns = "http://fostplus.be/webservices/";
    sb.appendChild(new SOAPObject("url")).val($(instanceid).attr("listurl"));

    var disablesearch = false;
    var s = "";
    $("select").each(function(i) {
        if (s != "")
            s += ";"
        s += this.name + ":" + this.value;
        if (this.value == "") disablesearch = true;
    });

    $("input").each(function(i) {
        this.disabled = disablesearch;
    });

    sb.appendChild(new SOAPObject("query")).val(s);
    sb.appendChild(new SOAPObject("fieldname")).val(fieldname);
    sb.appendChild(new SOAPObject("lcid")).val($(instanceid).attr("lcid"));

    var sr = new SOAPRequest("http://fostplus.be/webservices/GetFieldValues", sb);

    //Lets send it
    SOAPClient.Proxy = $(instanceid).attr("webserviceurl");
    SOAPClient.SendRequest(sr, processFieldValues); //Send request to server and assign a callback
}

// Query Field Values Webservice Call Back
function processFieldValues(respObj, raw) {
    try {
        var fieldname = respObj.Body[0].GetFieldValuesResponse[0].GetFieldValuesResult[0].FieldName[0].Text;
        var values = respObj.Body[0].GetFieldValuesResponse[0].GetFieldValuesResult[0].Options[0].MediaLibraryDropDownValue;
        var found = false;
        $("select").each(function(i) {
            if (!found) {
                if (this.name == fieldname) {
                    found = true;
                    var options = this.options;
                    if (values != null && values.length > 0) {
                        options.length = 0;
                        this.disabled = false;
                        options[options.length] = new Option("", "");
                        $(values).each(function(j) {
                            options[options.length] = new Option(this.Name[0].Text, this.Value[0].Text);
                        });
                    }
                    else {
                        this.options.length = 0;
                        this.disabled = true;
                    }
                }
            }
            else {
                this.options.length = 0;
                this.disabled = true;
            }
        });

        resetEvents(tinstance);
    } catch (e) { alert("Error: " + e.message); }
}

// Reset all the events
function resetEvents(instanceid) {
    $(instanceid + ".results img").click(function() {
        var url = $(this).attr("url");
        var downloadurl = $(this).attr("downloadurl");
        $(instanceid + ".maincontent").fadeOut(500, function() {

            var content;
            if (isFlashFile(url)) {
                if (isFLVFile(url)) {
                    content = formatFlash(fullFLVTemplate, url);
                }
                else {
                    content = formatFlash(fullSWFTemplate, url);
                }
            }
            else {
                content = format(fullImageTemplate, url);
            }

            $(instanceid + ".maincontent").html(content);
            $(instanceid + ".maincontent").fadeIn(500);

            if (downloadurl != null && downloadurl.length > 0) {
                downloadurl = "/_layouts/download2.aspx?url=" + downloadurl;
                $(instanceid + ".main a").css("display", "block");
                $(instanceid + ".main a").attr("href", downloadurl);
            } else
                $(instanceid + ".main a").css("display", "none");
        });
    });

    $(instanceid + ".results img").ToolTip(
    {
        className: 'linksTooltip',
        position: 'mouse',
        delay: 400
    });

    $(instanceid + ".slider").SliderSetValues([[0, 0]]);
}

// Format image tooltip
function formatToolTip(name, description, date) {
    var temp = format(toolTipTemplate, name, description, date);
    return $('<div/>').text(temp).html();
}

// Format string
function format(str) {
    for (i = 1; i < arguments.length; i++)
        str = str.replace('{' + (i - 1) + '}', arguments[i]);
    return str;
}

// Format Flash
function formatFlash(formatstr, value) {
    var url, width, height, autostart;
    if (value.indexOf(";#") == 0) {
        value = value.substring(2, value.length - 2);
        var idx1 = value.indexOf(";#");
        var idx2 = value.indexOf(";#", idx1 + 2);
        var idx3 = value.indexOf(";#", idx2 + 2);
        url = value.substring(0, idx1);
        width = value.substring(idx1 + 2, idx2);
        height = value.substring(idx2 + 2, idx3);
        autostart = value.substring(idx3 + 2);
    } else {
        url = value;
        width = "400";
        height = "400";
    }
    return format(formatstr, url, url, width, width, height, height, autostart, autostart);
}

// Is flash file
function isFlashFile(url) {
    return url.indexOf(".swf") == url.length - 4 || url.indexOf(".flv") == url.length - 4 || url.indexOf(";#") == 0;
}

function isFLVFile(url) {
    return url.lastIndexOf(".flv") > -1;
}