/*! $Id: galleries.js 12355 2011-05-23 13:00:01Z kschaefer $ */
/*global $: false, window: false, modelName: false, modelYear: false, doPassVar: false, ModelGalleryVideo: false */
"use strict";

var containerGalleryID = "boxImageThumbnailsContainer",
        jContainerGallery = "#" + containerGalleryID,
        containerColorsID = "colorThumbnailsOnlyContainer",
        jContainerColors = "#" + containerColorsID,
        colorTextID = "colorsDescriptor",
        jColorText = "#" + colorTextID,
        colorThOffset = 10;

function writeCopy(text) {
    if (0 < $("#mediaDescriptionContainer").length) {
        $("#mediaDescriptionContainer").text(text);
    }
}

function writeMaxi(fileName) {
    var writeWin = window.open('', 'ImagePopup', 'top=0,left=0,width=1024,height=768,scrollbars=no,resizable=no'),
            wd,
            content = '<html><head><title>Chevrolet</title></head>' +
                    '<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">' +
                    '<img src="' +
                    fileName +
                    '"></body></html>';

    wd = writeWin.document;
    wd.open();
    wd.write(content);
    wd.close();
}

function makeDownloadLink(s) {
    var d = s.replace(/-thumbnail-/, "-download-");
    writeDownloadLink(d);
}

function writeDownloadLink(url) {
    $("#mediaDownloadLink").unbind("click").bind("click", function (e) {
        writeMaxi(url);
    });
}

function makeMovieDownloadLink(s) {
    $("#mediaDownloadLink").attr("href", s);
}

function xChgPic(src) {
    function removeNoise() {
        $(this).css({"filter": null});
    }

    $("#mediaScreen").append("<div class='mLoad'></div>");
    var nImg = new Image();
    $(nImg).load(function () {
        $("#mediaScreen").empty().append(nImg);
        $(this).fadeIn("slow", removeNoise);
    })
            .error(function () {
        $("div.mLoad").remove();
    })
            .attr("src", src);

}

function browseImages(direction) {
    // Added version for handling new structure with bundles. Can be removed when all files are switched to bundles!!
    var wrapperModeLi = jQuery(jContainerGallery).find("ul.thumbnailsWrapper").length;
    var firstElement = jQuery(jContainerGallery + ' ul > li:first');
    var firstThumbnail = firstElement.find("a.thumbnailContainer:first");
    var urlBigImage = firstThumbnail.attr("href");
    var urlDownloadImage = firstThumbnail.siblings("a.downloadImage").attr("href");
    var imageSrc = "";
    var elem = $(jContainerGallery).children('a.imgActive'),
            image,
            src,
            nElem,
            txt;

    if ((urlBigImage != undefined && urlBigImage != '#') && (urlDownloadImage != undefined && urlDownloadImage != '#')) {		
        elem = $(jContainerGallery).children("ul").children('li.imgActive');
    }
    if (direction === +1) {
        if (wrapperModeLi <= 0) {
            nElem = (0 < $(elem).next("a.thumbnailContainer").length) ? $(elem).next("a.thumbnailContainer") : $(jContainerGallery).children('a.thumbnailContainer:first');
        }
        else {
            nElem = (0 < $(elem).next("li").length) ? $(elem).next("li") : $(jContainerGallery).children("ul").children('li:first');
        }
    }
    else if (direction === -1) {
        if (wrapperModeLi <= 0) {
            nElem = (0 < $(elem).prev("a.thumbnailContainer").length) ? $(elem).prev("a.thumbnailContainer") : $(jContainerGallery).children('a.thumbnailContainer:last');
        }
        else {
            nElem = (0 < $(elem).prev("li").length) ? $(elem).prev("li") : $(jContainerGallery).children("ul").children('li:last');
        }
    }
	
	urlBigImage = nElem.find("a.thumbnailContainer").attr("href");
    urlDownloadImage = nElem.find("a.downloadImage").attr("href");
	
    try {
        if ((urlBigImage === undefined || urlBigImage === '#') && (urlDownloadImage === undefined || urlDownloadImage === '#')) {
            // Non-bundles found
            if ('object' === typeof(console)) {
                console.warn("Script: 'galleries_bdl, browseImages': Item has no bundle!", nElem);
            }
            $(nElem).siblings().removeClass('imgActive');
            $(nElem).addClass('imgActive');
            image = $(nElem).find('img');
            src = $(image).attr('src');
            txt = $(image).attr('alt');
            makeDownloadLink(src);
            xChgPic(src.replace(/-thumbnail-/, "-"));
            writeCopy(txt);
        }

        else if ((urlBigImage != undefined && urlBigImage != '#') && (urlDownloadImage != undefined && urlDownloadImage != '#')) {
            // Bundles found
            if ('object' === typeof(console)) {
                console.info("Script: 'galleries_bdl, browseImages': Item bundle found.", nElem);
            }
            $(nElem).siblings().removeClass('imgActive');
            $(nElem).addClass('imgActive');
            urlBigImage = $(nElem).find("a.thumbnailContainer").attr("href");
            urlDownloadImage = $(nElem).find("a.downloadImage").attr("href");
            image = $(nElem).find('img');
            src = $(image).attr('src');
            txt = $(image).attr('alt');
            writeDownloadLink(urlDownloadImage);
            xChgPic(urlBigImage);
            writeCopy(txt);
        }


    }
    catch (e) {
    }


}

