//Begin: /Scripts/ServiceDescription_CartScriptService.js

/*
* DEFINE SERVICES FOR 
* Checkout/CartScriptService.asmx
* ********************************************/
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.ValidateItems', { submissionTemplate: ["productUids"] } );
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.UpdateCartItemPrice', { submissionTemplate: ["productUid"] } );
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.AddItemsToCartContainer', { submissionTemplate: ["cartProductUids", "cartContainer"] } );
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.DeleteItemsFromCartContainer', { submissionTemplate: ["cartProductUids", "cartContainer"] } );
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.MoveItemWithInCart', { submissionTemplate: ["cartProductUids", "cartContainer"] } );
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.AddOfferingToCart', { submissionTemplate: ["offeringUid"] } );
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.AddProductToCart', { submissionTemplate: ["corbisId", "productUid"] } );
CorbisUI.ServiceManager.defineService('Checkout.CartScriptService.GetPricedPricingDisplay', { submissionTemplate: ["productUid"] });
window.addEvent('domready', function() {
    CorbisUI.NameSpace.register('Corbis.Web.UI.Checkout.CartScriptService', { Alias: CorbisUI.ServiceManager.Checkout.CartScriptService, ForceAlias: true });
});

//End: /Scripts/ServiceDescription_CartScriptService.js
//Begin: /Scripts/ServiceDescription_EnlargementScriptService.js

/*
* DEFINE SERVICES FOR 
* Enlargement/EnlargementScriptService.asmx
* ********************************************/

// JSON RESPONSES
CorbisUI.ServiceManager.defineService('Enlargement.EnlargementScriptService.GetRelatedImages', { submissionTemplate: ["corbisId"] });
CorbisUI.ServiceManager.defineService('Enlargement.EnlargementScriptService.GetImageList', { submissionTemplate: ["imageNumber", "caller", "pageSize", "queryString", "lightboxId"] });
CorbisUI.ServiceManager.defineService('Enlargement.EnlargementScriptService.GetProductUid', { submissionTemplate: ["usrename", "corbisId", "folderId"] });
//End: /Scripts/ServiceDescription_EnlargementScriptService.js
//Begin: /Checkout/AddToCart.js

/******************************
    CORBIS ADD TO CART
*******************************/

/***************************
    NAMESPACES
****************************/
if (typeof(CorbisUI) == 'undefined') {
	CorbisUI = {};
}
CorbisUI.Cart = {};
var addToCartVar = null;
CorbisUI.Cart.AddToCartInst = function() {
    if (!addToCartVar) {
        addToCartVar = new CorbisUI.Cart.AddToCart();
    }
    return addToCartVar;
}
CorbisUI.Cart.AddToCart = new Class({
    context: null,
    offeringUid: null,
    onSuccess: $empty,

    initialize: function(offeringUid) {
        this.offeringUid = offeringUid;
        Corbis.Web.UI.Checkout.CartScriptService.set_defaultUserContext(this);
    },
    addRFCDToCart: function(el) {
        
        if (!CorbisUI.Pricing.IsAuthenticated(el.id)) {
            return false;
        }
        return true;
    },
    addOfferingToCart: function() {
        LogOmnitureEvent("scAdd");
        Corbis.Web.UI.Checkout.CartScriptService.AddOfferingToCart(this.offeringUid, this.addOfferingToCartSuccess, this.methodFailed);
    },

    addProductToCart: function(corbisId, productUid) {
        LogOmnitureEvent("scAdd");
        Corbis.Web.UI.Checkout.CartScriptService.AddProductToCart(corbisId, productUid, this.addOfferingToCartSuccess, this.methodFailed);
    },
    displaySuccessDialog: function(context) {
        var options = {
            createFromHTML: false,
            showModalBackground: false,
            closeOnLoseFocus: true,
            positionVert: 'top',
            positionHoriz: -250
        };

        if (context && $type(context.CT) == 'element') {
            options.centerOverElement = context.CT;
        }

        new CorbisUI.Popup('addToCartConfirm', options);
        
        $('addToCartConfirmWindow').getElement('input.Close').setStyle('visibility', 'visible');
    },
    addOfferingToCartSuccess: function(results, context, methodName) {
        if (results > 0) {
            context.onSuccess(results);
            //CorbisUI.Cart.AddToCartInst().displaySuccessDialog(context.context); for bug 15191
        }
        else {
            //TODO: Open login popup.
        }
    },

    methodFailed: function(results, context, methodName) {
        //console.log(results);
        //TODO: use mochaUI for alert window
        alert(results.get_message());
    }
});    


//End: /Checkout/AddToCart.js
//Begin: /Scripts/Filmstrip.js

if (typeof(CorbisUI) == 'undefined') {
    CorbisUI = {};
}
CorbisUI.Filmstrip = {};

CorbisUI.Filmstrip.setScrollControls = function(filmstrip)
{
	var filmstripObject = filmstrip.retrieve('filmstripObject');
	
	if (!filmstripObject)
	{
		filmstripObject = new CorbisUI.Filmstrip.filmstripObject(filmstrip);
		filmstrip.store('filmstripObject', filmstripObject);
	}
	
	filmstripObject.setScrollControls(true);
};

CorbisUI.Filmstrip.scrollFilmstrip = function(scrollControl, scrollPrevious)
{
	if (!scrollControl.hasClass('disabled'))
	{
		var filmstrip = $(scrollControl.parentNode);
		var filmstripObject = filmstrip.retrieve('filmstripObject');
		
		if (!filmstripObject)
		{
			filmstripObject = new CorbisUI.Filmstrip.filmstripObject(filmstrip);
			filmstrip.store('filmstripObject', filmstripObject);
		}
		
		filmstripObject.scrollFilmstrip(scrollPrevious);
	}
};

