//jQuery No Conflict Mode
if (!J) var J = jQuery.noConflict();

//If 2 or more of the same rings are used on the stack they should be displayed twice or more at the MY STACK RINGS section
var mySstackRingsTwice = true;
var removeRing = false;

var ie6 = false;
if (J.browser.msie && parseInt(J.browser.version) <= 6) ie6 = true;

var A = 132;
var B = 131;
var C = 130;
var D = 129;
var E = 128;
var F = 127;
var G = 126;
var H = 125;
var I = 124;
var JJ = 123;
var Z = 137;

var sortableMouseDown = false;
var diamondMouseDown = false;

/*  Cookies Names  */
var mystackrings = 'mystackrings'; //Do not change!
var diamondspos = 'diamondspos'; //Do not change!
var stackringName = 'stackringname'; //Do not change!
var cookiesPath = '/';
var cookiesExpires = 0; //Days
var cookiesSecure = false; //false or true

//var addedRingsIds = new Array();

/*  Slider  */
var slideshowTimer = null;
var sliderScrollSpeed = 80;
var sliderProcess = false;
var mousePressed = false;

/*  Hand Slider  */
var handSteps = 6;
var currentStep = 1;
var handMousePressed = false;

/* Error Builder messages */
/*  Builder messages  */
var errorBuilderMessage = "Sorry these rings cannot go together";
var maxErrorMessage = "You can only add a maximum <br/>of 6 rings to your stack";
var slidingHelpMessage = "<p style='color:black;'>Place your cursor on the centre of the ring to slide the setting left or right.</p>";

var ringsclosed = 0;

J(document).ready(function(){

    J('a[rel=external]').click(function(){
        J(this).attr('target','_blank');
    });

    J('#home_rotator_items').before('<div id="rotator_pager">').cycle({
            fx: 'fade',
            pager: '#rotator_pager',
            speed:  3000,
            timeout: 3000
        });

    if ( J("#content-rotator").length ) {

        J('#content-rotator')
        .after('<div id="rotator-nav" class="rotator-nav">')
        .cycle({
            fx:     'fade',
            speed:  2000,
            timeout: 6000,
            pager:  '#rotator-nav'
        });
    }

    //Homepage overlay
        J('.tile').hover((function(){
                        //console.log('mouse on');
                        var overlayBlocks = J('.tile').find('.dim');
                        //overlayBlocks.show();
                        J('.tile').find('.dim').show();
                        J(this).find('.dim').hide();
                    }), (function(){
                        J('.tile').find('.dim').hide();
                    })
                                  );

    //Emilio: Avoids the non valid ring staying in floating in the stack. (Katie detected this bug)
    if ( J('#rotator').length && J('#rotator li').length > 1 ) {
        if ( !(J(this).find('.stack-error')) ){
            doSlideshow('rotator', true, 6000);
        }
    }

    /*  Send To Friends Form Validator  */
    J('#send-to-friends-form').submit(function(){
        if (J('#error-message').length) {
            J('#error-message').remove();
        }

        var error = false;

        if (J('#stack-ring-array').length && J('#stack-ring-array').val() == '') {
            addErrorMessage('Please Build Your Stack Ring At First!');
            //return false;
            error = true;
        }

        J('#send-to-friends-form .required').each(function(){
            if (J(this).hasClass('email')) {
                var stringEmails = J(this).val();

                while ( stringEmails.search('\n') != -1 || stringEmails.search(' ') != -1 ) {
                    stringEmails = stringEmails.replace('\n','');
                    stringEmails = stringEmails.replace(' ','');
                }

                var emailsArray = stringEmails.split(',');

                if (emailsArray.length > 1) {
                    for (var i =0; i < emailsArray.length; i++) {
                        var emailString = emailsArray[i];
                        if ( !/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(emailString) ) {
                            addErrorMessage('Please input valid email\'s in field <strong>'+J(this).attr('title')+'</strong>');
                            error = true;
                            //return false;
                        }
                    }
                }else {
                    if ( !/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(J(this).val().replace(' ','')) ) {
                        addErrorMessage('Please input valid email in field <strong>'+J(this).attr('title')+'</strong>');
                        error = true;
                        //return false;
                    }
                }
            }else {
                if (J(this).val() == '' || J(this).val() == '&nbsp;') {
                    if (J(this).attr('title') != '') addErrorMessage('Field <strong>'+J(this).attr('title')+'</strong> is required!');
                    else addErrorMessage('Please fill all required fields!');
                    error = true;
                    //return false;
                }
            }
        });

        if (!error) return true;
        return false;
    });


    /*  Preload Rings  */
    J('#sortable1 a').each(function(){
        if (J(this).attr('href') && J(this).attr('href') != '' && J(this).attr('href') != '#')  preloadImage(J(this).attr('href'));
    });


    /*  Preload Hands  */
    if (J('#image-container #image').length) {
        J('#image-container img').each(function(){
            preloadImage(J(this).attr('src'));
        });

    }


    /*  Test Cookies  */
    J.cookie('testcookiesenabled', null);
    J.cookie('testcookiesenabled', 'enabled');
    if (!J.cookie('testcookiesenabled')) {
        addErrorMessage("To use this site, please enable cookies");
    }

    /*  Slider Rings  */
    var countRows = 4;
    var countCols = 4;
    var selector = '#slider';
    sliderInit(selector,countRows,countCols);

    //Stack Builder Form Submit
    J('#stack-category-form').submit(function(){
        J('#ajax-loader').css('display','block');
        var url = J(this).attr('action');
        var dataString = 'current_category_id='+J('#current_category_id').val();
        //alert(url);
        //alert(dataString);
        J.ajax({
           type: "POST",
           url: url,
           data: dataString,
           error: function(XMLHttpRequest, textStatus, errorThrown){

           },
           success: function(msg){
                J('#ajax-products').html(msg);
                J('#ajax-loader').css('display','none');
                /*  Slider Rings  */
                var countRows = 4;
                var countCols = 4;
                var selector = '#slider';
                sliderInit(selector,countRows,countCols);

                dragdropRings();
           }
        });
        return false;
    });



    //Update Cart Total
    J('.update-total').click(function(){
        J.cookie('ajaxcartopened', 1);
        J('#cart_form').submit();
        return false;
    });


    J('.documents .purple-link').click(function(){
            var downloaderUri = J('.documents #doc-form').attr('action') + '?file=';
            var files = '';
            J('.documents #doc-form input:checked').each(function(i){
                files += base64_encode(J(this).val()) + ';';
            });
            if (files != ''){
                window.open(downloaderUri + files, 'pdfdownload');
            }
    });



    J('.list-topics a').click(function(){
        var link = this;
        if (J(J(link).attr('href')).hasClass('hidden')) {
            J(J(link).attr('href')).css('display','none');
            J(J(link).attr('href')).removeClass('hidden');
            J(J(link).attr('href')).slideDown('slow');

        }else {
            J(J(link).attr('href')).slideUp('slow',function(){
                J(J(link).attr('href')).addClass('hidden');
            });
        }
        return false;
    });

    J('.auto-hint').each(function(i, el){
        if(J(this).val() == ''){
            J(this).val(J(this).attr('title'));
        }
        J(el).focus(function(){
            if (J(this).val() == J(this).attr('title')) {
                J(this).val('');
            }
        });
        J(el).blur(function(){
            if (J(this).val() == '') {
                J(this).val(J(this).attr('title'));
            }
        });
    });

    /*  View order panel  */
    J('#basket-slide .close').click(function(){
        J('#basket-slide').slideUp('slow');
        return false;
    });
    J('.view-order-link').click(function(){
        J('#basket-slide').slideDown('slow',function(){
            J('#basket-slide .close').unbind('click');
            J('#basket-slide .close').click(function(){
                J('#basket-slide').slideUp('slow');
                return false;
            });
        });
        return false;
    });

    /*  Slider Feature Boxes  */
    var countRows = 1;
    var countCols = 3;
    var selector = '#slider-feature-box';
    sliderInit(selector,countRows,countCols);

    /*  Article Rrotator  */
    var countRows = 1;
    var countCols = 4;
    var selector = '#article-rotator-slider';
    sliderInit(selector,countRows,countCols);

    /*  Tabs  */
    var url = document.location.toString();
    var anchor = url.split('#');
    if (anchor.length > 1) {
        url = anchor[0];
        anchor = anchor[1];
    }else anchor = false;
    if ( anchor ) {
        anchor = '#'+anchor;
        J('#tabs li.ui-state-active').removeClass('ui-state-active');
        J('#tabs a[href='+anchor+']').parent('').addClass('ui-state-active');
    }

    var selectedTab = J('#tabs li').index(J('#tabs li.ui-state-active'));
    if (selectedTab < 0) selectedTab = 0;
    selectedTab=1;
    if(J('#tabs') && J('#tabs').length) J('#tabs').tabs({ fx: { opacity: 'toggle' }, selected: selectedTab });



    /*  BEGIN: Nand  */
    /*  Nail Colour Changer  */
    if (J('.hand') && J('.hand').length){
        if (ie6) J('.hand IMG').iunfixpng().ifixpng();
        J('#nail-colour a').click(function(){
            var color = J(this).attr("rel");
            J('.hand .nail').each(function(){
                var img = J(this).find('img');
                if (ie6) J(img).iunfixpng();
                var filename = J(img).attr('src').substring(J(img).attr('src').lastIndexOf('/')+1);
                var array = filename.split("-");
                var fingerName = array[0];
                var fingerPath = J(img).attr('src').substring(0,J(img).attr('src').lastIndexOf('/')+1);
                J(img).attr('src',fingerPath+fingerName+'-'+color+'.png');
                if (ie6) J(img).ifixpng();

            });
            J.cookie('mailcolor', color, { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });
            J('#opi-nail-varnish div:visible').addClass('hidden');
            J('#opi-nail-varnish').find('.'+color).removeClass('hidden');
            return false;
        });

        /*  Hand Slider*/
        var selector = '#hand-slider';
        var currentStepInt = J.cookie('handcolor');
        if (currentStepInt){
            changeHand(currentStepInt);
        } else {
            currentStepInt = 1;
        }
        J(selector+' .back').click(function(){
            if (currentStepInt <= 1){
                currentStepInt = handSteps;
            } else {
                currentStepInt--;
            }
            changeHand(currentStepInt);
            J.cookie('handcolor', currentStepInt, { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });
            return false;
        });
        J(selector+' .forward').click(function(){
            if (currentStepInt >= handSteps){
                currentStepInt = 1;
            } else {
                currentStepInt++;
            }
            changeHand(currentStepInt);
            J.cookie('handcolor', currentStepInt, { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });
            return false;
        });

    }
    /*  END: Nand  */
});