// 360

/*
 function init360(nc) {
 try {
 if (nc) {
 cColor = modelName + "/" + modelName + ".swf";
 }
 else {
 element = $(jContainerColors+' a:first');
 src = $(jContainerColors+' a:first img').attr('src');
 cColor = build360Path(src);
 writeColor($(jContainerColors+' a:first img').attr('alt'),getThumbnailPosition($(jContainerColors+' a:first')));
 $(jContainerColors+' a:first').addClass("imgActive");
 initSWF(cColor);
 }
 }
 catch (e) {

 }
 finally {

 }
 }
 function init360(nc) {

 element = $(jContainerColors+' a:first');
 src = $(jContainerColors+' a:first img').attr('src');
 cColor = build360Path(src);
 //writeColor($(jContainerColors+' a:first img').attr('alt'),getThumbnailPosition($(jContainerColors+' a:first')));
 $(jContainerColors+' a:first').addClass("imgActive");
 //cColor = "poly_silver/poly_silver.swf";
 initSWF(cColor);

 }*/
function build360Path(s) {
    var r;
    r = s.substring(s.lastIndexOf("/") + 1, s.length);
    r = r.replace(/\.png/, '');
    //s = s.replace(/(\w.-)_/, '');
    r = r.replace(/(\w[^\n\r$]-)_/, ''); //WARNING: Insecure '^'.
    r = r.replace(/_swatch/, '');
    //s = s.replace(/(\w.+)_/, '');
    r = r.replace(/(\w[^\n\r$]+)_/, ''); //WARNING: Insecure '^'.
    r = r.replace(/-/g, '_');
    r = r + "/" + r + ".swf";
    return r;
}

function buildColorPath(s) {
    var r, basePath = "/assets/images/global/exterior/models/" + modelName + "/";

    r = s.substring(s.lastIndexOf("/") + 1, s.length);
    r = r.replace(/\.png/, '.jpg');
    r = r.replace(/_swatch/, '');
    /*
     s = s.replace(/(\w.-)_/, '');
     s = s.replace(/(\w.+)_/, '');
     s = s.replace(/-/, '_');
     */
    r = basePath + modelName + "-" + modelYear + "-gallery-colour-" + r;
    return r;
}

function getThumbnailPosition(element) {
    var pos = {x: 0, y: 0};
    if (element) {
        pos.x += element.offsetLeft;
        pos.y += element.offsetTop;
    }
    return pos;
}

function writeColor(color, position) {
    var pos;

    $(jColorText).empty();
    pos = position.x - colorThOffset;
    if (0 > pos) {
        pos = 0;
    }
    $(jColorText).append(color).css({'padding-left': pos + 'px'});
}

// colors
function initColors() {
    try {
        //var imageSrc = $(jContainerColors+' a:first img').attr('src');
        //buildColorPath(imageSrc);
        writeColor($(jContainerColors + ' a:first img').attr('alt'), getThumbnailPosition($(jContainerColors + ' a:first')));
        $(jContainerColors + ' a:first').addClass('imgActive');

    }
    catch (e) {
    }
}

function initGallery() {
	var firstElementLiMode = jQuery(jContainerGallery + ' ul > li:first');
	var firstElementAMode = jQuery(jContainerGallery);
    var firstThumbnail;
	var firstElement;
	if(firstElementLiMode.length > 0) {
		firstElement = firstElementLiMode;
		firstThumbnail = firstElement.find("a.thumbnailContainer:first");
		firstElement.addClass("imgActive");
	}
	else {
		firstElement = firstElementAMode;
		firstThumbnail = firstElement.find("a.thumbnailContainer:first");		
		firstThumbnail.addClass("imgActive");
	}
    /*var firstElement = jQuery(jContainerGallery + ' ul > li:first');*/
    var urlBigImage = firstThumbnail.attr("href");
    var urlDownloadImage = firstThumbnail.siblings("a.downloadImage").attr("href");
    var imageSrc = "";
    // Get urls
    if ((urlBigImage === undefined || urlBigImage === '#') && (urlDownloadImage === undefined || urlDownloadImage === '#')) {
        // Non-bundles found
        if ('object' === typeof(console)) {
            console.warn("Script: 'galleries_bdl, initGallery': Item has no bundle!");
        }
        imageSrc = firstThumbnail.find("img").attr('src');
        makeDownloadLink(imageSrc);
    }
    else if ((urlBigImage != undefined || urlBigImage != '#') && (urlDownloadImage != undefined || urlDownloadImage != '#')) {
        // Bundles found
        if ('object' === typeof(console)) {
            console.info("Script: 'galleries_bdl, initGallery': Item bundle found.");
        }
        writeDownloadLink(urlDownloadImage);
        xChgPic(urlBigImage);
    }
    writeCopy(firstThumbnail.find("img").attr('alt'));
}