CorbisUI.Filmstrip.filmstripObject = new Class({
    Implements: [Options,Events],
    
    filmstripPrevious: null,
    filmstripNext: null,
    filmstripItems: null,
    filmstripItemsCol: null,
    filmstripItemWidth: 100,
    scrollItemAmount: 5,
    
    initialize: function(filmstrip){
		filmstrip = $(filmstrip);
		this.filmstripPrevious = filmstrip.getElement('img.filmstripPrevious');
		this.filmstripNext = filmstrip.getElement('img.filmstripNext');
		this.filmstripItems = filmstrip.getElement('ul');
		this.filmstripItemsCol = filmstrip.getElements('li');
		if (this.filmstripItemsCol.length >= 2) {
			this.filmstripItemWidth = (this.filmstripItemsCol[1].offsetLeft + this.filmstripItemsCol[1].clientLeft)  - (this.filmstripItemsCol[0].offsetLeft + this.filmstripItemsCol[0].clientLeft);
			this.scrollItemAmount = Math.floor(this.filmstripItems.parentNode.clientWidth / this.filmstripItemWidth);
		}
    },
    
    setScrollControls: function(updateCollection){
		if (updateCollection) this.filmstripItemsCol = this.filmstripItems.getElements('li');
		this.filmstripPrevious.removeClass('disabled');
		this.filmstripNext.removeClass('disabled');

		if (this.filmstripItemsCol.length <= this.scrollItemAmount)
		{
			if (!this.filmstripPrevious.hasClass('disabled')) this.filmstripPrevious.addClass('disabled');
			if (!this.filmstripNext.hasClass('disabled')) this.filmstripNext.addClass('disabled');
			this.filmstripItems.setStyle('left', 0);
		}
		else
		{	
			if (this.filmstripItems.offsetLeft >= 0)
			{
				if (!this.filmstripPrevious.hasClass('disabled')) this.filmstripPrevious.addClass('disabled');
			}
			else
			{
				if (this.filmstripPrevious.hasClass('disabled')) this.filmstripPrevious.removeClass('disabled');
			}

			if (this.filmstripItems.offsetLeft <= ((this.scrollItemAmount - this.filmstripItemsCol.length) * this.filmstripItemWidth))
			{
				if (!this.filmstripNext.hasClass('disabled')) this.filmstripNext.addClass("disabled");
			}
			else
			{
				if (this.filmstripNext.hasClass('disabled')) this.filmstripNext.removeClass("disabled");
			}
		}
	},
	
	scrollFilmstrip: function(scrollPrevious)
	{
		var scrollAmount = null;

		scrollAmount = this.filmstripItemWidth * this.scrollItemAmount;
		if(!scrollPrevious) scrollAmount *= -1;
		
		if (scrollAmount != null)
		{
			this.filmstripItems.setStyle('left', (this.filmstripItems.offsetLeft + scrollAmount)); 
			this.setScrollControls(false);
		}
	}
});
//End: /Scripts/Filmstrip.js
//Begin: /Enlargement/Enlargement.js

if (typeof (CorbisUI) == 'undefined') {
    CorbisUI = {};
}

if (typeof (Corbis) === "undefined" || typeof (Corbis.Web) === "undefined" || typeof (Corbis.Web.UI) === "undefined") {
    CorbisUI.NameSpace.register('Corbis.Web.UI', { Alias: CorbisUI.ServiceManager });
}