function isVisible(obj) { return (obj.css('display') == 'block'); }

function doSlideshow(objid, start, time){

    var currObj = J('#' + objid + ' li.current');



    if(!J('#' + objid) || !isVisible(J('#' + objid))){
        if(slideshowTimer != null){
            clearTimeout(slideshowTimer);
            slideshowTimer = null;
        }
        return;
    }

    if(start){
        clearTimeout(slideshowTimer);
        slideshowTimer = null;
    }


    var nextObj = currObj.next();
    if(J('#' + objid + ' li:last').hasClass('current')){
        nextObj = J('#' + objid + ' li:first');
    }

    nextObj.addClass('current');
    nextObj.css('opacity', 0).css('z-index','2');
    currObj.removeClass('current').css('z-index','1');
    currObj.animate({opacity:0}, 6000);
    nextObj.animate({opacity:1}, 6000);

    slideshowTimer = setTimeout('doSlideshow("' + objid + '", false, ' + time + ');', time);
}

var sliderOffset = 0;
/*  Slider  */
function sliderInit(selector,countRows,countCols) {
    //console.log('sliderInit');

    if (!J(selector).length) return false;
    var minDisplay = countRows*countCols;

    var sliderUL = J(selector).find('ul:first');
    var li = J(sliderUL).children('li');
    var direction = J(selector).children('.direction');
    var linePosition = J(direction).children('.line-position');
    var scroller = J(linePosition).children('.scroller');
    var back = J(direction).children('.back');
    var forward = J(direction).children('.forward');

    var marginRight = parseInt(J(li).css('margin-right'));
    if (!marginRight) marginRight = 0;
    var marginLeft = parseInt(J(li).css('margin-left'));
    if (!marginLeft) marginLeft = 0;
    var paddingLeft = parseInt(J(li).css('padding-left'));
    if (!paddingLeft) paddingLeft = 0;
    var paddingRight = parseInt(J(li).css('padding-right'));
    if (!paddingRight) paddingRight = 0;
    var borderRight = parseInt(J(li).css('border-right-width'));
    if (!borderRight) borderRight = 0;
    var borderLeft = parseInt(J(li).css('border-left-width'));
    if (!borderLeft) borderLeft = 0;
    var liWidth = parseInt(J(li).width())+marginRight+marginLeft+paddingLeft+paddingRight+borderRight+borderLeft+1;
    if (!liWidth) return false;
    var liCount = J(li).length;

    if (!setRows(selector,countRows,minDisplay,liWidth,liCount)) {
        J(direction).css('display','none');
        return false;
    }else {J(direction).css('display','block');}

    J(sliderUL).css('position','relative');

    J(selector).css('overflow','hidden');
    J(selector).css('position','relative');

    var percent = 100/((J(sliderUL).width())/((countCols*liWidth)-sliderOffset));
    var directionStep = (J(linePosition).width()/(100/percent))/((J(sliderUL).width()/liWidth)/(100/percent));
    J(selector+' .direction .line-position span').width(percent+'%');
    J(selector+' .direction .line-position span').css('left','0');

    ///Reset
    J(back).unbind('click');
    J(forward).unbind('click');
    J(selector).unbind('mouseup');
    J(selector+' .direction .line-position span').unbind('mouseup');
    J(direction).unbind('mousemove');

    J(back).click(function(){sliderBack(selector,liWidth,liCount,countRows,countCols,directionStep);return false;});
    J(forward).click(function(){sliderForward(selector,liWidth,liCount,countRows,countCols,directionStep);return false;});

    var startMousePosX = 0;
    var directionStartLeft = 0;
    J(selector).mouseup(function(){mousePressed = false;});
    J(selector+' .direction .line-position span').mouseup(function(){
        mousePressed = false;
    }).mousedown(function(e){
        mousePressed = true;
        startMousePosX = e.pageX;
        directionStartLeft = parseInt(J(selector+' .direction .line-position span').css('left'));
    });

    J(selector+' .direction').mousemove(function(e){
        if (!mousePressed) { return false; }
        var difference = e.pageX - startMousePosX;
        var directionLeft = directionStartLeft+difference;
        var directionMaxLeft = parseInt(J(linePosition).width())-parseInt(J(selector+' .direction .line-position span').width());
        var directionMinLeft = 0;
        if (directionLeft > directionMaxLeft) directionLeft = directionMaxLeft;
        if (directionLeft < directionMinLeft) directionLeft = 0;
        J(selector+' .direction .line-position span').css('left',directionLeft);
        var sliderStep = parseInt(J(sliderUL).width())/parseInt(J(selector+' .direction .line-position').width());
        J(sliderUL).css('left',-directionLeft*sliderStep+sliderOffset);

        //setActive(sliderUL,liWidth);

        return false;
    });
}
function setActive(sliderUL,liWidth){
    var currLeft = parseInt(J(sliderUL).css('left'));
    var currIndex = -1*Math.round((currLeft-sliderOffset+1)/liWidth);
    J(sliderUL).find('li').removeClass('selected');
    var currLi = J(sliderUL).find('li:eq('+currIndex+')');
    J(currLi).attr('class','selected');
}
function setRows(selector,countRows,minDisplay,liWidth,liCount){
    if (liCount <= minDisplay) return false;
    var sliderUL = J(selector).find('ul:first');
    var currLeft = parseInt(J(sliderUL).css('left'));
    sliderOffset = currLeft;
    if (!currLeft) {currLeft = 0; sliderOffset = 0;}
    var countCols = -1*Math.floor(-(liCount/countRows));
    J(sliderUL).width(parseInt(liWidth*countCols)+currLeft);
    J(sliderUL).css('left',currLeft);
    return true;
}
function sliderBack(selector,liWidth,liCount,countRows,countCols,directionStep){
    var sliderUL = J(selector).find('ul:first');
    var left = (parseInt(J(sliderUL).css('left'))*-1)-3*liWidth;
    var minLeft = -sliderOffset;
    if (!sliderOffset) minLeft = 0;
    var directionLeft = parseInt(J(selector+' .direction .line-position span').css('left'))-3*directionStep;
    var directionMinLeft = 0;
    if (sliderProcess) return false;
    if (left < minLeft) {
        left = minLeft;
        directionLeft = directionMinLeft;
    }
    sliderProcess = true;
    J(selector+' .direction .line-position span').animate({left: directionLeft }, sliderScrollSpeed);
    J(sliderUL).animate({left: -left }, sliderScrollSpeed,function(){sliderProcess = false;});//setActive(sliderUL,liWidth);
}
function sliderForward(selector,liWidth,liCount,countRows,countCols,directionStep){

    var sliderUL = J(selector).find('ul:first');
    var left = (parseInt(J(sliderUL).css('left'))*-1)+3*liWidth;
    var maxLeft = J(sliderUL).width() - (countCols*liWidth);
    var directionLeft = parseInt(J(selector+' .direction .line-position span').css('left'))+3*directionStep;
    var directionMaxLeft = parseInt(J(selector+' .direction .line-position').width())-parseInt(J(selector+' .direction .line-position span').width());

    if (sliderProcess) return false;
    if (left > maxLeft) {
        left = maxLeft;
        directionLeft = directionMaxLeft;
    }
    sliderProcess = true;

    J(selector+' .direction .line-position span').animate({left: directionLeft }, sliderScrollSpeed);
    J(sliderUL).animate({left: -left }, sliderScrollSpeed,function(){sliderProcess = false;});//setActive(sliderUL,liWidth);
}

function openRings(list){
    J('#sortable2').removeClass('closed');
    J('#sortable2').addClass('opened');
    J(list).each(function(){
        var li = this;
        if(J(li).attr('id') != "image-position") {
//      console.log(J(li).attr('id'));
        var img = J(li).find('img.image-ring');
        var img_height = img.height();

        img.css('margin-top','');
        img.css('margin-bottom','');
        img.css('z-index','');

        img_height = img_height + 75;
        J(li).css('height', img_height+'px');
        var diamond = J(li).find('.diamond');
        var ring = J(li).find('.image-ring');
        var type = J(li).attr('rel');
/*
        if ((type == H)){
            J(li).css('height', 'auto');
            J(li).css('height', 'auto');
        }
*/
        }
    });
    ringsclosed = 0;
}

function closeRings(list){
    ringsclosed = 1;

    J('#sortable2').removeClass('opened');
    if (!J('#sortable2').hasClass('closed')) J('#sortable2').addClass('closed');
    J(list).each(function(){

        var li = this;
        var diamond = J(li).find('.diamond');
        var ring = J(li).find('.image-ring');

        var type = J(li).attr('rel');
        var top = J(li).prev();
        var bottom = J(li).next();

        var ringOffset = J(ring).offset();
        var ringHeight = J(ring).height();

        var img = J(li).find('img.image-ring');
        var img_height = img.height();
        if (img_height > 38) {
            var margin = -((img_height - 38)*0.5);
        //  img.css('margin-top',margin);
        //  img.css('margin-bottom',margin);
            img.css('z-index','100');
        }

        J(li).css('height', 'auto');

        if (J(diamond).length) {
            var diamondOffset = J(diamond).offset();

            var diamondHeight = J(diamond).height();
            var diamondTop = parseInt(diamondOffset.top);
            var diamondBottom = parseInt(diamondOffset.top)+diamondHeight;

            img.css('margin-left','0');
            J(diamond).css('margin-left','140px');
            //J(diamond).css('margin-top','-35px');
            J(diamond).css('position','absolute');
            J(diamond).css('top','0');
            J(diamond).css('z-index','280');
            J(diamond).css('margin-bottom','0');
            J(li).css('height',img_height);
            J(li).css('margin-bottom','0');
            J(li).css('margin-top','0');

            var margin_height = (img_height-diamondHeight)*0.5;
            J(diamond).css('margin-top',margin_height);
/*
            if (img_height > 50) {
                J(li).css('height','52px');
                J(diamond).css('margin-top','-73px');
            }
            if (img_height > 130) {
                J(li).css('height','52px');
                J(diamond).css('margin-top','-80px');
            }
*/
        }


        if(typeof(J(li).prev()) != 'undefined' && J(li).prev() != null && typeof(J(J(li).prev()).find('.diamond')) != 'undefined' && J(J(li).prev()).find('.diamond') != null)
        {
            if(J(J(J(li).prev()).find('.diamond')).length){var ringTop = parseInt(ringOffset.top)+parseInt((J(J(J(li).prev()).find('.diamond')).height() - ringHeight )/2);}else{var ringTop = parseInt(ringOffset.top);}
        }
        else{var ringTop = parseInt(ringOffset.top);}
        if(typeof(J(li).next()) != 'undefined' && J(li).next() != null && typeof(J(J(li).next()).find('.diamond')) != 'undefined' && J(J(li).next()).find('.diamond') != null )
        {
            if(J(J(J(li).next()).find('.diamond')).length){var ringBottom = parseInt(ringOffset.top) + ringHeight  + parseInt((diamondHeight -ringHeight )/2);} else {var ringBottom = parseInt(ringOffset.top)+ringHeight;}
        }
        else {var ringBottom = parseInt(ringOffset.top)+ringHeight;}
        //if(J(J(J(J(li).prev()).prev()).find('.diamond')).length){var ringTop = ringTop + parseInt(ringOffset.top)+parseInt((J(J(J(li).prev()).find('.diamond')).height() - ringHeight )/2);}else{var ringTop = parseInt(ringOffset.top);}
            J(li).css('position','relative');
            if (J(diamond).length) {
                var offsetTop = ringTop - diamondTop;
                var offsetBottom = diamondBottom - ringBottom ;
                //J(li).css('margin-top',-offsetTop);
                //J(li).css('margin-bottom',-offsetBottom);
            }


/*
        if ((type == H)){
            J(li).css('height', 85);
            J(li).css('height', 85);
        }
*/
        //console.log('Before moveDiamondActivate');
        moveDiamondActivate(this);
    });
}

