// -----------------------------------------------------------------------------------
//
//  Lightbox v2.02
//  by Lokesh Dhakar - http://www.huddletogether.com
//  3/31/06
//
//  For more information on this script, visit:
//  http://huddletogether.com/projects/lightbox2/
//
//  Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//
//  Credit also due to those who have helped, inspired, and made their code available to the public.
//  Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.
//
//
// -----------------------------------------------------------------------------------
/*

    Table of Contents
    -----------------
    Configuration
    Global Variables

    Extending Built-in Objects
    - Object.extend(Element)
    - Array.prototype.removeDuplicates()
    - Array.prototype.empty()

    Lightbox Class Declaration
    - initialize()
    - start()
    - changeImage()
    - resizeImageContainer()
    - showImage()
    - updateDetails()
    - updateNav()
    - enableKeyboardNav()
    - disableKeyboardNav()
    - keyboardAction()
    - preloadNeighborImages()
    - end()

    Miscellaneous Functions
    - getPageScroll()
    - getPageSize()
    - getKey()
    - listenKey()
    - showSelectBoxes()
    - hideSelectBoxes()
    - pause()
    - initLightbox()

    Function Calls
    - addLoadEvent(initLightbox)

*/
// -----------------------------------------------------------------------------------

//
//  Configuration
//
//var fileLoadingImage = "/extension/prodigg/design/prodigg/images/lb/loading.gif";
//var fileBottomNavCloseImage = "/extension/prodigg/design/prodigg/images/lb/close.gif";

var fileLoadingImage = "/extension/prodigg/design/prodigg/images/lb/loading.gif";
var fileBottomNavCloseImage = "";

var resizeSpeed = 7;    // controls the speed of the image resizing (1=slowest and 10=fastest)

var borderSize = 10;    //if you adjust the padding in the CSS, you will need to update this variable

// -----------------------------------------------------------------------------------

//
//  Global Variables
//
var imageArray = new Array;
var activeImage;

if(resizeSpeed > 10){ resizeSpeed = 10;}
if(resizeSpeed < 1){ resizeSpeed = 1;}
resizeDuration = (11 - resizeSpeed) * 0.15;

// -----------------------------------------------------------------------------------

//
//  Additional methods for Element added by SU, Couloir
//  - further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
    getWidth: function(element) {
        element = $(element);
        return element.offsetWidth;
    },
    setWidth: function(element,w) {
        element = $(element);
        element.style.width = w +"px";
    },
    setHeight: function(element,h) {
        element = $(element);
        element.style.height = h +"px";
    },
    setTop: function(element,t) {
        element = $(element);
        element.style.top = t +"px";
    },
    setSrc: function(element,src) {
        element = $(element);
        element.src = src;
    },
    setHref: function(element,href) {
        element = $(element);
        element.href = href;
    },
    setInnerHTML: function(element,content) {
        element = $(element);
        element.innerHTML = content;
    }
});

// -----------------------------------------------------------------------------------

//
//  Extending built-in Array object
//  - array.removeDuplicates()
//  - array.empty()
//
Array.prototype.removeDuplicates = function () {
    for(i = 1; i < this.length; i++){
        if(this[i][0] == this[i-1][0]){
            this.splice(i,1);
        }
    }
}

// -----------------------------------------------------------------------------------

Array.prototype.empty = function () {
    for(i = 0; i <= this.length; i++){
        this.shift();
    }
}

// -----------------------------------------------------------------------------------

//
//  Lightbox Class Declaration
//  - initialize()
//  - start()
//  - changeImage()
//  - resizeImageContainer()
//  - showImage()
//  - updateDetails()
//  - updateNav()
//  - enableKeyboardNav()
//  - disableKeyboardNav()
//  - keyboardNavAction()
//  - preloadNeighborImages()
//  - end()
//
//  Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
//


/**
 *
 * @access public
 * @return void
 **/