CorbisUI.Enlargement = {

    outlineLearnMore: function(linkHref) {
        if (window.opener) {
            window.opener.location.href = linkHref;
            window.close();
        }
        else {
            window.location = linkHref;
        }
    },

    ImageListUpdating: false,
    getOpener: function() {
        // An exception is thrown when user registration is launched through Enlargement page 'sign in' link. 
        try {
            var parentWindow = window.opener;
            if (parentWindow) {
                if ($(parentWindow.document).getElement('#cartCount')) {
                    return parentWindow;
                }
                else if (parentWindow.enlargementOpener) {
                    return parentWindow.enlargementOpener;
                }
            }
        } catch (ex) {
            // no need to perform anything
        }
        return null;
    },
    OpenViewDimensions: function() {

        LogOmnitureEvent("event30");

        if ($('viewDimensionsModalWindow')) {
            $('viewDimensionsModalWindow').setStyle('display', 'block');

        } else {
            var el = $('viewDimensionsModal');
            el.setStyle('display', 'block');
            var elDimensions = el.getCoordinates();
            var properties = {
                title: '',
                collapsible: false,
                minimizable: false,
                contentBgColor: '#e8e8e8',
                headerStartColor: [219, 219, 219],
                headerStopColor: [219, 219, 219],
                bodyBgColor: [232, 232, 232],
                useCanvasControls: false,
                cornerRadius: 6,
                headerHeight: 32,
                footerHeight: 4,
                padding: 0,
                scrollbars: false,
                closable: false,
                type: 'window',
                id: el.getProperty('id') + "Window",
                height: 340,
                width: 575,
                x: CorbisUI.language == "BR" ? 326 : 358,
                y: 103,
                content: '',
                draggable: false,
                resizable: false,
                shadowBlur: 7
            };
            MochaUI.NewWindowFromDiv(el, properties);
            $(document.body).addEvent('mousedown', this.detectDisplayOptionsclick.bindWithEvent($('viewDimensionsModalWindow')));
            ResizeModal('viewDimensionsModal');
        }
    },

    makeRoomForSignIn: function(imgElement, makeRoom) {
        if (makeRoom) {
            if (Browser.Engine.trident) {
                imgElement.setStyle('max-height', '475px');
            }
            else {
                imgElement.setStyle('max-height', '460px');
            }
        }

        imgElement.setStyle('visibility', 'visible');
    },

    detectDisplayOptionsclick: function(ev) {
        var MSOcor = this.getCoordinates();
        if (
			((ev.page.y < MSOcor.top) || (ev.page.y > (MSOcor.top + MSOcor.height)))
			||
			(ev.page.x < MSOcor.left) || (ev.page.x > (MSOcor.left + MSOcor.width))
		) {
            (function() { CorbisUI.Enlargement.hideViewDimensionsWindow() }).delay(10);
        }
    },

    hideViewDimensionsWindow: function() {
        $('viewDimensionsModalWindow').setStyle('display', 'none');
    },

    selectTab: function(tabToSelect) {

        if (tabToSelect == 'imageDetails') {
            LogOmnitureEvent("event36");
        }
        else if (tabToSelect == 'corbisKeywords') {
            LogOmnitureEvent("event34");
        }
        else if (tabToSelect == 'relatedImages') {
            LogOmnitureEvent("event35");
        }
        //Show hide content
        $$('#imageDetailsContent, #corbisKeywordsContent, #relatedImagesContent').each
		(
			function(div) {
			    if (div.id.indexOf(tabToSelect) >= 0) {
			        if (div.hasClass('hdn')) div.removeClass('hdn');
			    }
			    else {
			        if (!div.hasClass('hdn')) div.addClass('hdn');
			    }
			}
		)

        var keywordsRelatedImages = $('keywordsRelatedImages');
        if (tabToSelect == 'imageDetails') {
            if (!keywordsRelatedImages.hasClass('hdn')) keywordsRelatedImages.addClass('hdn');
        }
        else {
            if (keywordsRelatedImages.hasClass('hdn')) keywordsRelatedImages.removeClass('hdn');
        }

        //show hide tabs
        $$('#topNavDiv a').each
		(
			function(anchor) {
			    if (anchor.id.indexOf('signInLink') < 0) {
			        if (anchor.id.indexOf(tabToSelect) >= 0) {
			            anchor.removeClass('tab');
			            if (!anchor.hasClass('selectedTab')) anchor.addClass('selectedTab');
			        }
			        else {
			            anchor.removeClass('selectedTab');
			            if (!anchor.hasClass('tab')) anchor.addClass('tab');
			        }
			    }
			}
		)

        if (tabToSelect == 'imageDetails') {
            $('imagePaging').removeClass('hdn');
        }
        else {
            if (tabToSelect == 'relatedImages' && !relatedImagesLoaded) {
                CorbisUI.Enlargement.getRelatedImages();
            }

            if (!$('imagePaging').hasClass('hdn')) $('imagePaging').addClass('hdn');
        }
    },

    showCorner: function() {
        var underTabs = $('TabTop').getElement('div.inTabTop');

        if (underTabs.hasClass('hdn')) {
            underTabs.removeClass('hdn');
        }
    },

    hideCorner: function() {
        var underTabs = $('TabTop').getElement('div.inTabTop');
        if (!underTabs.hasClass('hdn')) {
            underTabs.addClass('hdn');
        }
    },
    getQueryStringParam: function(param) {
        var querystring = window.location.search.substring(1);
        var querystringArray = querystring.split("&");
        for (i = 0; i < querystringArray.length; i++) {
            var querystringKeyValue = querystringArray[i].split("=");
            if (querystringKeyValue[0] == param) {
                return querystringKeyValue[1];
            }
        }
    },
    getProductUid: function() {
        return CorbisUI.Enlargement.getQueryStringParam('puid');
    },
    getFolderId: function() {
        var caller = CorbisUI.Enlargement.getQueryStringParam('caller');
        if (caller == 'cart') {
            //Cart page doesnt have the hidden lightbox(cart folder id)id. so neeed to get it somehow
            return "";
        } else {
            return $('MainContent').getElement('input.lightboxId[type=hidden]').value;
        }
    },
    iconToolsetSelect: function(value) {

        var caller = window.location.queryStringParam('caller');
        var LightBoxIcon = $('controlsDiv').getElement('a.AddToLightbox') || $('controlsDiv').getElement('a.AddToLightboxSelected');

        switch (value) {
            case 'AddToLightbox':
                LightBoxIcon.setProperties({
                    'title': CorbisUI.GlobalVars.Enlargement.removeLightBoxAlt,
                    'alt': CorbisUI.GlobalVars.Enlargement.removeLightBoxAlt
                });
                ShowAddToLightboxModal($('MainContent').getElement('input.mediaUid').value, null, false);
                break;
            case 'AddToSubscription':
                //Calls CorbisUI.Enlargement.addToSubscription, and setup in presenter
                break;
            case 'AddToQuickPic':
                //Calls CorbisUI.Enlargement.addToQuickPic, and setup in presenter
                break;
            case 'CalculatePrice':
                //pricing url dependent on image, handled in presenter
                break;
            case 'ExpressCheckout':
                //existing code not changed
                CorbisUI.ExpressCheckout.Open($('corbisId').value, CorbisUI.Enlargement.getProductUid(), CorbisUI.Enlargement.getFolderId(), caller);
                break;
            case 'AddToCart':
                if ($('controlsDiv').getElement('a.AddToCartSelected') == null) {
                    //Check the caller. if the caller is from lightbox then instead of adding the item as an
                    //offering , add the item as a product to the cart instead.
                    var addToCart = new CorbisUI.Cart.AddToCart($('MainContent').getElement('input.mediaUid').value);
                    var cartIcon = $('controlsDiv').getElement('a.AddToCart');
                    cartIcon.setProperties({
                        'title': CorbisUI.GlobalVars.Enlargement.removeCartAlt,
                        'alt': CorbisUI.GlobalVars.Enlargement.removeCartAlt
                    });
                    switch (caller) {
                        case 'lightbox':
                            addToCart.onSuccess = refreshCartItem;
                            if (CorbisUI.Enlargement.getProductUid() == '00000000-0000-0000-0000-000000000000') {
                                addToCart.addOfferingToCart();
                            }
                            else {
                                addToCart.addProductToCart($('corbisId').value, CorbisUI.Enlargement.getProductUid());
                            }
                            break;
                        default:
                            addToCart.onSuccess = refreshCartItem;
                            addToCart.addOfferingToCart();
                            break;
                    }
                }
                break;
            case 'PrintPage':
                // Print verson of enlargement page.

                var originalURL = location.href;
                var urlArray = originalURL.split("?");
                var urlWithoutQuerystring = urlArray[0];

                var corbisId = $('corbisId').value;

                var querystring = window.location.search.substring(1);

                var querystringArray = querystring.split("&");
                var querystringKeyValue = null;


                var tmpQueryString = Browser.getQueryStringValues(window.location.href);
                var qsHash = new Hash(tmpQueryString);
                var newQS = '';
                qsHash.each(function(value, key, idx) {
                    if (key == 'id') qsHash.set(key, corbisId);
                    newQS += key + '=' + qsHash.get(key) + '&';
                });


                /* This 'if' statement detects if the URL contains "&tab=related", and removes it from the print version if it is. Bug no. 17608, April 2009 */
                var windowURL = urlWithoutQuerystring + "?" + newQS + "&print=true";
                if (windowURL.match('&tab=related')) {
                    windowURL = windowURL.replace(/&tab=related/, "");
                    window.open(windowURL, 'window', 'status=1, scrollbars=1, resizable=1, width=800, height=700');
                }
                else {
                    window.open(windowURL, 'window', 'status=1, scrollbars=1, resizable=1, width=800, height=700');
                }
                break;
        }

        return false;
    },

    getRelatedImages: function() {
        relatedImagesLoaded = true;
        Corbis.Web.UI.Enlargement.EnlargementScriptService.GetRelatedImages($('corbisId').value, displayRelatedImages, methodFailed)
    },

    addToQuickPic: function(corbisId, Url128, licenseModel, aspectRatio, title) {
        //console.log('CALLING: CorbisUI.Enlargement.addToQuickPic');
        Corbis.Web.UI.SearchOld.SearchScriptService.AddItemToQuickPick(corbisId, Url128, licenseModel, aspectRatio, title, addToQuickPicSuccess, methodFailed);
    },
    addToSubscription: function(corbisId, mediaId) {

        Corbis.Web.UI.SearchOld.SearchScriptService.AddSearchItemToSubscriptionNew(corbisId, mediaId, addToSubscriptionSuccess, methodFailed);
    },

    viewRfcdImages: function(mediaSetType, corbisId) {
        var rfcdUrl = String.format('/ImageGroup/{0}/{1}', mediaSetType, corbisId);
        try {
            opener.window.location.href = rfcdUrl;
        }
        catch (e) {
            window.open(rfcdUrl);
        }

        window.close();
    },

    updateRelativeImageQuery: function(relativeNumber) {
        //In safari enter key triggers submit of first submit button, so we need to check and not submit it again if it's a number change.
        if (Browser.Engine.webkit && this.ImageListUpdating) return false;
        var currentImageNumber = parseInt($('Pager').getElement('input.origPageNumber').value);
        return this.updateImageQuery(currentImageNumber + relativeNumber);
    },

    updateImageQuery: function(imageNumber) {
        this.ImageListUpdating = true;
        var pageForm = $('aspnetForm');
        var totalItems = parseInt($('Pager').getElement('input.totalItems').value);
        var currentPage = parseInt(pageForm.getElement('input.parentPageNo').value);
        var pageSize = parseInt(pageForm.getElement('input.parentPageSize').value);

        imageNumber = imageNumber < 1 ? 1 : imageNumber;
        imageNumber = imageNumber > totalItems ? totalItems : imageNumber;
        var pageNeeded = Math.ceil(imageNumber / pageSize);
        if (pageNeeded == currentPage) {
            var imageList = pageForm.getElement('input.parentImageList').value.split(',');
            var imageIndex = (imageNumber - ((currentPage - 1) * pageSize)) - 1;
            if (imageIndex < imageList.length) {
                var corbisId = imageList[imageIndex];

                pageForm.setProperty('action', pageForm.getProperty('action').replace(/id=[^&]*/, 'id=' + corbisId));
                var profileInfo = Cookie.read('Profile');
                var cookie = Browser.getQueryStringValues('?' + profileInfo);

                if (pageForm.getProperty('action').search(/puid=[^&]*/) >= 0) {
                    Corbis.Web.UI.Enlargement.EnlargementScriptService.GetProductUid(cookie.UserName, corbisId, CorbisUI.Enlargement.getFolderId(), this.GetProductUidSucceeded, methodFailed, imageNumber);
                    return false;
                }
            }

            return true;
        }
        else {
            Corbis.Web.UI.Enlargement.EnlargementScriptService.GetImageList(imageNumber, window.location.queryStringParam('caller'), pageSize, pageForm.getElement('input.parentQueryString').value, pageForm.getElement('input.lightboxId').value, this.GetImageListSucceeded, methodFailed, imageNumber)

            return false;
        };

    },
    GetProductUidSucceeded: function(result, context) {
        var pageForm = $('aspnetForm');

        pageForm.setProperty('action', pageForm.getProperty('action').replace(/puid=[^&]*/, 'puid=' + result));

        //will just use the pagenumber change to handle the back and forth buttons as well.
        var navNumber = $('Pager').getElement('input.NavPageNumber');
        navNumber.value = context;
        setTimeout('__doPostBack(\'' + navNumber.name + '\',\'\')', 0);
    },
    GetImageListSucceeded: function(result, context) {
        var pageForm = $('aspnetForm')
        pageForm.setProperty('action', pageForm.getProperty('action').replace(/id=[^&]*/, 'id=' + result[0]));
        var pager = $('Pager');
        pager.getElement('input.totalItems').value = result[1];
        pageForm.getElement('input.parentPageNo').value = result[2];
        result.splice(0, 3);
        pageForm.getElement('input.parentImageList').value = result.join(',');

        //will just use the pagenumber change to handle the back and forth buttons as well.
        var navNumber = pager.getElement('input.NavPageNumber');
        navNumber.value = context;
        setTimeout('__doPostBack(\'' + navNumber.name + '\',\'\')', 0);
    }
};