function init360() {
    var element = $(jContainerColors + ' a:first')[0];

    //element = $(jContainerColors+' a:first');
    writeColor($(element).find('img').attr("alt"), getThumbnailPosition(element));
    //writeColor($(element+' img').attr('src'),getThumbnailPosition(element));
}

function initMovies() {
    var txt,
            src;

    try {
        txt = $(jContainerGallery + ' div:first ul.movieMetaInfo li.movieMetaTitle').text();
        src = $(jContainerGallery + ' div:first ul.movieMetaInfo li.movieMetaDownload').text();

        $(jContainerGallery + ' div:first a').addClass("imgActive");
        makeMovieDownloadLink(src);
        writeCopy(txt);
    }
    catch (e) {
    }

}

$(document).ready(function () {
    var imageSrc,
            path;

    if ("undefined" === typeof(ModelGalleryColorizer)) {
        $(".colours360Btn").click(function () {
            $(this).siblings().removeClass("imgActive");
            $(this).addClass("imgActive");
            imageSrc = $(this).find('img').attr("src");
            path = build360Path(imageSrc);
            writeColor($(this).find('img').attr("alt"), getThumbnailPosition(this));
            doPassVar(path);
            //writeCopy($(this).find('img'));
        });
    }

    if ("undefined" === typeof(ModelGalleryVideo)) {
        $(".movieThumbnailContainer").click(function () {
            $(".movieThumbnailContainer").removeClass("imgActive");
            $(this).addClass("imgActive");
            writeCopy($(this).parent().find('ul.movieMetaInfo li.movieMetaTitle').text());
            makeMovieDownloadLink($(this).parent().find('ul.movieMetaInfo li.movieMetaDownload').text());
        });
    }

    $(".coloursBtn").click(function () {
        $(this).siblings().removeClass("imgActive");
        $(this).addClass("imgActive");
        imageSrc = $(this).find('img').attr("src");
        path = buildColorPath(imageSrc);
        writeColor($(this).find('img').attr("alt"), getThumbnailPosition(this));
        xChgPic(path);
        //writeCopy($(this).find('img'));
    });

    $("a.thumbnailContainer").click(function (e) {
        /* Respect bundles: If no a-tags with the source for big- and downloadimage found, generate
         it in the old style by url-string-manipulations: */
        var urlBigImage = jQuery(this).attr("href");
        var urlDownloadImage = jQuery(this).siblings("a.downloadImage").attr("href");
        var imageSrc = "";
        // Set active status
		// Bundles
		if($(this).parent("li").length > 0) {
			$(this).parent("li").siblings("li").removeClass("imgActive");
			$(this).parent("li").addClass("imgActive");
		}
		// Non-Bundles
		else {
			$(this).siblings("a").removeClass("imgActive");
			$(this).addClass("imgActive");
		}
        writeCopy($(this).find('img').attr("alt"));
        // Prevent default
        e.preventDefault();
        // Get urls
        if ((urlBigImage === undefined || urlBigImage === '#') && (urlDownloadImage === undefined || urlDownloadImage === '#')) {
            // Non-bundles found
            if ('object' === typeof(console)) {
                console.warn("Script: 'galleries_bdl': Item has no bundle!");
            }
            imageSrc = $(this).find('img').attr("src");
            makeDownloadLink(imageSrc);
            xChgPic(imageSrc.replace(/-thumbnail-/, "-"));
        }
        else if ((urlBigImage != undefined && urlBigImage != '#') && (urlDownloadImage != undefined && urlDownloadImage != '#')) {
            // Bundles found
            if ('object' === typeof(console)) {
                console.info("Script: 'galleries_bdl': Item bundle found.");
            }
            writeDownloadLink(urlDownloadImage);
            xChgPic(urlBigImage);
        }
        else {
            if ('object' === typeof(console)) {
                console.error("Script: 'galleries_bdl': Item has no bundle! One or both url are not valid (", urlBigImage, urlDownloadImage, ")");
            }
        }
    });

    $(".galleryBoxTop * a").mouseover(function () {
        $(this).addClass("imgActiveHover");
    });
    $(".galleryBoxTop * a").mouseout(function () {
        $(this).removeClass("imgActiveHover");
    });
    $("div#mediaStageControlButtons *").mousedown(function () {
        $(this).addClass("btnActive");
        //$(this).css({"background-position":"4px 4px"});
    });
    $("div#mediaStageControlButtons *").mouseup(function () {
        $(this).removeClass("btnActive");
    });
});