var Lightbox = Class.create();
Lightbox.prototype = {

    initialize: function( color ) {
        // The rest of this code inserts html at the bottom of the page that looks similar to this:
        //
        //  <div id="overlay"></div>
        //  <div id="lightbox">
        //      <div id="imageDataContainer">
        //          <div id="loading">
        //                  <a href="#" id="loadingLink">
        //                      <img src="images/loading.gif">
        //                  </a>
        //          </div>
        //          <div id="imageData">
        //              <div id="imageDetails">
        //                  <span id="caption"></span>
        //                  <span id="numberDisplay"></span>
        //              </div>
        //              <div id="bottomNav">
        //                  <a href="#" id="bottomNavClose">
        //                      <img src="images/close.gif">
        //                  </a>
        //              </div>
        //          </div>
        //      </div>
        //  </div>
        this.color = color;

        var objBody = document.getElementsByTagName("body").item(0);

        var objOverlay = document.createElement("div");
        objOverlay.setAttribute( 'id', 'overlay'+this.color );
        objOverlay.style.display = 'none';
        objOverlay.onclick = function() { myLightbox.end(); return false; }
        objBody.appendChild(objOverlay);

        var objLightbox = document.createElement("div");
        objLightbox.setAttribute('id','lightbox');
        objLightbox.style.display = 'none';
        objBody.appendChild(objLightbox);

        var objImageDataContainer = document.createElement("div");
        objImageDataContainer.setAttribute( 'id', 'imageDataContainer'+this.color );
        objImageDataContainer.className = 'clearfix';
        objLightbox.appendChild(objImageDataContainer);

        var objImageData = document.createElement("div");
        objImageData.setAttribute('id','imageData');
        objImageDataContainer.appendChild(objImageData);

        var objLoading = document.createElement("div");
        objLoading.setAttribute('id','loading');
        objImageDataContainer.appendChild(objLoading);

        var objLoadingLink = document.createElement("a");
        objLoadingLink.setAttribute('id','loadingLink');
        objLoadingLink.setAttribute('href','#');
        objLoadingLink.onclick = function() { myLightbox.end(); return false; }
        objLoading.appendChild(objLoadingLink);

        var objLoadingImage = document.createElement("img");
        objLoadingImage.setAttribute('src', fileLoadingImage);
        objLoadingLink.appendChild(objLoadingImage);

        var objImageDetails = document.createElement("div");
        objImageDetails.setAttribute('id','imageDetails');
        objImageData.appendChild(objImageDetails);

        var objCaption = document.createElement("span");
        objCaption.setAttribute('id','caption');
        objImageDetails.appendChild(objCaption);

        var objBottomNav = document.createElement("div");
        objBottomNav.setAttribute('id','bottomNav');
        objImageData.appendChild(objBottomNav);

        var objBottomNavCloseLink = document.createElement("a");
        objBottomNavCloseLink.setAttribute('id','bottomNavClose');
        objBottomNavCloseLink.setAttribute('href','#');
        objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
        objBottomNav.appendChild(objBottomNavCloseLink);

        var objBottomNavCloseImage = document.createElement("img");
        objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
        objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
    },

    //
    //  start()
    //  Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
    //
    start: function( width, height ) {

        hideSelectBoxes();

        // stretch overlay to fill page and fade in
        var arrayPageSize = getPageSize();
        Element.setHeight( 'overlay'+this.color, arrayPageSize[1] );
        Element.show( 'overlay'+this.color );

        imageArray = [];
        imageNum = 0;

        // calculate top offset for the lightbox and display
        var arrayPageSize = getPageSize();
        var arrayPageScroll = getPageScroll();

        document.getElementById( 'imageDataContainer'+this.color ).style.top = arrayPageScroll[1]+'px';

        
        var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);
        
        Element.show('lightbox');

        this.changeImage( width, height );
    },

    //
    //  changeImage()
    //  Hide most elements and preload image in preparation for resizing image container.
    //
    changeImage: function( width, height ) {
        Element.show('loading');
        Element.hide( 'imageDataContainer'+this.color );
        myLightbox.resizeImageContainer( width, height );
    },

    //
    //  resizeImageContainer()
    //
    resizeImageContainer: function( imgWidth, imgHeight) {
        /*
        // get current height and width
        this.wCur = Element.getWidth( 'imageDataContainer'+this.color);
        this.hCur = Element.getHeight( 'imageDataContainer'+this.color );
        // scalars based on change from old to new
        this.xScale = ((imgWidth  + (borderSize * 2)) / this.wCur) * 100;
        this.yScale = ((imgHeight  + (borderSize * 2)) / this.hCur) * 100;
        

        // calculate size difference between new and old image, and resize if necessary
        wDiff = (this.wCur - borderSize * 2) - imgWidth;
        hDiff = (this.hCur - borderSize * 2) - imgHeight;

        if(!( hDiff == 0)){ new Effect.Scale('imageDataContainer'+this.color, this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }
        if(!( wDiff == 0)){ new Effect.Scale('imageDataContainer'+this.color, this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }

        // if new and old image are same size and no scaling transition is necessary,
        // do a quick pause to prevent image flicker.
        if((hDiff == 0) && (wDiff == 0)){
            if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);}
        }
        */
        /*********************************************************************************************/
        //Element.setWidth( 'imageDataContainer'+this.color, imgWidth + (borderSize * 2));
        if( imgWidth == '100%' ){
            document.getElementById( 'imageDataContainer'+this.color ).style.width = imgWidth;      
        }else{
            document.getElementById( 'imageDataContainer'+this.color ).style.width = imgWidth+'px';     
        }
        
        this.showImage();
    },

    //
    //  showImage()
    //  Display image and begin preloading neighbors.
    //
    showImage: function(){
        
        Element.hide('loading');
        
        myLightbox.updateDetails();
        
    },

    //
    //  updateDetails()
    //  Display caption, image number, and bottom nav.
    //
    updateDetails: function() {
        new Effect.Parallel(
            [ new Effect.SlideDown( 'imageDataContainer'+this.color, { sync: true, duration: resizeDuration + 0.25, from: 0.0, to: 1.0 }),
              new Effect.Appear('imageDataContainer'+this.color, { sync: true, duration: 1.0 }) ],
            { duration: 0.65, afterFinish: function() { myLightbox.updateNav();} }
        );
    },

    //
    //  updateNav()
    //  Display appropriate previous and next hover navigation.
    //
    updateNav: function() {
    },

    //
    //  enableKeyboardNav()
    //
    enableKeyboardNav: function() {
        document.onkeydown = this.keyboardAction;
    },

    //
    //  disableKeyboardNav()
    //
    disableKeyboardNav: function() {
        document.onkeydown = '';
    },

    //
    //  keyboardAction()
    //
    keyboardAction: function(e) {
        if (e == null) { // ie
            keycode = event.keyCode;
        } else { // mozilla
            keycode = e.which;
        }

        key = String.fromCharCode(keycode).toLowerCase();

        if((key == 'x') || (key == 'o') || (key == 'c')){   // close lightbox
            myLightbox.end();
        } else if(key == 'p'){  // display previous image
            if(activeImage != 0){
                myLightbox.disableKeyboardNav();
                myLightbox.changeImage(activeImage - 1);
            }
        } else if(key == 's'){  // display next image
            if(activeImage != (imageArray.length - 1)){
                myLightbox.disableKeyboardNav();
                myLightbox.changeImage(activeImage + 1);
            }
        }
    },

    //
    //  preloadNeighborImages()
    //  Preload previous and next images.
    //
    preloadNeighborImages: function(){
        if((imageArray.length - 1) > activeImage){
            preloadNextImage = new Image();
            preloadNextImage.src = imageArray[activeImage + 1][0];
        }
        if(activeImage > 0){
            preloadPrevImage = new Image();
            preloadPrevImage.src = imageArray[activeImage - 1][0];
        }
    },

    //
    //  end()
    //
    end: function() {
        this.disableKeyboardNav();
        Element.hide('lightbox');
        Element.show('menu');
        var flashs = document.getElementsByClassName('class-flash');
        if( flashs ){
            for( i=0; i<flashs.length; i++ ){
                flashs[i].style.display = 'block';
            }
        }
        new Effect.Fade( 'overlay'+this.color, { duration: 0.2} );
        showSelectBoxes();
    }
}