//var fullURL;
//try{
// fullURL = parent.document.URL;
//}
//catch(e){
    fullURL = document.URL;
//}

if (fullURL.match("&print=true")) {
    AddRounded = function() { };
}

window.onload = isItPrintVersion;

function isItPrintVersion() {

    if (fullURL.match("&print=true")) {

        $(window.document.body).removeClass('noGlobalBody');
        $(window.document.body).addClass('printVersion');
        window.focus();
        window.print();
    }
}

var webServiceResult;
var imageGroups;
var imageTemplate;
var relatedImagesLoaded;
function displayRelatedImages(results, context, methodName) {
    var imageGroupTemplate = $('imageGroupTemplate');
    var imageGroupContainer = $('relatedImageGroups');
    imageTemplate = $('imageTemplate');

    //add the groups
    webServiceResult = results;
    imageGroups = new Array(results.length);
    var RIGW = $('relatedImageGroupsWrapper');

    RIGW.getElement('.relatedImageMessage')
	    .set('html', $('relatedImageGroupsWrapper')
	                    .getElement('.relatedImageMessage')
	                    .get('html')
	                    .replace('{0}', imageGroups.length)
	        );
    RIGW.getElement('.relatedImageMessage')
	    .removeClass('hdn');

    results.each(function(item, i) {
        //imageGroups[i] = imageGroupTemplate.clone(true, false); 
        //using cloneNode because clone set image width to 0px;
        imageGroups[i] = $(imageGroupTemplate.cloneNode(true));
        imageGroupContainer.appendChild(imageGroups[i]);

        window.setTimeout('populateImageGroup(' + i + ')', 0);
    });

    //add a blank div for footer spacing, for FF
    var paddingdiv = new Element('div', {
        'styles': {
            'height': '36px'
        }
    });
    imageGroupContainer.appendChild(paddingdiv);

    Rounded('filmstripWrapper', 4, 4, 4, 4);
}