/*  Drag and Drop Rings  */
function dragdropRings(){
    console.log('dragdropRings');

    var elements = new Array();
    var element = new Array();
    var movedObj = null;
    var ringDetails = null;
    var itemId = null;

    //Close Rings
    J('#close-rings').click(function(){
        //alert("To Close rings...");
        closeRings(J('#sortable2 li'));
        return false;
    });

    //Open Rings
    J('#open-rings').click(function(){
        //alert("To Open rings...");
        J('#sortable2 li').css({'margin':'','position':'','z-index':''});
        openRings(J('#sortable2 li'));
        return false;
    });

    //Restore Name From Cookies
    if (J.cookie(stackringName) && J('#name-your-ring').length) {
        J('#name-your-ring').val(J.cookie(stackringName));
        J('#send-stack-ring-name').val( J('#name-your-ring').val() );
    }

    //Set Stack Ring Name
    J('#name-your-ring').change(function(){
        //Save To Cookies
        J.cookie(stackringName, J('#name-your-ring').val(), { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });
        //Send To Friend From
        if (J('#send-stack-ring-name').length) {
            J('#send-stack-ring-name').val( J('#name-your-ring').val() );
        }
    });

    //Reset
    if (J('#moved-obj').length) J('#moved-obj').remove();
    J("#sortable1 LI").unbind('mousedown');
    J('body').unbind('mousemove');
//  J("#sortable1").width('984px');

    //Restore From Cookies
    var isNeededCookies = true;
    if ( J('#sortable2').length && !J('#sortable2 #ui-state-disabled').length ) {isNeededCookies = false;}
    if (J.cookie(mystackrings) && isNeededCookies) {
        var ids = J.cookie(mystackrings);
        ids = ids.split('|');
        var totalPrice = 0;

        for (var i = 0; i<ids.length;i++) {
            var id = ids[i];
            if ( !window[["product"+id]] ) continue;
            var name = window[["product"+id]]['name'];
            var small_image = window[["product"+id]]['small_image'];
            var thumbnail = window[["product"+id]]['thumbnail'];
            var stack_builder_image = window[["product"+id]]['stack_builder_image'];
            var ringWidth = parseInt(window[["product"+id]]['stack_builder_image_w']);
            var ringHeight = parseInt(window[["product"+id]]['stack_builder_image_h']);
            var stack_builder_diamond = window[["product"+id]]['stack_builder_diamond'];
            var diamondWidth = parseInt(window[["product"+id]]['stack_builder_diamond_w']);
            var diamondHeight = parseInt(window[["product"+id]]['stack_builder_diamond_h']);

            var pricestring = window[["product"+id]]['pricestring'];
            var price = window[["product"+id]]['price'];
            var type = window[["product"+id]]['builder-type'];
            //var pricesign = window[["product"+id]]['pricesign'];

            totalPrice = totalPrice+parseInt(price);
            J('#ui-state-disabled').css('display','none');
            J('body').append(J('#ui-state-disabled'));

            var appendHtml = createRingElement(id);

            J('#sortable2').append(appendHtml);
            if (mySstackRingsTwice) {
                J('#my-stack-rings').append('<li class="ringdetails-'+id+'"><a href="#"><span class="image"><img src="'+thumbnail+'" alt="" /></span><span class="name">'+name+'</span></a></li>');
            }else if ( !J('#my-stack-rings .ringdetails-'+id).length ) {
                J('#my-stack-rings').append('<li class="ringdetails-'+id+'"><a href="#"><span class="image"><img src="'+thumbnail+'" alt="" /></span><span class="name">'+name+'</span></a></li>');
            }



        }

        //Generate Send To Friend Link
        /*if (J('#stack-ring-array').length) {
            J('#stack-ring-array').val(J.cookie(mystackrings));
        }*/

        //Total Price Update
        J('#total-price').html(pricesign+totalPrice);

        //Drag My Stack Restored from Cookies
        if ( !J('#sortable2 #ui-state-disabled').length && J('#sortable1').length ) {
            J('#sortable2 LI:visible').each(function(){
                var itemId = J(this).attr('class');
                itemId = itemId[0];
                element['itemid'] = itemId;
                element['details'] = J('#ringdetails-'+element['itemid']);
                //elements[element['itemid']] = element;

                J(this).unbind('mousedown');
                J(this).mousedown(function(e){
                    console.log('sortable2 mouse down restored from cookies');

                    sortableMouseDown = true;
                    diamondMouseDown = false;
                    J(this).attr('id','moved-obj');

                    //Save Ring Position
                    saveRingPosition(this);

                    J('body').append(this);
                    movedObj = J('#moved-obj');
                    J(movedObj).unbind('mouseup');
                    J(movedObj).mouseup(function(e){
                        console.log('movedObj mouse up restored from cookies');
                        sortableMouseDown = false;
                        element['new'] = 0;
                        movedObjMouseUp(movedObj,e,element);
                        return false;
                    });
                    objMove(movedObj,e,element);
                    return false;
                });

                var ringWidth = parseInt(window[["product"+J(this).attr('class')]]['stack_builder_image_w']);
                var diamondWidth = parseInt(window[["product"+J(this).attr('class')]]['stack_builder_diamond_w']);
                //Move Diamond

                diamondWidth = diamondWidth + 35;
                if(diamondWidth >= ringWidth)
                    {
                    }
                    else
                    {
                        moveDiamondActivate(this);
                    }

            });

        }else {
            J('#sortable2 li').css('cursor','default');
            closeRings(J('#sortable2 li'));


        }
    }

    //Tiggered when user clicks in the left list of rings.
    console.log('sortable1 li:');
    J("#sortable1 LI").mousedown(function(e){

        console.log('sortable1 mouse down from list');

        sortableMouseDown = true;

        itemId = J(this).attr('id').split('-');
        itemId = itemId[itemId.length-1];
        ringDetails = J(this).find('#ring-details-'+itemId);
        element['itemid'] = itemId;
        element['details'] = ringDetails;
        element['new'] = 1;

        //var appendHtml = createRingElement(itemId,'moved-obj');
        //J('body').append(appendHtml);
        if (!J(this).find('#moved-obj-'+itemId).length) return false;
        var appendHtml = J(this).find('#moved-obj-'+itemId).clone();
        J('body').append('<li style="'+J(appendHtml).attr('style')+'" class="'+J(appendHtml).attr('class')+'" rel="'+J(appendHtml).attr('rel')+'" id="moved-obj">'+J(appendHtml).html()+'</li>');

        movedObj = J('#moved-obj');
        // console.log(movedObj);
        J(movedObj).removeClass('hidden');
        //Set Type
        J(movedObj).attr('rel',J(this).attr('class'));
        if (ie6) J(movedObj).find('img').ifixpng();
        J(movedObj).mousedown(function(){
            sortableMouseDown = true;return false;
            console.log('movedObj mouse down from list');
        });
        J('body').unbind('mouseup');
        J('body').mouseup(function(e){
            console.log('body movedObj mouse up from list');
            sortableMouseDown = false;
            movedObjMouseUp(movedObj,e,element);
            return false;
        });
        //Move Diamond
        moveDiamondActivate(movedObj);
        objMove(movedObj,e,element);
        return false;
    });

    J('body').mousemove(function(e){
        moveDiamond(e);
        movedObj = J('#moved-obj');
        if (!J(movedObj).length) return false;
        objMove(movedObj,e,element);
        return false;
    });

    J("#sortable1 li a,#sortable2 li a,#sortable1 li img,#sortable2 li img,#my-stack-rings a").click(function(){return false;});

    //PNG Fix
    if (ie6) J('#sortable1 .ring-thumb, #my-stack-rings').find('img').iunfixpng().ifixpng();
}

function insertImagePositionBefore(li,appendHTML) {
    J(li).before(appendHTML);
}

function insertImagePositionAfter(li,appendHTML) {
    J(li).after(appendHTML);
}