// -----------------------------------------------------------------------------------

//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScroll(){

    var yScroll;

    if (self.pageYOffset) {
        yScroll = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop){  // Explorer 6 Strict
        yScroll = document.documentElement.scrollTop;
    } else if (document.body) {// all other Explorers
        yScroll = document.body.scrollTop;
    }

    arrayPageScroll = new Array('',yScroll)
    return arrayPageScroll;
}

// -----------------------------------------------------------------------------------

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){

    var xScroll, yScroll;

    if (window.innerHeight && window.scrollMaxY) {
        xScroll = document.body.scrollWidth;
        yScroll = window.innerHeight + window.scrollMaxY;
    } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
        xScroll = document.body.scrollWidth;
        yScroll = document.body.scrollHeight;
    } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
    }

    var windowWidth, windowHeight;
    if (self.innerHeight) { // all except Explorer
        windowWidth = self.innerWidth;
        windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
    }

    // for small pages with total height less then height of the viewport
    if(yScroll < windowHeight){
        pageHeight = windowHeight;
    } else {
        pageHeight = yScroll;
    }

    // for small pages with total width less then width of the viewport
    if(xScroll < windowWidth){
        pageWidth = windowWidth;
    } else {
        pageWidth = xScroll;
    }


    arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
    return arrayPageSize;
}

// -----------------------------------------------------------------------------------

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//
function getKey(e){
    if (e == null) { // ie
        keycode = event.keyCode;
    } else { // mozilla
        keycode = e.which;
    }
    key = String.fromCharCode(keycode).toLowerCase();

    if(key == 'x'){
    }
}

// -----------------------------------------------------------------------------------

//
// listenKey()
//
function listenKey () { document.onkeypress = getKey; }

// ---------------------------------------------------

function showSelectBoxes(){
    selects = document.getElementsByTagName("select");
    for (i = 0; i != selects.length; i++) {
        selects[i].style.visibility = "visible";
    }
}