function populateImageGroup(groupIndex) {
    imageGroups[groupIndex]
		    .getElement('.relatedImageGroupTitle')
		    .set('html', webServiceResult[groupIndex].Name);
    if (webServiceResult[groupIndex].MediaType == Corbis.Image.Contracts.V1.ImageMediaSetType.RFCD) imageGroups[groupIndex].getElement('img').removeClass('hdn');
    if (webServiceResult[groupIndex].MediaType == Corbis.Image.Contracts.V1.ImageMediaSetType.RFCD ||
			webServiceResult[groupIndex].MediaType == Corbis.Image.Contracts.V1.ImageMediaSetType.StorySet) imageGroups[groupIndex].getElement('div.relatedImageGroupTitle').removeClass('hdn');
    imageGroups[groupIndex]
		    .getElement('h3')
		    .set('html', GetImageGroupLink(webServiceResult[groupIndex]));
    imageGroups[groupIndex]
		    .getElement('.relatedImageGroupDetail')
		    .set('html', imageGroups[groupIndex]
		                .getElement('.relatedImageGroupDetail')
		                .get('html')
		                .replace('{0}', webServiceResult[groupIndex].DisplayImageList.length)
		     );
    window.setTimeout('populateImages(' + groupIndex + ')', 0);
}

function populateImages(groupIndex) {
    var imageList = webServiceResult[groupIndex].DisplayImageList;
    var filmstrip = imageGroups[groupIndex].getElement('ul');
    var currentImage = $('corbisId').value;

    filmstrip.setProperty('mediaSetId', webServiceResult[groupIndex].MediaSetId);

    imageList.chunk(function(item, j, arr) {
        var newImage = imageTemplate.clone();
        var thumbNail = $(new Image());
        var imageLink = newImage.getElement('a')

        thumbNail.setProperties({
            'title': item.CorbisId,
            id: 'Image_' + groupIndex + '_' + j,
            'aspectRatio': item.AspectRatio,
            'imageCount': imageList.length
        }).addEvent('load', function() { checkLoading($(this)); });

        imageLink.appendChild(thumbNail);

        if (item.IsOutline && !CorbisUI.GlobalVars.Enlargement.canSeeOutline) {
            imageLink.appendChild(new Element('img', {
                alt: item.Corbis,
                src: '/Images/Spacer.gif',
                style: 'position:relative;top:-90px;left:0;height:90px;width:90px;'
            }));
        }

        if (item.CorbisId == currentImage) {
            newImage.addClass('selected');
            imageLink.setProperty('href', "#")
			    .addEvent('click', function() {
			        CorbisUI.Enlargement.selectTab('imageDetails');
			        return false;
			    });
        }
        else {
            imageLink.setProperty('href', "#")
			    .addEvent('click', function() {
			        EnlargeImagePopUp(String.format('{0}?id={1}&mediaSetId={2}&caller=mediaset', document.location.href.substring(0, document.location.href.indexOf('?')), item.CorbisId, webServiceResult[groupIndex].MediaSetId), 1000, 650);
			        return false;
			    });

            newImage.addEvents({
                'mouseover': function() { $(this).addClass('selected'); },
                'mouseout': function() { $(this).removeClass('selected'); }
            });

        }

        filmstrip.appendChild(newImage);

        //need to set image source after event .. for IE
        if (isAnonymous) {
            var anonStyles = anonymousFilmStripSizing(item.AspectRatio);
            // Create new image with actual url and put it at z-index=1
            var thumbNailBkgd = $(new Image()); ;
            thumbNailBkgd.src = item.Url128;
            thumbNailBkgd.setStyles(anonStyles);
            thumbNailBkgd.setStyle('zIndex', '1');
            imageLink.appendChild(thumbNailBkgd);
            if (Browser.Engine.trident) {//It sets top margin for IE crap
                var h = thumbNailBkgd.height;
                topIEMargin = parseInt((90 - h) / 2);
                thumbNailBkgd.setStyle('margin-top', topIEMargin);
            }
            // put this image above actual image z-index=2
            thumbNail.src = "/Images/spacer.gif";
            thumbNail.setStyles({ width: 90, height: 90 }); // cover whole image so that user can not get the actual image url
            thumbNail.setStyle('position', 'absolute');
            thumbNail.setStyle('zIndex', '2');
        } else {
            thumbNail.src = item.Url128;
        }
    }, 50);
}
function anonymousFilmStripSizing(Ratio) {
    var Size = 90;
    var returnSize = { width: 0, height: 0 }
    if (Ratio > 1) {
        var height = (Size - Math.round(Size / Ratio)) >> 1;
        returnSize.width = Size;
        returnSize.height = (Size - (height*2));
    } else {
        returnSize.width = Math.round(Size * Ratio);
        returnSize.height = Size;
    }
    return returnSize;
}

function anonymousFilmStripSizing(Ratio) {
    var Size = 90;
    var returnSize = { width: 0, height: 0 }
    if (Ratio > 1) {
        var height = (Size - Math.round(Size / Ratio)) >> 1;
        returnSize.width = Size;
        returnSize.height = (Size - (height*2));
    } else {
        returnSize.width = Math.round(Size * Ratio);
        returnSize.height = Size;
    }
    return returnSize;
}

CorbisUI.QueueManager.addQueue('ToolsetMacros', {
    canRerun: true,
    delay: true ,
    runOnDomReady: true,
     delayTime: 500
}).addItem('iconToolset',function(){CorbisUI.Enlargement.iconToolsetSelect()});