function objMove(movedObj,e,element) {
    if (!sortableMouseDown) return;
//  console.log("objMove");
    ringsclosed = 0;
    J('#sortable2 li').css({'margin':'','position':'','z-index':''});
        openRings(J('#sortable2 li'));
    var cursorTop = e.pageY;
    var cursorLeft = e.pageX;

    J(movedObj).css('position','absolute');
    J(movedObj).css('cursor','pointer');
    J(movedObj).css('left',cursorLeft-(parseInt(J(movedObj).width())/2));
    J(movedObj).css('top',cursorTop-(parseInt(J(movedObj).height())/2));

    var builderOffset = J('#sortable2').offset();
    var builderAreaTop = parseInt(builderOffset.top);
    var builderAreaLeft = parseInt(builderOffset.left);
    var builderAreaWidth = parseInt(J('#sortable2').width());
    var builderAreaHeight = parseInt(J('#sortable2').height());
    var builderAreaRight = builderAreaLeft+builderAreaWidth;
    var builderAreaBottom = builderAreaTop+builderAreaHeight;

    //if ( (cursorLeft > builderAreaLeft && cursorLeft < builderAreaRight) && (cursorTop > builderAreaTop && cursorTop < builderAreaBottom) ) {
        removeRing = true;

        var width = parseInt(J(movedObj).find('img.image-ring').width());
        var height = parseInt(J(movedObj).height());

        var stackError = false;
        while ( stackError = findElementByClassName(J('#sortable2 li'),'stack-error') ) {
            J(stackError).removeClass('stack-error');
        }

        var appendHTML = '<li rel="'+J(movedObj).attr('rel')+'" class="'+J(movedObj).attr('class')+' image-position" id="image-position" style="border: 1px dotted #BDBDBD;width: '+width+'px;height: '+height+'px;margin: auto;"></li>';
        var imagePosition = J('#image-position');
        if (imagePosition) J(imagePosition).remove();
        var countRings = J('#sortable2 li[id!=image-position]').length;
        if (J('#sortable2 #ui-state-disabled').length) countRings--;
        if ( countRings ) { //  If Builder Not Empty
            var lastLi = J('#sortable2 li:last');
            var lastLiOffset = J(lastLi).offset();
            var lastLiTop = parseInt(lastLiOffset.top);
            var lastLiHeight = parseInt(J(lastLi).height());
            var lastLiBottom = lastLiTop+lastLiHeight;
            var firstLi = J('#sortable2 li:first');
            var firstLiOffset = J(firstLi).offset();
            var firstLiTop = parseInt(firstLiOffset.top);
            if ( cursorTop >= lastLiBottom && cursorTop <= builderAreaBottom ) {
                insertImagePositionAfter(lastLi,appendHTML);
            }else if ( cursorTop <= firstLiTop && cursorTop >= builderAreaTop) {
                insertImagePositionBefore(firstLi,appendHTML);
            }else {
                J('#sortable2 LI').each(function(){
                    var offset = J(this).offset();
                    var liTop = parseInt(offset.top);
                    var liHeight = parseInt(J(this).height());
                    var liBottom = liTop+liHeight;
                    var liMiddle = liTop+liHeight/2;
                    if ( cursorTop > liTop && cursorTop < liMiddle ) { //Top Part Of LI
                        if (!J(this).prev().hasClass('image-position') && !J(this).hasClass('image-position')) { insertImagePositionBefore(this,appendHTML); }
                    }else if ( cursorTop > liMiddle && cursorTop < liBottom ) { //Bottom Part Of LI
                        if (!J(this).next().hasClass('image-position') && !J(this).hasClass('image-position')) { insertImagePositionAfter(this,appendHTML); }
                    }
                });
            }
            var imagePosition = J('#image-position');
            var errorProductId = false;
            var errorObj = false;

            //Check All Rings Compatibility
            var errorArray = checkAllRingsCompatibility();

            if (errorArray.length) {
                J(errorArray).each(function(){
                    J(this).addClass('stack-error');
                    J(imagePosition).css('border-color','red');


                });
                stackBuilderError('','',errorBuilderMessage,1);

            }

        }else {
            J('#sortable2').prepend(appendHTML);
            J('#ui-state-disabled').css('display','none');
            J('body').append(J('#ui-state-disabled'));
        }

        var imagePosition = J('#image-position');
        if ( J(imagePosition).length && checkRingTypes(imagePosition) ) {J(imagePosition).css('border-color','red');}
    /*} else {
        var imagePosition = J('#image-position');
        if (removeRing) {
            removeMovedRing(movedObj,element);
            removeRing = false;
            //removeMessage('#builder-area-error-message');
        }

        if (J(imagePosition).length) J(imagePosition).remove();
        J('#sortable2 .stack-error').removeClass('stack-error');
        if ( J('#sortable2 li').length && !J('#sortable2 #ui-state-disabled').length ) {
            J('#ui-state-disabled').css('display','none');
            J('body').append(J('#ui-state-disabled'));
        }else if ( !J('#sortable2 #ui-state-disabled').length ) {
            J('#ui-state-disabled').css({'display':'block','visibility':'visible'});
            J('#sortable2').append(J('#ui-state-disabled'));
        }
    }*/


}

function movedObjMouseUp(movedObj,e,element){
    if (!J(movedObj).length) return false;
    console.log( 'movedObjMouseUp ' + J(movedObj).attr('pos') );
    var builderOffset = J('#sortable2').offset();
    var imagePosition = J('#image-position');
    var errorProductId = false;
    if (J(imagePosition).length) {
        errorProductObj = checkRingTypes(imagePosition);
        if (errorProductObj) errorProductId = J(errorProductObj).attr('class');
    }

    //If Error Ring Position
    if ( errorProductId || J('#sortable2 .stack-error').length) {

        if (!errorProductId) errorProductId = J('#sortable2 .stack-error').attr('class');
        errorProductId = getFirstClass(errorProductId);
        var movedObjId = J(movedObj).attr('class');
        movedObjId = getFirstClass(movedObjId);
        J('#sortable2 .stack-error').removeClass('stack-error');
        stackBuilderError(window[["product"+movedObjId]]['category-name'],window[["product"+errorProductId]]['category-name'],errorBuilderMessage,1);
        errorBuilderMessage = "";
    }

    if ( !errorProductId && (e.pageX > parseInt(builderOffset.left) && e.pageX < (parseInt(builderOffset.left)+parseInt(J('#sortable2').width()))) && (e.pageY > parseInt(builderOffset.top) && e.pageY < (parseInt(builderOffset.top)+parseInt(J('#sortable2').height()))) ) {



        if (element['new']){

            /*if ( !J('#my-stack-rings .ringdetails-'+element['itemid']).length )
                J('#my-stack-rings').append('<li class="ringdetails-'+element['itemid']+'">'+J(element['details']).html()+'</li>');*/
            if (mySstackRingsTwice) {
                J('#my-stack-rings').append('<li class="ringdetails-'+element['itemid']+'">'+J(element['details']).html()+'</li>');
            }else if ( !J('#my-stack-rings .ringdetails-'+element['itemid']).length ) {
                J('#my-stack-rings').append('<li class="ringdetails-'+element['itemid']+'">'+J(element['details']).html()+'</li>');
            }
        }
        var imagePosition = J('#image-position');
        if (J(imagePosition).length) {
            J(imagePosition).css('display','none');
            J(imagePosition).before(movedObj);
            removeRing = false;
        }



        J('#ui-state-disabled').css('display','none');
        J('body').append(J('#ui-state-disabled'));

        if (ie6) J(movedObj).find('img').iunfixpng().ifixpng();

        J(movedObj).unbind('mousedown');
        J(movedObj).mousedown(function(e){

            sortableMouseDown = true;

            //Save Ring Position
            saveRingPosition(this);

            //J(this).removeClass('stack-error');
            J(this).attr('id','moved-obj');
            J('body').append(this);
            if ( !J('#sortable2 li').length ) {
                J('#ui-state-disabled').css({'display':'block','visibility':'visible'});
                J('#sortable2').append(J('#ui-state-disabled'));
            }
            movedObj2 = J('#moved-obj');
            J(movedObj2).unbind('mouseup');

            J(movedObj2).mouseup(function(e){
                sortableMouseDown = false;
                element['new'] = 0;
                movedObjMouseUp(movedObj2,e,element);

                //Move Diamond
                //moveDiamondActivate(this);
                return false;
            });
            objMove(movedObj2,e,element);

            //Move Diamond
            moveDiamondActivate(this);
            return false;
        });

        var imagePosition = J('#image-position');
        if (J(imagePosition).length) J(imagePosition).remove();

    } else {
        removeRing = false;

        var imagePosition = J('#image-position');
        if (J(imagePosition).length) J(imagePosition).remove();

        J(movedObj).attr('id','');
        if (J(movedObj).attr('pos') >= 0 && !element['new'] && errorProductId) {
             var builderOffset = J('#sortable2').offset();
            var builderAreaTop = parseInt(builderOffset.top);
            var builderAreaLeft = parseInt(builderOffset.left);
            var builderAreaWidth = parseInt(J('#sortable2').width());
            var builderAreaHeight = parseInt(J('#sortable2').height());
            var builderAreaRight = builderAreaLeft+builderAreaWidth;
            var builderAreaBottom = builderAreaTop+builderAreaHeight;
            if ( (e.pageX < builderAreaLeft || e.pageX > builderAreaRight) || (e.pageY < builderAreaTop || e.pageY > builderAreaBottom) )
            {
                if (!element['new']){
                var movedObjId = J(movedObj).attr('class');
                movedObjId = getFirstClass(movedObjId);
                if (mySstackRingsTwice) {
                    J('.ringdetails-'+movedObjId+":first").remove();
                }else if ( !J('#sortable2 .'+movedObjId).length ) {
                    J('.ringdetails-'+movedObjId+":first").remove();
                }
                    }

                    J(movedObj).fadeOut(500,function(){
                        J(movedObj).remove();
                        //If No Rings in Builder Area
                        if (!J('#sortable2 LI').length) {
                            J('#ui-state-disabled').css({'display':'block','visibility':'visible'});
                            J('#sortable2').append(J('#ui-state-disabled'));
                        }
                    });
            J('#sortable2 li[class!=ui-state-disabled]').each(function(){

            //if (J(this).length && J(this).attr('class') != 'ui-state-disabled') {
                var errorProductObj = checkRingTypes(this);
                if (errorProductObj) {
                    var errorProductId = getFirstClass(J(errorProductObj).attr('class'));

                    //Remove First Ring From MY STACK RINGS Section

                    if ( !J('#sortable2 .'+errorProductId).length ) J('.ringdetails-'+errorProductId+":first").remove();
                    stackBuilderError(window[["product"+J(this).attr('class')]]['category-name'],window[["product"+errorProductId]]['category-name'],0);
                    J(this).fadeOut(500,function(){J(this).remove();});
                    updateBuilderRings();
                }
            //}
        });
                J('#sortable2 li').css('position','');
                J('#sortable2 li').css('left','');
                J('#sortable2 li').css('top','');
                J('#sortable2 li[rel='+B+']').css('position','relative');
                J('#sortable2 #moved-obj').removeAttr('id');
                updateBuilderRings();
            }
            else
            {
                moveRingToPreviousPosition(movedObj);
            }
            //Move Ring To Previous Position

        }else{
            //If Not New Ring - Delete Ring From "My Stack Rings"
            if (!element['new']){
                var movedObjId = J(movedObj).attr('class');
                movedObjId = getFirstClass(movedObjId);
                if (mySstackRingsTwice) {
                    J('.ringdetails-'+movedObjId+":first").remove();
                }else if ( !J('#sortable2 .'+movedObjId).length ) {
                    J('.ringdetails-'+movedObjId+":first").remove();
                }
            }

            J(movedObj).fadeOut(500,function(){
                J(movedObj).remove();
                //If No Rings in Builder Area
                if (!J('#sortable2 LI').length) {
                    J('#ui-state-disabled').css({'display':'block','visibility':'visible'});
                    J('#sortable2').append(J('#ui-state-disabled'));
                }
            });
        }

        //Remove not compatibility Rings after remove ring
        J('#sortable2 li[class!=ui-state-disabled]').each(function(){

            //if (J(this).length && J(this).attr('class') != 'ui-state-disabled') {
                var errorProductObj = checkRingTypes(this);
                if (errorProductObj) {
                    var errorProductId = getFirstClass(J(errorProductObj).attr('class'));

                    //Remove First Ring From MY STACK RINGS Section

                    if ( !J('#sortable2 .'+errorProductId).length ) J('.ringdetails-'+errorProductId+":first").remove();
                    stackBuilderError(window[["product"+J(this).attr('class')]]['category-name'],window[["product"+errorProductId]]['category-name'],0);
                    J(this).fadeOut(500,function(){J(this).remove();});
                    updateBuilderRings();
                }
            //}
        });
    }

    J('#sortable2 li').css('position','');
    J('#sortable2 li').css('left','');
    J('#sortable2 li').css('top','');
    J('#sortable2 li[rel='+B+']').css('position','relative');
    J('#sortable2 #moved-obj').removeAttr('id');





    updateBuilderRings();


    //Fix PNG
    if (ie6) J('#my-stack-rings').find('img').iunfixpng().ifixpng();
}