// ---------------------------------------------------

function hideSelectBoxes(){
    selects = document.getElementsByTagName("select");
    for (i = 0; i != selects.length; i++) {
        selects[i].style.visibility = "hidden";
    }
}

// ---------------------------------------------------

//
// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
//
function pause(numberMillis) {
    var now = new Date();
    var exitTime = now.getTime() + numberMillis;
    while (true) {
        now = new Date();
        if (now.getTime() > exitTime)
            return;
    }
}


/**************************************************/

function popup( url, width, height, color, siteAccess ){
    if( !color ){
        color = 'white';
    }
    
    if( !siteAccess ){
        siteAccess = 'prodigg';
    }
    
    Element.hide('menu');
    
    var flashs = document.getElementsByClassName('class-flash');
    if( flashs ){
        for( i=0; i<flashs.length; i++ ){
            flashs[i].style.display = 'none';
        }
    }
    
    /* FIX pour IE */
    /* Pour IE il faut detruire, s'ils existent, les divs crees, sinon il garde les classes css comme elles etaient*/
    var objBody = document.getElementsByTagName("body").item(0);
    if ( document.getElementById( 'overlay'+color ) != null ) {
        var overlay = document.getElementById( 'overlay'+color );
        objBody.removeChild( overlay );
    }

    if ( document.getElementById( 'lightbox' ) != null ) {
        var lightbox = document.getElementById( 'lightbox' );
        objBody.removeChild( lightbox );
    }

    myLightbox = null;

    /* Fin FIX pour IE */
    if( height == '100%' ){
        var arrayPageSize = getPageSize();
        height = arrayPageSize[1] ;
    }
    
    
    fileBottomNavCloseImage = "/extension/prodigg/design/" + siteAccess + "/images/lb/close.gif";
    myLightbox = new Lightbox( color );
    myLightbox.start( width, height );
    //alert( myLightbox );
    Element.show('loading');

    // Création de l'objet
    var XHR = new XHRConnection();
    // Préparation des variables à envoyer
    XHR.appendData('id','test');

    var script = url;
    //alert(url);
    XHR.sendAndLoad( script, "POST", writePopup );

}

var writePopup = function ( obj ){
    Element.hide('loading');
    document.getElementById('caption').innerHTML = obj.responseText;
}

var writeResultToAddToBasket = function ( obj ){
    Element.hide('loading');
    document.getElementById('caption').innerHTML = obj.responseText;
    document.getElementById( 'imageDataContainerwhite' ).style.width = "620px";
    //tempo = window.setTimeout("closePopup()",2000);
}

function closePopup(){
    Element.hide('lightbox');
    Element.show('menu');
    
    var flashs = document.getElementsByClassName('class-flash');
    if( flashs ){
        for( i=0; i<flashs.length; i++ ){
            flashs[i].style.display = 'block';
        }
    }

    new Effect.Fade( 'overlaywhite', { duration: 0.2} );
    showSelectBoxes();
}

function validPopup( frm, url, inputToSkip ){
    Element.hide('caption');
    Element.hide('menu');
    var flashs = document.getElementsByClassName('class-flash');
    if( flashs ){
        for( i=0; i<flashs.length; i++ ){
            flashs[i].style.display = 'block';
        }
    }
    Element.show('loading');

    var action = url;

    // Création de l'objet
    var XHR = new XHRConnection();

    // Récupération des inputs
    var inputs = frm.elements;
    
    for( i=0; i<inputs.length; i++ ){
        if ( inputToSkip != undefined ) {
            if ( inputs[i].name != inputToSkip ) {
                XHR.appendData( inputs[i].name, inputs[i].value );
            }
        }else{
            XHR.appendData( inputs[i].name, inputs[i].value );
        }
    }

    if( inputToSkip == 'calculer' ){
        XHR.sendAndLoad( action, "POST", writeResultToAddToBasket );
    }else{
        XHR.sendAndLoad( action, "POST", writePopup );
    }
    //XHR.sendAndLoad( action, "POST", writePopup );
    Element.show('caption');
    return false;
}

var win=null;

function NewWindow(mypage,myname,w,h,scroll,pos){

    if(pos=="random"){
        LeftPosition=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;
        TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;
    }
    if(pos=="center"){
        LeftPosition=(screen.width)?(screen.width-w)/2:100;
        TopPosition=(screen.height)?(screen.height-h)/2:100;
    }else if((pos!="center" && pos!="random") || pos==null){
        LeftPosition=0;
        TopPosition=20;
    }
    settings='width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',location=no,directories=no,status=0,menubar=no,toolbar=no,resizable=no';

    win = window.open( mypage, 'name', settings );
}