function checkLoading(image) {
    image = $(image);

    var ATTR = image.getProperties('aspectRatio', 'imageCount');

    if (ATTR.aspectRatio < 1) {
        image.width = 90 * ATTR.aspectRatio;
        image.height = 90;
    }
    else {
        image.width = 90;
        image.height = 90 / ATTR.aspectRatio;
        image.style.marginTop = Math.floor((90 - image.height) / 2);

    }

    //taking into account the current completing image.
    var imagesLoaded = 1;
    var filmstripImages = image.getParent('ul');

    filmstripImages.getElements('img').each
	(
		function(image) { if (image.complete) imagesLoaded++; }
	);

    //if we have loaded all or 50 images, remove the spinning thing.
    if (imagesLoaded >= Math.min(ATTR.imageCount, 50)) {
        var filmstrip = filmstripImages.getParent().getParent();
        filmstrip.getElement('.filmstripLoading').addClass('hdn');
        filmstrip.getElement('.filmstripItemsWindow').removeClass('hdn');
        CorbisUI.Filmstrip.setScrollControls(filmstrip);
    }
}

function addToQuickPicSuccess(corbisId, context, methodName) {
    
    if (corbisId == "") {
        new CorbisUI.Popup('quickpicMaximumAlert', {
            showModalBackground: false,
            closeOnLoseFocus: true,
            positionVert: 'middle',
            positionHoriz: 'right'
        });
    }
    else {
        //update enlargement icon
        
        var quickPicIcon = $('controlsDiv').getElement('a.AddToQuickPic');
        if (quickPicIcon && !quickPicIcon.hasClass('AddToQuickPicSelected')) {
            quickPicIcon.removeClass('AddToQuickPic');
            quickPicIcon.addClass('AddToQuickPicSelected');
            quickPicIcon.setProperties({
            'title': CorbisUI.GlobalVars.Enlargement.removeQuickpicAlt,
            'alt': CorbisUI.GlobalVars.Enlargement.removeQuickpicAlt
            });
        }

        Omniture.log(Omniture.event.addedToQuickPic);

        var parentWindow = window.opener;
        if (parentWindow) {
            try {
                switch (parentWindow.location.pathname.split('/').getLast().toLowerCase()) {
                    case 'searchresults.aspx':
                    case 'imagegroups.aspx':
                    case 'mylightboxes.aspx':
                    case 'mediasetsearch.aspx':
                        window.opener.CorbisUI.Handlers.Quickpic.refreshItemAdded(corbisId);
                        break;
                    case 'enlargement.aspx':
                        window.opener.addToQuickPicSuccess(corbisId, context, methodName);
                        break;
                    default:
                        if (parentWindow.MVCTilePage) {
                            if(parentWindow.MVCTilePage == 'minsearch') {
                                parentWindow.CorbisUI.Results.highlightContainer(corbisId, 'quickpic'); 
                            } else {
                                parentWindow.CorbisUI.SearchMVCLegacy.onRefreshQuickPic(corbisId);
                            }
                        }
                        break;
                }
            }
            catch (e) { };
        }
    }
}

function methodFailed(results, context, methodName) {
    if (methodName == 'GetRelatedImages') relatedImagesLoaded = false;
}

function addToSubscriptionSuccess(result, context, methodName) {
    if (result == "") {
        new CorbisUI.Popup('subscriptionMaximumAlert', {
            showModalBackground: false,
            closeOnLoseFocus: true,
            positionVert: 'middle',
            positionHoriz: 'right'
        });
    }
    else {
        LogOmnitureEvent("event45"); 
        //update enlargement icon
        var subscriptionIcon = $('controlsDiv').getElement('a.AddToSubscription');
        if (subscriptionIcon && !subscriptionIcon.hasClass('AddToSubscriptionSelected')) {
            subscriptionIcon.removeClass('AddToSubscription');
            subscriptionIcon.addClass('AddToSubscriptionSelected');
            subscriptionIcon.setProperties({
            'title': CorbisUI.GlobalVars.Enlargement.addSubscriptionAlt,
            'alt': CorbisUI.GlobalVars.Enlargement.addSubscriptionAlt
        });
        }

        var parentWindow = window.opener;
        if (parentWindow) {
            try {
                switch (parentWindow.location.pathname.split('/').getLast().toLowerCase()) {
                    case 'searchresults.aspx':
                    case 'imagegroups.aspx':
                    case 'mylightboxes.aspx':
                    case 'mediasetsearch.aspx':
                        window.opener.CorbisUI.Handlers.Subscription.refreshSubscriptionItemAdded(result, context, methodName);
                        break;
                    case 'enlargement.aspx':
                        window.opener.addToSubscriptionSuccess(result, context, methodName);
                        break;
                    default:
                        if (parentWindow.MVCTilePage) {
                            if(parentWindow.MVCTilePage == 'minsearch') {
                                parentWindow.CorbisUI.Results.highlightContainer(corbisId, 'subscription'); 
                            } else {
                                parentWindow.CorbisUI.SearchMVCLegacy.onRefreshSubscription(result.CorbisID);
                            }
                        }
                        break;
                }
            }
            catch (e) { };
        }
    }
}


function showDisclaimer(link) {

    LogOmnitureEvent("event33");
    
    new CorbisUI.Popup('disclaimerPopup', {
        showModalBackground: false,
        centerOverElement: 'disclaimerLinkDiv',
        closeOnLoseFocus: true,
        positionVert: 'top',
        positionHoriz: -2
    });
}

function clearKeywordsCheckBox() {
    var checks = $('corbisKeywordsContent').getElements('div.imageCheckbox');

    checks.each(function(cb) {
        CorbisUI.ImageCb.getImageCbObject(cb).setCheckState(false, true);
    });

}

function enableOrDisableSearchClearOnCheck() {
    var checks = $('corbisKeywordsContent').getElements('div.imageCheckbox');
    var hasOneChecked = false;

    checks.each(function(cb) {
        if (CorbisUI.ImageCb.getImageCbObject(cb).getCheckedState()) {
            hasOneChecked = true;
        }
    });

    var searchNow = $('corbisKeywordsContent').getElement('.GlassButton');
    var clearAll = $('clearKeywords').getElement('span.textIconButtonContainer');

    if (hasOneChecked) {
        setGlassButtonDisabled(searchNow, false);
        setTextIconButtonDisabled(clearAll, false);
    }
    else {
        setGlassButtonDisabled(searchNow, true);
        setTextIconButtonDisabled(clearAll, true);
    }

}

function reloadparentCloseChild(qKey, qVal, recentImageId, searchFilterQuerystring, recentImageNum) {
    if(qKey == "pg")
    {
        LogOmnitureEvent("event32"); 
    }
    else if(qKey == "lc")
    {
        LogOmnitureEvent("event31"); 
    }

    var url = "/Search#" + qKey + "=" + UrlEncode(qVal) + "&ri=" + recentImageId + "&rin=" + recentImageNum;
    redirectparentCloseChild(url);
}