function removeMovedRing(movedObj,element){
    if (!J(movedObj).length) return;

    //Remove Ring From "My Stack Rings"
    //console.log( !element['new'] && !J(movedObj).hasClass('removed') );
    if ( !J(movedObj).hasClass('removed')){
        var movedObjId = J(movedObj).attr('class');
        movedObjId = getFirstClass(movedObjId);
        if (mySstackRingsTwice) {
            //console.log(J('.ringdetails-'+movedObjId+":first"));
            J('.ringdetails-'+movedObjId+":first").remove();
        }else if ( !J('#sortable2 .'+movedObjId).length ) {
            J('.ringdetails-'+movedObjId+":first").remove();
        }
    }

    //Remove Ring
    J(movedObj).addClass('removed');
    J(movedObj).remove();
    //Show Default Message when no Rings in Builder Area
    if (!J('#sortable2 LI').length) {
        J('#ui-state-disabled').css({'display':'block','visibility':'visible'});
        J('#sortable2').append(J('#ui-state-disabled'));
    }
    saveRingsToCookies();

}


function updateBuilderRings(){
    var totalPrice = 0;

    saveRingsToCookies();

    J('#sortable2 li').each(function(i,el){
        if (J(el).length && J(el).attr('id') != 'ui-state-disabled' && !J(el).hasClass('image-position') && !J(el).hasClass('stack-error')) {
            var elClass = getFirstClass(J(el).attr('class'));
            var price = window[["product"+elClass]]['price'];
            totalPrice = totalPrice+parseInt(price);
        }
    });

    //Total Price Update
    J('#total-price').html(pricesign+totalPrice);
}