function reloadminParentCloseChild(qKey, qVal, recentImageId, searchFilterQuerystring, recentImageNum) {
    if(qKey == "pg")
    {
        LogOmnitureEvent("event32"); 
    }
    else if(qKey == "lc")
    {
        LogOmnitureEvent("event31"); 
    }

    var url = "/Minsearch#" + qKey + "=" + UrlEncode(qVal) + "&ri=" + recentImageId + "&rin=" + recentImageNum;
    redirectparentCloseChild(url);
}

function searchKeywordsNowAction(isThirdParty, searchFilterQuerystring) {
    var isFromThirdParty = isThirdParty;
    var keywordWrap = $('corbisKeywordsContent').getElement('.keywordsDisplay');
    var items = keywordWrap.getElements('input[type=checkbox]');
    var searchKeywords = [];
    var keywordString = '';

    items.each(function(el) {
        if (el.checked) {
            var keyword = el.getNext('label').get('text').trim();
            if (keyword.test(' ') || keyword.test('&') || keyword.test('-')) {
                if (keyword.test('&')) {
                    keyword = keyword.replace("&", "%26");
                }
                keyword = '"' + keyword + '"';
            }
            searchKeywords.push(keyword);
        }
    });

    if (searchKeywords.length > 0) {
        searchKeywords.each(function(el) {
            keywordString = keywordString + ' ' + el;
        });
        keywordString.trim();
        var url = '/Search#q=' + keywordString + searchFilterQuerystring;

        if (isFromThirdParty == true) {
            location.href = url;
        }
        else if (window.opener && !window.opener.closed) {
            try {
                window.opener.location.href = url;
                self.close();
            }
            catch (e) {
            }
        }
        else {
            window.open(url);
            self.close();
        }
    }
    return false;
}

function refreshLightbox(lightboxId, corbisId, newlightboxName) {
    var lightboxButton = $('controlsDiv').getElement('a.AddToLightbox')
    if (lightboxButton) {
        lightboxButton.removeClass('AddToLightbox');
        lightboxButton.addClass('AddToLightboxSelected');
    }

    LogOmnitureEvent("event12");
    
    var parentWindow = window.opener;
    if (parentWindow) {
     
        try {
            switch (parentWindow.location.pathname.split('/').getLast().toLowerCase()) {
                case 'searchresults.aspx':
                case 'imagegroups.aspx':
                case 'mediasetsearch.aspx':
                    window.opener.CorbisUI.Handlers.Lightbox.refreshItemAdded(corbisId, lightboxId, newlightboxName);
                    break;
                case 'mylightboxes.aspx':
                    if (newlightboxName != "") {
                        window.opener.location = window.opener.location;
                    }
                    else {
                        window.opener.GetLB(lightboxId);
                    }
                    break;
                case 'enlargement.aspx':
                    window.opener.refreshLightbox(lightboxId, corbisId, newlightboxName);
                    break;
                default:
                    console.info(parentWindow);
                    if (parentWindow.MVCTilePage) { 
                        if(parentWindow.MVCTilePage == 'minsearch') {
                            parentWindow.CorbisUI.Results.highlightContainer(corbisId, 'lightbox');   
                        } else {
                            parentWindow.CorbisUI.SearchMVCLegacy.onRefreshLightbox(lightboxId, corbisId, newlightboxName);
                        }
                    }
                    break;
            }
        }
        catch (e) { };
    }
}
var rfLocalizedValue = null;
function refreshCartItem(results, price) {
    //disable button
    var addToCartIcon = $('controlsDiv').getElement('a.AddToCart');
    if (addToCartIcon) {
        addToCartIcon.removeClass('AddToCart');
        if (!addToCartIcon.hasClass('AddToCartSelected')) addToCartIcon.addClass('AddToCartSelected');
    }
    var currentPrice = price;
    if(!price && rfLocalizedValue) {
        currentPrice = rfLocalizedValue;
    }
    if(currentPrice) {
        var priceHolder = $('imageDetailsContent');
        if(priceHolder) {
            var priceLink = priceHolder.getElement('ul.priceLine li a');
            if(!priceLink) {
                var priceLinkParent = priceHolder.getElement('ul.priceLine li');
                priceLink = new Element('a', {
                    "class": "orangeText infoWrap1 MT_0",
                    "events": {
                        "click": function() {
                            $('controlsDiv').getElement('a.CalculatePrice').onclick();
                        }
                    }
                });
                priceLinkParent.appendChild(priceLink);
            }
            if(priceLink) {
                priceLink.set('text', CorbisUI.GlobalVars.Enlargement.pricePrefixText + ' ' + currentPrice);
            }
        }
    }

    var parentWindow = window.opener;
    if (parentWindow) {
        try {
            var parentDocument = window.opener.document;
            var offeringUid = $('MainContent').getElement('input.mediaUid').value;
            var corbisId = $('corbisId').value;
            
            switch (parentDocument.location.pathname.split('/').getLast().toLowerCase()) {
                case 'searchresults.aspx':
                case 'imagegroups.aspx':
                case 'mediasetsearch.aspx':
                    parentWindow.CorbisUI.Handlers.Cart.refreshItemAdded(offeringUid, corbisId, results);
                    break;
                case 'mylightboxes.aspx':
                    parentWindow.CorbisUI.Lightbox.Handler.refreshCartItem(corbisId, results, {price: price});
                    break;
                case 'cart.aspx':
                    parentWindow.location = parentWindow.location;
                    window.location = window.location;
                    break;
                case 'enlargement.aspx':
                    
                    parentWindow.refreshCartItem(results);
                    break;
                case 'minsearch':
                    parentWindow.CorbisUI.Results.highlightContainer(corbisId, 'cart'); 
                    break;
                default:
                    //update cart count
                    parentWindow.UpdateCartCount(results);
                    if (parentWindow.MVCTilePage) {
                        parentWindow.CorbisUI.SearchMVCLegacy.onRefreshCart(corbisId);
                    }
                    break;
            }
        }
        catch (e) {
            console.info(e);
        }
    }
}

function refreshEnlargementPage(pageAction) {
    //to take into account the fact the user might have move through a number of images.
    //we have to do a form repost because of all the variable we keep at a form level.
    $$('input.pageAction')[0].value = pageAction;
    __doPostBack('refreshEnlargementPage', '');
}