function saveRingsToCookies(){
    var ids = '';
    var first = true;
    var positions = new Array();
    J('#sortable2 li').each(function(i,el){
        if (J(el).length && J(el).attr('id') != 'ui-state-disabled' && !J(el).hasClass('image-position') && !J(el).hasClass('stack-error')) {
            var elClass = getFirstClass(J(el).attr('class'));
            var elType = J(el).attr('rel');
            var diamond = J(el).find('.diamond');
            if (!first) { ids += '|'; }
            ids += elClass;

            //Get Top/Bottom Diamod Offset
            var ring = J(el).find('.image-ring');

            //var type = J(li).attr('rel');
            var top = J(el).prev();
            var bottom = J(el).next();

            var ringOffset = J(ring).offset();
            var ringHeight = J(ring).height();

            var ringTop = parseInt(ringOffset.top);
            var ringBottom = parseInt(ringOffset.top)+ringHeight;
            if ( J(diamond).length) { //((elType == B) || (elType == D) || (elType == J)) &&
                var diamondOffset = J(diamond).offset();
                var diamondHeight = J(diamond).height();
                var diamondTop = parseInt(diamondOffset.top);
                var diamondBottom = parseInt(diamondOffset.top)+diamondHeight;
                var offsetTop = ringTop - diamondTop;
                var offsetBottom = diamondBottom - ringBottom;

                if (positions != '') positions += '|';
                //alert(elClass+ ' ' +i+ ' ' +J(diamond).css('left'));
                positions += 'id:'+elClass+i+';left:'+parseInt(J(diamond).css('left'))+';top:'+offsetTop+';bottom:'+offsetBottom;
            }

            first = false;
        }
    });

    //Save To Cookies
    J.cookie(mystackrings, ids, { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });
    J.cookie(diamondspos, positions, { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });

    var aredimonds = 0;
    var diamondstest = J.cookie(diamondspos);


        var diamonds = new Array();
            if(typeof(diamondstest) != 'undefined' && diamondstest != null)
            {
                var positions = diamondstest.split('|');
                for (var i = 0; i < positions.length; i++) {
                    var element = positions[i].split(';');
                    diamonds[i] = new Array();
                    for (var j = 0; j < element.length; j++) {
                        var attributes = element[j].split(':');
                        diamonds[i][attributes[0]] = attributes[1];
                    }
                }
                var idcurent = 0;
                var ringWidth =0;
                var diamondWidth = 0;
                for(var k in diamonds)
                {

                    if(typeof(diamonds[k]['id']) != 'undefined' && diamonds[k]['id'] != null)
                    {
                            idcurent = diamonds[k]['id'].slice(0,3);
                            ringWidth = parseInt(window[["product"+idcurent]]['stack_builder_image_w']);
                            diamondWidth = parseInt(window[["product"+idcurent]]['stack_builder_diamond_w']);
                            if((diamondWidth) < (ringWidth-30)) {aredimonds =1;}

                    }
                }
            }
    //console.log(aredimonds);
    /*if(diamondstest.indexOf("|") == -1)
    {
          if (diamondstest == "" && diamondstest != null && diamondstest != 'undefined')
          {
            aredimonds = 0;
          }
          else
          {
            aredimonds = 1;
          }
    }
    else
    {
        aredimonds = 1;
    }*/
    //console.log(aredimonds);
    if(aredimonds == 0)
    {
        removeMessage(0);
    }
    else
    {
        stackBuilderError(null,null,slidingHelpMessage,1);
    }
    var positions = J.cookie(mystackrings);
    positions = positions.split('|');
    if(positions.length < 6)
    {
        removeMessage(1);
    }
    if(J('#builder-area-error-message').html() == '<p>Sorry these rings cannot go together</p>')
        {
            J('#builder-area-error-message').fadeOut('slow');
        }

//   This breaks drag and drop in IE!
//   reloadmystakrings();

}
function saveRingsToCookiesSeparate(){
    var ids = '';
    var first = true;
    var positions = new Array();
    J('#sortable2 li').each(function(i,el){
        if (J(el).length && J(el).attr('id') != 'ui-state-disabled' && !J(el).hasClass('image-position') && !J(el).hasClass('stack-error')) {
            var elClass = getFirstClass(J(el).attr('class'));
            var elType = J(el).attr('rel');
            var diamond = J(el).find('.diamond');
            if (!first) { ids += '|'; }
            ids += elClass;

            //Get Top/Bottom Diamod Offset
            var ring = J(el).find('.image-ring');

            //var type = J(li).attr('rel');
            var top = J(el).prev();
            var bottom = J(el).next();

            var ringOffset = J(ring).offset();
            var ringHeight = J(ring).height();

            var ringTop = parseInt(ringOffset.top);
            var ringBottom = parseInt(ringOffset.top)+ringHeight;
            if ( J(diamond).length) { //((elType == B) || (elType == D) || (elType == J)) &&
                var diamondOffset = J(diamond).offset();
                var diamondHeight = J(diamond).height();
                var diamondTop = parseInt(diamondOffset.top);
                var diamondBottom = parseInt(diamondOffset.top)+diamondHeight;
                var offsetTop = ringTop - diamondTop;
                var offsetBottom = diamondBottom - ringBottom;

                if (positions != '') positions += '|';
                //alert(elClass+ ' ' +i+ ' ' +J(diamond).css('left'));
                positions += 'id:'+elClass+i+';left:'+parseInt(J(diamond).css('left'))+';top:'+offsetTop+';bottom:'+offsetBottom;
            }

            first = false;
        }
    });

    //Save To Cookies
    J.cookie(mystackrings, ids, { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });
    J.cookie(diamondspos, positions, { expires: cookiesExpires, path: cookiesPath, secure: cookiesSecure });

}
/*

Stack Builder Type Codes

A   A can go next to anything
Z   Z can only go next to A
B   you must have 2As inbetween 2Bs
B   B can go next to A, C, D, Z
B   you must have 2As between B and E
B   you must have 2As between B and F
B   you must have 2As between B and G
C   C can go next to anything apart from Z
D   D can go next to A, B, C, F
D   D cannot go next D, E, G, Z
E   E can go next to A, C
E   E cant go next to B, D, F, Z
E   E can only go next to G if A sits inbetween
F   F can go next to A, C, D
F   a maximum of 2Fs can go next to each other
F   F cannot go next to B, E, G, Z
G   G can go next to A, C
G   G cant go next to B, D, F, Z
G   G can only go next to E if A sits inbetween

positionObj - image-position - Position Of Checked Ring
*/
function checkRingTypes(positionObj){
    if (!J(positionObj).length) return false;
    //console.log(positionObj);
    var id = J(positionObj).attr('class');

    if (!id) return false;
    id = getFirstClass(id);

    var name = window[["product"+id]]['name'];
    var small_image = window[["product"+id]]['small_image'];
    var stack_builder_image = window[["product"+id]]['stack_builder_image'];
    var pricestring = window[["product"+id]]['pricestring'];
    var price = window[["product"+id]]['price'];
    var type = window[["product"+id]]['builder-type'];
    var catName = window[["product"+id]]['category-name'];

    var noas = 0;
    var topObj = 0;
    var top = 0;
    var topId = 0;
    var topPrev = 0;
    var topPrevId = 0;
    var topPrevPrev = 0;
    var topPrevPrevId = 0;
    var topPrevPrevPrev = 0;
    var topPrevPrevPrevId = 0;
    var topPrevPrevPrevPrev = 0;
    var topPrevPrevPrevPrevId = 0;
    var bottomObj = 0;
    var bottom = 0;
    var bottomId = 0;
    var bottomNext = 0;
    var bottomNextId = 0;
    var bottomNextNext = 0;
    var bottomNextNextId = 0;
    var bottomNextNextNext = 0;
    var bottomNextNextNextId = 0;
    var bottomNextNextNextNext = 0;
    var bottomNextNextNextNextId = 0;

    if ( J(positionObj).prev().length ) {
        topObj = J(positionObj).prev();
        top = topObj.attr('rel');
        topId = topObj.attr('class');
        topId = getFirstClass(topId);

        if ( top && J(positionObj).prev().prev().length ) {
            topPrev = J(positionObj).prev().prev().attr('rel');
            topPrevId = J(positionObj).prev().prev().attr('class');
            topPrevId = getFirstClass(topPrevId);
            if ( topPrev && J(positionObj).prev().prev().prev().length ) {
                topPrevPrev = J(positionObj).prev().prev().prev().attr('rel');
                topPrevPrevId = J(positionObj).prev().prev().prev().attr('class');
                topPrevPrevId = getFirstClass(topPrevPrevId);

                if ( topPrevPrev && J(positionObj).prev().prev().prev().prev().length ) {
                    topPrevPrevPrev = J(positionObj).prev().prev().prev().prev().attr('rel');
                    topPrevPrevPrevId = J(positionObj).prev().prev().prev().prev().attr('class');
                    topPrevPrevPrevId = getFirstClass(topPrevPrevPrevId);
                    if ( topPrevPrevPrev && J(positionObj).prev().prev().prev().prev().prev().length ) {
                        topPrevPrevPrevPrev = J(positionObj).prev().prev().prev().prev().prev().attr('rel');
                        topPrevPrevPrevPrevId = J(positionObj).prev().prev().prev().prev().prev().attr('class');
                        topPrevPrevPrevPrevId = getFirstClass(topPrevPrevPrevPrevId);
                    }
                }
            }
        }
    }

    if ( J(positionObj).next().length ) {
        bottomObj = J(positionObj).next();
        bottom = bottomObj.attr('rel');
        bottomId = bottomObj.attr('class');
        bottomId = getFirstClass(bottomId);
        if ( bottom && J(positionObj).next().next().length ) {
            bottomNext = J(positionObj).next().next().attr('rel');
            bottomNextId = J(positionObj).next().next().attr('class');
            bottomNextId = getFirstClass(bottomNextId);
            if ( bottomNext && J(positionObj).next().next().next().length ) {
                bottomNextNext = J(positionObj).next().next().next().attr('rel');
                bottomNextNextId = J(positionObj).next().next().next().attr('class');
                bottomNextNextId = getFirstClass(bottomNextNextId);

                if ( bottomNextNext && J(positionObj).next().next().next().next().length ) {
                    bottomNextNextNext = J(positionObj).next().next().next().next().attr('rel');
                    bottomNextNextNextId = J(positionObj).next().next().next().next().attr('class');
                    bottomNextNextNextId = getFirstClass(bottomNextNextNextId);
                    if ( bottomNextNextNext && J(positionObj).next().next().next().next().next().length ) {
                        bottomNextNextNextNext = J(positionObj).next().next().next().next().next().attr('rel');
                        bottomNextNextNextNextId = J(positionObj).next().next().next().next().next().attr('class');
                        bottomNextNextNextNextId = getFirstClass(bottomNextNextNextNextId);
                    }
                }
            }
        }
    }

    var productId = false;



    var numRings = 1;

    objAuxiliar = J(positionObj);
    while (objAuxiliar.prev().length){
        objAuxiliar = objAuxiliar.prev();
        numRings++;
    }

    objAuxiliar = J(positionObj);
    while (objAuxiliar.next().length){
        objAuxiliar = objAuxiliar.next();
        numRings++;
    }

    if (numRings >= 7){
        errorBuilderMessage = "You can only add a maximum <br/>of 6 rings to your stack";
        if (topId){
            //return topId;
            return topObj;
        }else{
            //return bottomId;
            return bottomObj;
        }
    }

    if(top == A) { noas++; }
    if(topPrev == A) { noas++; }
    if(topPrevPrev == A) { noas++; }
    if(topPrevPrevPrev == A) { noas++; }
    if(topPrevPrevPrevPrev == A) { noas++; }

    switch(type){
        case A:
            break;
        case B:
            //you must have 2As inbetween 2Bs
            //you must have 2As between B and E
            //you must have 2As between B and F
            //you must have 2As between B and G
            if (topPrevPrev && (topPrevPrev == B || topPrevPrev == E || topPrevPrev == F || topPrevPrev == G)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNext && (bottomNextNext == B || bottomNextNext == E || bottomNextNext == F || bottomNextNext == G)) {
                if (noas < 2) { productId = topObj; break; }
            }

            if (topPrevPrevPrev && (topPrevPrevPrev == B || topPrevPrevPrev == E || topPrevPrevPrev == F || topPrevPrevPrev == G)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNext && (bottomNextNextNext == B || bottomNextNextNext == E || bottomNextNextNext == F || bottomNextNextNext == G)) {
                if (noas < 2) { productId = topObj; break; }
            }

            if (topPrevPrevPrevPrev && (topPrevPrevPrevPrev == B || topPrevPrevPrevPrev == E || topPrevPrevPrevPrev == F || topPrevPrevPrevPrev == G)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNextNext && (bottomNextNextNextNext == B || bottomNextNextNextNext == E || bottomNextNextNextNext == F || bottomNextNextNextNext == G)) {
                if (noas < 2) { productId = topObj; break; }
            }

            if (topPrev && (topPrev == B || topPrev == E || topPrev == F || topPrev == G)) { productId = topObj; break; }
            if (bottomNext && (bottomNext == B || bottomNext == E || bottomNext == F || bottomNext == G)) { productId = topObj; break; }
            //B can go next to A, C, D, Z
            if (top && top != A && top != C && top != D) { productId = topObj; break; }
            if (bottom && bottom != A && bottom != C && bottom != D) { productId = topObj; break; }
            break;
        case C:
            //C can go next to anything apart from Z
            if ( top && top == Z ) { productId = topObj;break; }
            if ( bottom && bottom == Z ) { productId = topObj;break; }
            break;
        case D:
            //D can go next to A, B, C, F
            if ( top && top != A && top != B && top != C && top != F) {productId = topObj; break;}
            if ( bottom && bottom != A && bottom != B && bottom != C && bottom != F) {productId = topObj; break;}
            break;
        case E:
            //E can only go next to G if A sits inbetween
            if (topPrev && topPrev == G && top != A) { productId = topObj; break; }
            if (bottomNext && bottomNext == G && bottom != A) { productId = topObj; break; }
            //E can go next to A, C
            if ( top && top != A && top != C ) { productId = topObj; break; }
            if ( bottom && bottom != A && bottom != C ) { productId = topObj; break; }
            //E cant go +1 next to B
            if ( topPrev && (topPrev == B) ) { productId = topObj; break; }
            if ( bottomNext && (bottomNext == B) ) { productId = topObj; break; }
            //you must have 2As between B and E
            if (topPrevPrev && (topPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (topPrevPrevPrev && (topPrevPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (topPrevPrevPrevPrev && (topPrevPrevPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }

            if (bottomNextNext && (bottomNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNext && (bottomNextNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNextNext && (bottomNextNextNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }

            if ( topPrev && (topPrev == E) ) {
                if (top && top != A && top != C && top != F) { productId = topObj; break; }
            }
            if ( bottomNext && (bottomNext == E) ) {
                if (bottom && bottom != A && bottom != C && bottom != F) { productId = topObj; break; }
            }
            break;
        case F:
            //F can go next to A, C, D
            if ( top && top != A && top != C && top != D && top != F) { productId = topObj; break; }
            if ( bottom && bottom != A && bottom != C && bottom != D && bottom != F) { productId = topObj; break; }
            //a maximum of 2Fs can go next to each other
            if (topPrev && topPrev == F && top && top == F ) { productId = topObj; break; }
            if (bottomNext && bottomNext == F && bottom && bottom == F) { productId = topObj; break; }
            //F cant go +1 next to B
            if ( topPrev && (topPrev == B) ) { productId = topObj; break; }
            if ( bottomNext && (bottomNext == B) ) { productId = topObj; break; }
            //you must have 2As between B and F
            if (topPrevPrev && (topPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (topPrevPrevPrev && (topPrevPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (topPrevPrevPrevPrev && (topPrevPrevPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }

            if (bottomNextNext && (bottomNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNext && (bottomNextNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNextNext && (bottomNextNextNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            break;
        case G:
            //G can only go next to E if A sits inbetween
            if (topPrev && topPrev == E && top != A) { productId = topObj; break; }
            if (bottomNext && bottomNext == E && bottom != A) { productId = topObj; break; }
            //G can go next to A, C
            if ( top && (top != A && top != C) ) { productId = topObj; break; }
            if ( bottom && (bottom != A && bottom != C) ) { productId = topObj; break; }
            //G cant go +1 next to B
            if ( topPrev && (topPrev == B) ) { productId = topObj; break; }
            if ( bottomNext && (bottomNext == B) ) { productId = topObj; break; }
            //you must have 2As between B and G
            if (topPrevPrev && (topPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (topPrevPrevPrev && (topPrevPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (topPrevPrevPrevPrev && (topPrevPrevPrevPrev == B)) {
                if (noas < 2) { productId = topObj; break; }
            }

            if (bottomNextNext && (bottomNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNext && (bottomNextNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            if (bottomNextNextNextNext && (bottomNextNextNextNext == B)) {
                if (noas < 2) { productId = topObj; break; }
            }
            break;
        /*
        case H:
            if ( top && (top != H) ) { productId = topObj; break; }
            //if ( bottom && (bottom != H) ) { productId = bottomId; break; }
            break;

        case I:
            if ( top && (top == B) ) { productId = topObj; break; }
            //if ( bottom && (bottom == B) ) { productId = bottomId; break; }
            break;
        case JJ:

            if ( top && (top != JJ && top != I) ) { productId = topObj; break; }
            if ( bottom && (bottom != JJ && bottom != I) ) { productId = bottomId; break; }

            //Max 2 JJs side by side
            if ( top && top == JJ && bottom && bottom == JJ ) {productId = bottomId; break;}

            if ( topPrev && top && topPrev == JJ && top == JJ && bottom && bottom == JJ ) { productId = topPrevId; break; }
            if ( bottomNext && bottom && bottomNext == JJ && bottom == JJ && top && top == JJ ) { productId = bottomNextId; break; }
            if ( topPrev && top && topPrev == I && top == I && bottom && bottom == I ) { productId = topPrevId; break; }
            if ( bottomNext && bottom && bottomNext == I && bottom == I && top && top == I ) { productId = bottomNextId; break; }
            break;
        */
        case Z:
            //Z can only go next to A
            if (top && top != A) {productId = topObj; break;}
            if (bottom && bottom != A ) {productId = topObj; break;}
            break;
        default:
          productId = false;
    }

    if (productId) {
        //return productId;
        return positionObj;
    }else return false;
}
function stackBuilderError(category1,category2,errorMessage,timeout){
    if (!errorMessage || errorMessage == ""){errorMessage = "Sorry these rings cannot go together";}
    //Message error simplified for user.
    J('#builder-area-error-message').html('<p>'+errorMessage+'</p>');
    J('#builder-area-error-message').slideDown(function(){
        if(timeout  == 0)
        {
            setTimeout("J('#builder-area-error-message').fadeOut('slow');",5000);
        }

    });


}

//removeMessage('#builder-area-error-message');
function removeMessage(reason) {
    if (!J('#builder-area-error-message').length) return;
    switch(reason){
        case 0:
    /*  if(J('#builder-area-error-message').html() == '<p style="color:black;">Place your cursor on the centre of the ring to slide the setting left or right.</p>')
        {*/
            J('#builder-area-error-message').fadeOut('slow');
        //}
        break;
        case 1:

        if(J('#builder-area-error-message').html() == '<p>You can only add a maximum <br/>of 6 rings to your stack</p>')
        {
            J('#builder-area-error-message').fadeOut('slow');
        }
        break;
        default:
            break;
    }


}
/*  handSlider  */
function changeHand(currentStep){
    J('#image').attr('src',J('#image-container .hand-'+currentStep).attr('src'));
}

function base64_encode(data){

    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';

    do {
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);

        bits = o1<<16 | o2<<8 | o3;

        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;

        enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);

    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }
    return enc;
}

function initWorkForm(){
    J('#work-with-us').submit(function(){
        var form = J(this);
        var formData = J(this).serialize();
        var error = '';
        J('#error').hide();
        J.ajax({
            type: 'POST', url: form.attr('action'), data: formData,
            success: function ( responseData ){
                if((error = Process(responseData)) != ''){
                    J('#error').html(error);
                    J('#error').css('color','red');
                    J('#error').show();
                } else{
                    document.getElementById('work-with-us').reset();
                    J('#error').html('Thank You');
                    J('#error').show();
                    J('#error').css('color','green');
                    J('#upload-file input, #upload-file label').show();
                    J('#upload-file p#ajax-loader').hide();
                    setTimeout('J("#error").hide();', 5000);
                }
            }
        });

        return false;
    });
}

function Process(str){
    list = str.split(':');
    if(list[0].toLowerCase() != 'done'){
        return list[1];
    } else {
        return '';
    }
}

/*  Preload Images  */
function preloadImage(src){
    var img = new Image();
    J(img).load(function () {
        //J(document).find('body').append('<img src="'+src+'" alt="" />');
        //console.log('loaded: '+src);
    }).error(function () {
        //addErrorMessage('Error Loading Image: '+src);
    }).attr('src', src);
}

/*  Messages  */
function addErrorMessage(msg) {
    J('.content').prepend('<div class="container" style="display: none;" id="error-message"><p>'+msg+'</p></div>');
    J('#error-message').slideDown();
}
function addWarningMessage(msg) {
    J('.content').prepend('<div class="container" style="display: none;" id="warning-message"><p>'+msg+'</p></div>');
    J('#warning-message').slideDown();
}
function addSuccessMessage(msg) {
    J('.content').prepend('<div class="container" style="display: none;" id="success-message"><p>'+msg+'</p></div>');
    J('#success-message').slideDown();
}

function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}
function getFirstClass(fullClassName) {
    fullClassName = fullClassName.split(' ');
    return fullClassName[0];
}

//Need If Element Has Multiple Classes
function findElementByClassName(elementList,niddleClassName){
    var result = false;
    if (elementList) {
        J(elementList).each(function(){
            if (J(this).hasClass(niddleClassName)) result = this;
        });
    }
    return result;
}

//Create Ring Element
//Return HTML <li><img alt="" src="..." /></li>
var counter = 0;
function createRingElement(id,liId){

    if ( !window[["product"+id]] ) return false;
    if (liId) liId = 'id="'+liId+'"';
    else liId = '';
    var itemNum = J("#sortable2 li[rel="+B+"]").length;
    J("#sortable2 li[rel="+B+"]").each(function(){
        if (!J(this).find('.diamond').length) itemNum--;
    });
    if (!itemNum) itemNum = 0;

    var name = window[["product"+id]]['name'];
    var small_image = window[["product"+id]]['small_image'];
    var thumbnail = window[["product"+id]]['thumbnail'];
    var stack_builder_image = window[["product"+id]]['stack_builder_image'];
    var ringWidth = parseInt(window[["product"+id]]['stack_builder_image_w']);
    var ringHeight = parseInt(window[["product"+id]]['stack_builder_image_h']);
    var stack_builder_diamond = window[["product"+id]]['stack_builder_diamond'];
    var diamondWidth = parseInt(window[["product"+id]]['stack_builder_diamond_w']);
    var diamondHeight = parseInt(window[["product"+id]]['stack_builder_diamond_h']);
    //console.log(id);
    var pricestring = window[["product"+id]]['pricestring'];
    var price = window[["product"+id]]['price'];
    var type = window[["product"+id]]['builder-type'];

    var diamondHtml = '';
    var ringMarginLeft = 5;
    var liHeight = 'auto';

    if (stack_builder_diamond) {
        var marginBottom = Math.round(diamondHeight/2-ringHeight/2);
        var marginLeft = Math.round(diamondWidth/2+ringWidth/2);
        var diamondLeft = 0;

        //Emilio: Testing marings
        //Also change function getRingMarginLeft in app/design/frontend/daisy/daisy/template/stackbuilder/includes/functions.php
        if (diamondWidth > 0){
            if ((type==A)||(type==B)|| (type==C) ||(type==Z) ||(type==F)|| (type==G) || (type==E)  || (type==I) || (type==D) || (type==H))
            {
            if ((diamondWidth >=20) && (diamondWidth <= 247))
            {
                    ringMarginLeft = parseInt(((240 - diamondWidth)/2)+5);
            }else if ((diamondWidth >=248) && (diamondWidth <= 260)){
                    ringMarginLeft = 0;
            }else{
                    ringMarginLeft = 200;
            }
            }
            /*
            if(diamondWidth>ringWidth)
            {
                ringMarginLeft = 0;
            }else
            {
            //ringMarginLeft = diamondWidth+20;
            if (type == B){
                    if (diamondWidth >= 210){
                        ringMarginLeft = 10;
                    }else if ((diamondWidth <= 170) && (diamondWidth >= 150)){
                        ringMarginLeft = 40;
                    }else if ((diamondWidth <= 149) && (diamondWidth >= 130)){
                        ringMarginLeft = 51;
                    }else if ((diamondWidth <= 98) && (diamondWidth >= 89)){
                        ringMarginLeft = 70;
                    }else if ((diamondWidth <= 86) && ((diamondWidth >= 71))){
                        ringMarginLeft = 80;
                    }else if ((diamondWidth <= 68) && ((diamondWidth >= 60))){ //Experimental range
                        ringMarginLeft = 90;
                    }else{
                        ringMarginLeft = 60;
                    }
            }else if ((type==A)|| (type==C) ||(type==Z) ||(type==F)|| (type==G) || (type==E)  || (type==I) || (type==D) || (type==H)){
                if (diamondWidth >= 210){
                    ringMarginLeft = 10;
                }else if((diamondWidth <= 209) && (diamondWidth >= 171)){
                    ringMarginLeft = 0;
                }else if ((diamondWidth <= 170) && (diamondWidth >= 150)){
                    ringMarginLeft = 40;
                }else if ((diamondWidth <= 149) && (diamondWidth >= 130)){
                    ringMarginLeft = 51;
                }else if ((diamondWidth <= 129) && (diamondWidth >= 99)){
                    ringMarginLeft = 60;
                }else if ((diamondWidth <= 98) && (diamondWidth >= 89)){
                    ringMarginLeft = 70;
                }else if ((diamondWidth <= 86) && ((diamondWidth >= 73))){
                    ringMarginLeft = 80;
                }else if ((diamondWidth <= 72) && ((diamondWidth >= 60))){ //Experimental range
                    ringMarginLeft = 90;
                }else{
                    ringMarginLeft = 70;
                }
            }else{
                ringMarginLeft = 81;
            }
            }*/
        }
        /*
        if (ie6) {
            ringMarginLeft = 0;
        }*/
        if ( J.cookie(diamondspos) ) {
            var positions = J.cookie(diamondspos);
            var diamonds = new Array();

            positions = positions.split('|');
            for (var i = 0; i < positions.length; i++) {
                var element = positions[i].split(';');
                diamonds[i] = new Array();
                for (var j = 0; j < element.length; j++) {
                    var attributes = element[j].split(':');
                    diamonds[i][attributes[0]] = attributes[1];
                }
            }

            for(var k in diamonds)
            {

                if(typeof(diamonds[k]['id']) != 'undefined' && diamonds[k]['id'] != null)
                {

                    if(id == diamonds[k]['id'].slice(0,3) && counter == diamonds[k]['id'].slice(3,4))
                    {

                        diamondLeft = diamonds[k]['left'];


                    }
                }
            }
        }

        liHeight = diamondHeight+'px';
        if(diamondWidth>(ringWidth-35))
        {
            diamondHtml = '<img class="diamond" src="'+stack_builder_diamond+'" alt="" style="margin-bottom:-'+marginBottom+'px;margin-left:-'+marginLeft+'px;position: relative;left:'+diamondLeft+'px;cursor: default;" />';
        }
        else
        {
            diamondHtml = '<img class="diamond" src="'+stack_builder_diamond+'" alt="" style="margin-bottom:-'+marginBottom+'px;margin-left:-'+marginLeft+'px;position: relative;left:'+diamondLeft+'px;" />';
        }

    }
    counter++;
    var appendHtml = '<li '+liId+' rel="'+type+'" class="'+id+'" style="list-style: none;cursor: pointer;height: '+liHeight+';margin-bottom:0px;"><span>';
    appendHtml += '<img class="image-ring" src="'+stack_builder_image+'" alt="" style="margin-left: -'+ringMarginLeft+'px" />';
    appendHtml += diamondHtml;
    appendHtml += '</span></li>';
    //add message on load
    var aredimonds = 0;
    var diamondstest = J.cookie(diamondspos);


            var diamonds1 = new Array();
            if(typeof(diamondstest) != 'undefined' && diamondstest != null)
            {
                var positions1 = diamondstest.split('|');
                var element1 = 0;
                var attributes1 = 0;
                for (var i1 = 0; i1 < positions1.length; i1++) {
                    element1 = positions1[i1].split(';');
                    diamonds1[i1] = new Array();
                    for (var j1 = 0; j1 < element1.length; j1++) {
                        attributes1 = element1[j1].split(':');
                        diamonds1[i1][attributes1[0]] = attributes1[1];
                    }
                }
                var idcurent = 0;
                var ringWidth1 =0;
                var diamondWidth1 = 0;
                for(var k1 in diamonds1)
                {

                    if(typeof(diamonds1[k1]['id']) != 'undefined' && diamonds1[k1]['id'] != null)
                    {
                            idcurent = diamonds1[k1]['id'].slice(0,3);
                            ringWidth1 = parseInt(window[["product"+idcurent]]['stack_builder_image_w']);
                            diamondWidth1 = parseInt(window[["product"+idcurent]]['stack_builder_diamond_w']);
                            if((diamondWidth1) < (ringWidth1-30)) {aredimonds =1;}
                        //console.log(diamondWidth1 + ' ' +ringWidth1 )
                    }
                }
            }
    //console.log('newxt ' + aredimonds);
    if(aredimonds == 0)
    {
        removeMessage(0);
    }
    else
    {
        stackBuilderError(null,null,slidingHelpMessage,1);
    }
    var positions = J.cookie(mystackrings);
    positions = positions.split('|');
    if(positions.length < 6)
    {
        removeMessage(1);
    }
    return appendHtml;
}
function moveDiamondActivate(parent){
    var diamond = J(parent).find('.diamond');
    J(diamond).unbind('mousedown');
    J(diamond).mousedown(function(e){
        sortableMouseDown = false;
        diamondMouseDown = J(diamond);
        J('body').unbind('mouseup');
        J('body').mouseup(function(e){
            sortableMouseDown = false;
            diamondMouseDown = false;
            saveRingsToCookies();
        });
        J(diamond).mouseup(function(e){
            sortableMouseDown = false;
            diamondMouseDown = false;
            saveRingsToCookies();
        });
        //stackBuilderError(null,null,slidingHelpMessage,1);
        return false;
    });

}
function moveDiamond(e){
    if (!diamondMouseDown || !J(diamondMouseDown).length) return false;

    var diamond = diamondMouseDown;
    var li = J(diamond).parents('li:first');
    var ring = J(li).find('.image-ring');

    var diamondOffset = J(diamond).offset();
    var ringOffset = J(ring).offset();

    var diamondWidth = parseInt(J(diamond).width());
    var ringWidth = parseInt(J(ring).width());

    var mouseLeft = parseInt(e.pageX);
    var diamondLeft = parseInt(diamondOffset.left);
    var diamondCssLeft = parseInt(J(diamond).css('left'));
    var diamondCssMarginLeft = parseInt(J(diamond).css('margin-left'));

    if (!diamondCssLeft) diamondCssLeft = 0;
    var ringLeft = parseInt(ringOffset.left);

    var minDiamondLeft = ringLeft + 15;
    var maxDiamondLeft = ringLeft+ringWidth-diamondWidth - 15;

    if(diamondWidth >= ringWidth)
    {
        var difference = 0;
        J(diamond).css('left',0);
    }
    else
    {
        var difference = mouseLeft - diamondLeft - parseInt(Math.round(diamondWidth/2));



    var diamondNewLeft = difference+diamondCssLeft;

    if (diamondNewLeft+diamondLeft-diamondCssLeft < minDiamondLeft) {
        diamondNewLeft = -ringWidth/2+diamondWidth/2 + 15;
        if (ie6) {diamondNewLeft = -ringWidth;}
    }
    if (diamondNewLeft+diamondLeft-diamondCssLeft > maxDiamondLeft) {
        diamondNewLeft = parseInt(ringWidth/2-diamondWidth/2) - 15;
        if (ie6) {diamondNewLeft = -diamondWidth;}
    }
    //alert(diamondNewLeft);


    J(diamond).css('left',diamondNewLeft);
    //J(diamond).css('margin-left',diamondNewLeft);

    }

}
function moveRingToPreviousPosition(movedObj){
    var index = J(movedObj).attr('pos');
    var ring = J('#sortable2 li:eq('+index+')');
    J(movedObj).attr('id','');
    if (J(ring).length) J(ring).before(movedObj);
    else J('#sortable2').append(movedObj);
}
function saveRingPosition(ring){
    var ringPosition = J('#sortable2 LI:visible').index(ring);
    J(ring).attr('pos',ringPosition);
}
function checkAllRingsCompatibility(){
    var errorArray = new Array();
    J('#sortable2 li[class!=ui-state-disabled]').each(function(){
        var errorProductId = checkRingTypes(this);
        if (errorProductId) {
            errorArray[errorArray.length] = errorProductId;
        }
    });
    return errorArray;
}

function reloadmystakrings(){

    console.log('reloadmystakrings');

    var isNeededCookies = true;
    if (J.cookie(mystackrings) && isNeededCookies) {

    if (J('#moved-obj').length) J('#moved-obj').remove();

    J("#sortable1 LI").unbind('mousedown');
    J('body').unbind('mousemove');
    counter = 0;
            var ids = J.cookie(mystackrings);
            ids = ids.split('|');
            var totalPrice = 0;
            J('#my-stack-rings').html('');
            J('#sortable2').html('');
            for (var i = 0; i<ids.length;i++) {
                var id = ids[i];
                if ( !window[["product"+id]] ) continue;
                var name = window[["product"+id]]['name'];
                var thumbnail = window[["product"+id]]['thumbnail'];

                var pricestring = window[["product"+id]]['pricestring'];
                var price = window[["product"+id]]['price'];
                totalPrice = totalPrice+parseInt(price);


                var appendHtml = createRingElement(id);

                J('#sortable2').append(appendHtml);

                if (mySstackRingsTwice) {
                    J('#my-stack-rings').append('<li class="ringdetails-'+id+'"><a href="#"><span class="image"><img src="'+thumbnail+'" alt="" /></span><span class="name">'+name+'</span></a></li>');
                }else if ( !J('#my-stack-rings .ringdetails-'+id).length ) {
                    J('#my-stack-rings').append('<li class="ringdetails-'+id+'"><a href="#"><span class="image"><img src="'+thumbnail+'" alt="" /></span><span class="name">'+name+'</span></a></li>');
                }

            }
        J('#total-price').html(pricesign+totalPrice);
    if(ringsclosed == 1) {closeRings(J('#sortable2 li'));}
    else{openRings(J('#sortable2 li'));}
        var elements = new Array();
    var element = new Array();
    var movedObj = null;
    var ringDetails = null;
    var itemId = null;
        if ( !J('#sortable2 #ui-state-disabled').length && J('#sortable1').length ) {
            J('#sortable2 LI:visible').each(function(){
                var itemId = J(this).attr('class');
                itemId = itemId[0];
                element['itemid'] = itemId;
                element['details'] = J('#ringdetails-'+element['itemid']);
                //elements[element['itemid']] = element;

                J(this).unbind('mousedown');
                J(this).mousedown(function(e){

                    sortableMouseDown = true;
                    diamondMouseDown = false;
                    J(this).attr('id','moved-obj');

                    //Save Ring Position
                    saveRingPosition(this);

                    J('body').append(this);
                    movedObj = J('#moved-obj');
                    J(movedObj).unbind('mouseup');
                    J(movedObj).mouseup(function(e){
                        sortableMouseDown = false;
                        element['new'] = 0;
                        movedObjMouseUp(movedObj,e,element);
                        return false;
                    });
                    objMove(movedObj,e,element);
                    return false;
                });

                var ringWidth = parseInt(window[["product"+J(this).attr('class')]]['stack_builder_image_w']);
                var diamondWidth = parseInt(window[["product"+J(this).attr('class')]]['stack_builder_diamond_w']);
                //Move Diamond

                diamondWidth = diamondWidth + 35;
                if(diamondWidth >= ringWidth)
                    {
                    }
                    else
                    {
                        moveDiamondActivate(this);
                    }



            });

        }else {
            J('#sortable2 li').css('cursor','default');
            closeRings(J('#sortable2 li'));


        }

        }


        J("#sortable1 LI").mousedown(function(e){

        sortableMouseDown = true;

        itemId = J(this).attr('id').split('-');
        itemId = itemId[itemId.length-1];
        ringDetails = J(this).find('#ring-details-'+itemId);
        element['itemid'] = itemId;
        element['details'] = ringDetails;
        element['new'] = 1;

        //var appendHtml = createRingElement(itemId,'moved-obj');
        //J('body').append(appendHtml);
        if (!J(this).find('#moved-obj-'+itemId).length) return false;
        var appendHtml = J(this).find('#moved-obj-'+itemId).clone();
        J('body').append('<li style="'+J(appendHtml).attr('style')+'" class="'+J(appendHtml).attr('class')+'" rel="'+J(appendHtml).attr('rel')+'" id="moved-obj">'+J(appendHtml).html()+'</li>');

        movedObj = J('#moved-obj');
        J(movedObj).removeClass('hidden');
        //Set Type
        J(movedObj).attr('rel',J(this).attr('class'));
        if (ie6) J(movedObj).find('img').ifixpng();
        J(movedObj).mousedown(function(){sortableMouseDown = true;return false;});
        J(movedObj).mouseup(function(e){
            sortableMouseDown = false;
            movedObjMouseUp(movedObj,e,element);
            return false;
        });
        //Move Diamond

        moveDiamondActivate(movedObj);
        objMove(movedObj,e,element);
        return false;
    });

        J('body').mousemove(function(e){

        moveDiamond(e);
        movedObj = J('#moved-obj');
        if (!J(movedObj).length) return false;
        objMove(movedObj,e,element);
        return false;
    });

    J("#sortable1 li a,#sortable2 li a,#sortable1 li img,#sortable2 li img,#my-stack-rings a").click(function(){return false;});
	J('#trade-content .listing-item:nth-child(3n+1)').after('<div class="cf"></div>');


}
    function ajax_cart_close()
                            {
                            jQuery("#cart_ajax_box").css('display','none');
                            }
/**
 * Dummy console so that IE doesn't crash
 */
if (typeof(console) == 'undefined') {
    console = {
        log : function (item) { return false; }
    };
}