function ExecutePageAction(pageAction) {
    var pageActionIcon = $('controlsDiv').getElement('a.' + pageAction);
    //sometimes the action might not be available after a user is signed on, eg.adding to cart when image is already in cart.
    if (pageActionIcon)
    {
        pageActionIcon.click();
        
        
    }
}

function GetImageGroupLink(group) {
    return String.format('<a href="javascript:void(0)" onclick="javascript:redirectparentCloseChild(\'/ImageGroup/{0}/{1}/{2}\'); return false;">{3}</a>', group.MediaType, group.MediaSetId, $('corbisId').value, Corbis.Image.Contracts.V1.ImageMediaSetType.toLocalizedString(group.MediaType));
}

function redirectparentCloseChild(url) {
    if (window.opener) {
        try {
            if (window.opener.redirectparentCloseChild) {
                window.opener.redirectparentCloseChild(url);
            } else {
            window.opener.focus();            
            if (window.opener.document.getElementById('ReturnToSearchLinkId')) {
                window.opener.document.getElementById('ReturnToSearchLinkId').style.display = 'block';
            }
                window.opener.location.href = url;
            }
        } catch (e) { }
    } else {
        window.open(url);
    }
    self.close();
}

function checkSignInAndCountryStatus() {
	if (signInLevelWhenLoaded < 1) {
		Corbis.Web.UI.Registration.SignInStatus.SignInStateAndCountry(SignInAndCountryStatusSuccess);
	}
}

function SignInAndCountryStatusSuccess(result) {
	if (result.signInState == 2) {
		signInLevelWhenLoaded = 2;
		if (result.country == countryWhenLoaded) {
			refreshEnlargementPage("");
		}
		else {
			OpenModal('registerSuccessDiffCountry');
		}
	}
	else {
		setTimeout("checkSignInAndCountryStatus()", 10000);
	}
}

function closeFeedBackPopup() {
	_Validation.reset();
	HideModal('feedbackPopup');
}

function BeginRequestHandler(sender, args) {
	isFeedbackRequest = false;
	if (args.get_postBackElement().id == lbClientID) {
		isFeedbackRequest = true;
	}
}

function EndRequestHandler(sender, args) {
	if (isFeedbackRequest) {
		_Validation = null;
		initValidation();
		if (emailErrorFromServer.value == 'true') {
			_Validation.highlightRow(true, userEmail);
			_Validation.errorDiv.removeClass('displayNone');
			var errorItem = '<li elId=' + userEmail.id + '_error>' + userEmail.getProperty('custom1_message') + '</li>'
			_Validation.errorTarget.set('html', errorItem);
			ResizeModal('feedbackPopup');
		}
		else {
			_Validation.reset();
			HideModal('feedbackPopup');
			OpenModal('feedbackSuccess');
		}
	}
}

function resetServerErrors() {
	emailErrorFromServer.value = 'false';
	_Validation.highlightRow(false, userEmail);
}

function validateComments() {
	var comments = commentsClientEl;
	var expression = comments.value.length == 0;
	return !expression;
}

function validateEmail() {
	var email = userEmail;
	if (email.value == '') {
		_Validation.highlightRow(true, email);
		return false;
	}
	else {
		var result = _Validation.options.regexp.email.test(email.value);
		_Validation.highlightRow(!result, email);
		return result; 
	}
}

function validateRole() {
	var roleList = role;
	var expression = roleList.selectedIndex != 0;
	_Validation.highlightRow(!expression, roleList);
	return expression;
}

function clearImageListCookie() {
	Cookie.dispose(cookieId);
}

function checkSignInAndCountryStatus() {
	if (signInLevelWhenLoaded < 1) {
		Corbis.Web.UI.Registration.SignInStatus.SignInStateAndCountry(SignInAndCountryStatusSuccess);
	}
}

function SignInAndCountryStatusSuccess(result) {
	if (result.signInState == 2) {
		signInLevelWhenLoaded = 2;
		if (result.country == countryWhenLoaded) {
			refreshEnlargementPage("");
		}
		else {
			OpenModal('registerSuccessDiffCountry');
		}
	}
	else {
		setTimeout("checkSignInAndCountryStatus()", 10000);
	}
}

function closeFeedBackPopup() {
	_Validation.reset();
	HideModal('feedbackPopup');
}

function BeginRequestHandler(sender, args) {
	isFeedbackRequest = false;
	if (args.get_postBackElement().id == lbClientID) {
		isFeedbackRequest = true;
	}
}

function EndRequestHandler(sender, args) {
	if (isFeedbackRequest) {
		_Validation = null;
		initValidation();
		if (emailErrorFromServer.value == 'true') {
			_Validation.highlightRow(true, userEmail);
			_Validation.errorDiv.removeClass('displayNone');
			var errorItem = '<li elId=' + userEmail.id + '_error>' + userEmail.getProperty('custom1_message') + '</li>'
			_Validation.errorTarget.set('html', errorItem);
			ResizeModal('feedbackPopup');
		}
		else {
			_Validation.reset();
			HideModal('feedbackPopup');
			OpenModal('feedbackSuccess');
		}
	}
}

function resetServerErrors() {
	emailErrorFromServer.value = 'false';
	_Validation.highlightRow(false, userEmail);
}

function validateComments() {
	var comments = commentsClientEl;
	var expression = comments.value.length == 0;
	return !expression;
}

function validateEmail() {
	var email = userEmail;
	if (email.value == '') {
		_Validation.highlightRow(true, email);
		return false;
	}
	else {
		var result = _Validation.options.regexp.email.test(email.value);
		_Validation.highlightRow(!result, email);
		return result; 
	}
}

function validateRole() {
	var roleList = role;
	var expression = roleList.selectedIndex != 0;
	_Validation.highlightRow(!expression, roleList);
	return expression;
}

function getOptionStylesIE() {
	if (Browser.Engine.trident) {
		var selectControl = role;
		selectControl.setStyles({
			'border': '0px solid Transparent',
			'color': '#333333',
			'fontSize': '12px',
			'textAlign': 'left',
			'lineHeight': '18px',
			'width': '100%'
		});
	}
}

//End: /Enlargement/Enlargement.js
CorbisUI.debug = true;