var shadermode_op_opacity = 0.7;
var shadermode_op_bg = '#040404';

// alternative color for MacFF2
var shadermode_neutral = 'gray';

jQuery.fn.flashZoom = function(action) {

  var defaults = {
      version : 8
      }

  var element = $(this) //.attr('id')
  var node = $(this).attr('id')
  options = eval(node+'_opts')
  var opts = $.extend(defaults, options);
  var flash = $('#' + opts.flash_id);
  
  if (action == 'show') show_flash()
  else if (action == 'fold') open_flash()
  else if (action == 'unfold') close_flash()

  function show_flash() {
    if($.browser.msie){
        var so = new SWFObject(opts.flash_url, opts.flash_id, opts.width, opts.height, opts.version, "#ffffff");
        so.addParam("allowScriptAccess", "always");
        so.addParam("scale", "noscale");
        so.addParam("salign", "lt");

        so.addParam("align", "middle");
        so.write($(element).attr('id'));
        $(element).addClass('funfolded');
    }else{
        var so = new SWFObject(opts.flash_url, opts.flash_id, opts.width, opts.height, opts.version, "#ffffff");
        so.addParam("allowScriptAccess", "always");
        so.addParam("scale", "noscale");
        so.addParam("salign", "lt");
        so.addParam("wmode","opaque");
        so.addParam("align", "middle");
        so.write($(element).attr('id'));
        $(element).addClass('funfolded');
    }
    
    }

    function close_flash(){
        if ($.browser.msie) {
            closeMsie();
        }

        if ($.browser.safari) {
            closeSafari();
        }

        if ($.browser.mozilla) {
            closeMozilla();
        }
    }


    function closeMsie(){
        $(flash).attr('wmode','opaque');
        $('#splash').remove();
        $(flash).attr('width', opts.width);
        $(flash).attr('height', opts.height);
        $(element).css('top', '0');
        $(element).css('left', '0');
        $(element).css('width', opts.width);
        $(element).css('height', opts.height);
        $(element).removeClass('ffolded');
        $(element).addClass('funfolded');
        $('html').css('overflow', 'auto');

        return false;
    }

    function closeSafari(){
        $('#splash').remove();
        $(flash).attr('width', opts.width);
        $(flash).attr('height', opts.height);
        $(element).css('top', '0');
        $(element).css('left', '0');
        $(element).css('width', opts.width);
        $(element).css('height', opts.height);
        $(element).removeClass('ffolded');
        $(element).addClass('funfolded');
        $('html').css('overflow', 'auto');

        return false;
    }

    function closeMozilla(){
        $('#splash').remove();
        $(flash).attr('width', opts.width);
        $(flash).attr('height', opts.height);
        $(element).css('top', '0');
        $(element).css('left', '0');
        $(element).css('width', opts.width);
        $(element).css('height', opts.height);
        $(element).removeClass('ffolded');
        $(element).addClass('funfolded');
        $('html').css('overflow', 'auto');
        
        return false;
    }

    function open_flash(){
        if ($.browser.msie) {
            if($.browser.version == '6.0'){
                openMsie6();
            }else{
                openMsie();
            }
        }

        if ($.browser.safari) {
            openSafari();
        }

        if ($.browser.mozilla) {
            openMozilla();
        }
    }

function openMsie6(){
	var db = document.body;
    	var dde = document.documentElement;
    	var docHeight = Math.max(db.scrollHeight, dde.scrollHeight, db.offsetHeight, dde.offsetHeight, db.clientHeight, dde.clientHeight);
        var pageHeight = getPageSize();
        $(flash).attr("wmode","");
        $('body').prepend('<div id="splash"></div>');
        var temp = $('div.tx-lxsces-pi6 #'+opts.parent_id).parent();
        var temp2 = $(temp).parent();

        $('html').css('overflow', 'hidden');
        $('#splash').css('top', '0px');
        $('#splash').css('left', '0px');
        $('#splash').css('position', 'absolute');
        $('#splash').css('zIndex', '1');
        $('#splash').css('width', '100%');
        $('#splash').css('height', docHeight+opts.height+'px');

        var d = detectBadOpacity();
        if (d) {
            $('#splash').css('background', shadermode_neutral);
        } else {
            $('#splash').css('opacity', shadermode_op_opacity);
            $('#splash').css('background', shadermode_op_bg);
        }

        $(element).css('width', opts.widthZoom);
        $(element).css('height', opts.heightZoom);
        $(flash).attr('width', opts.widthZoom);
        $(flash).attr('height', opts.heightZoom);

        var offsets = getPosition($(element).attr('id'));
        var vanillaLeft = (($(window).width() - (opts.widthZoom)) / 2),
            vanillaTop = (($(window).height() - (opts.heightZoom)) / 2);

        var resultLeft = vanillaLeft + $(window).scrollLeft() - offsets[0],
            resultTop = vanillaTop + $(window).scrollTop() - offsets[1];

        $(element).css('top', resultTop);
        $(element).css('left', resultLeft);
        $(element).removeClass('funfolded');
        $(element).addClass('ffolded');



    return false;
    }
 
    function openMsie(){
	var db = document.body;
    	var dde = document.documentElement;
    	var docHeight = Math.max(db.scrollHeight, dde.scrollHeight, db.offsetHeight, dde.offsetHeight, db.clientHeight, dde.clientHeight);
        var pageHeight = getPageSize();
        $(flash).attr("wmode","");
        $('body').append('<div id="splash"></div>');
        var temp = $('div.tx-lxsces-pi6 #'+opts.parent_id).parent();
        var temp2 = $(temp).parent();

        $('#splash').css('top', '0px');
        $('#splash').css('left', '0px');
        $('#splash').css('position', 'absolute');
        $('#splash').css('zIndex', '1');
        $('#splash').css('width', '100%');
	$('#splash').css('height', docHeight+opts.height+'px');

        var d = detectBadOpacity();
        if (d) {
            $('#splash').css('background', shadermode_neutral);
        } else {
            $('#splash').css('opacity', shadermode_op_opacity);
            $('#splash').css('background', shadermode_op_bg);
        }

        $(element).css('width', opts.widthZoom);
        $(element).css('height', opts.heightZoom);
        $(flash).attr('width', opts.widthZoom);
        $(flash).attr('height', opts.heightZoom);

        var offsets = getPosition($(element).attr('id'));
        var vanillaLeft = (($(window).width() - (opts.widthZoom)) / 2),
            vanillaTop = (($(window).height() - (opts.heightZoom)) / 2);

        var resultLeft = vanillaLeft + $(window).scrollLeft() - offsets[0],
            resultTop = vanillaTop + $(window).scrollTop() - offsets[1];

        $(element).css('top', resultTop);
        $(element).css('left', resultLeft);
        $(element).removeClass('funfolded');
        $(element).addClass('ffolded');

    return false;
    }

    function openSafari(){
        var pageHeight = getPageSize();
        $('body').append('<div id="splash"></div>');
        $('#splash').css('width', '100%');
        $('#splash').css('height', pageHeight[1] + 'px');

        var d = detectBadOpacity();
        if (d) {
            $('#splash').css('background', shadermode_neutral);
        } else {
            $('#splash').css('opacity', shadermode_op_opacity);
            $('#splash').css('background', shadermode_op_bg);
        }

        $(element).css('width', opts.widthZoom);
        $(element).css('height', opts.heightZoom);
        $(flash).attr('width', opts.widthZoom);
        $(flash).attr('height', opts.heightZoom);

        var offsets = getPosition($(element).attr('id'));
        var vanillaLeft = (($(window).width() - (opts.widthZoom)) / 2),
            vanillaTop = (($(window).height() - (opts.heightZoom)) / 2);
        var resultLeft = vanillaLeft + $(window).scrollLeft() - offsets[0],
            resultTop = vanillaTop + $(window).scrollTop() - offsets[1];

        $(element).css('top', resultTop);
        $(element).css('left', resultLeft);

        $(element).removeClass('funfolded');
        $(element).addClass('ffolded');

        return false;
    }

    function openMozilla(){
        var pageHeight = getPageSize();
        $('body').append('<div id="splash"></div>');
        $('#splash').css('width', '100%');
        $('#splash').css('height', pageHeight[1]+'px');

       var d = detectBadOpacity();
        if (d) {
            $('#splash').css('background', shadermode_neutral);
        } else {
            $('#splash').css('opacity', shadermode_op_opacity);
            $('#splash').css('background', shadermode_op_bg);
        }


        $(element).css('width', opts.widthZoom);
        $(element).css('height', opts.heightZoom);
        $(flash).attr('width', opts.widthZoom);
        $(flash).attr('height', opts.heightZoom);

        var offsets = getPosition($(element).attr('id'));
        var vanillaLeft = (($(window).width() - (opts.widthZoom)) / 2),
            vanillaTop = (($(window).height() - (opts.heightZoom)) / 2);
        var resultLeft = vanillaLeft + $(window).scrollLeft() - offsets[0],
            resultTop = vanillaTop + $(window).scrollTop() - offsets[1];

        $(element).css('top', resultTop);
        $(element).css('left', resultLeft);

        $(element).removeClass('funfolded');
        $(element).addClass('ffolded');

        return false;
    }

    function getPosition(id){
        ele = document.getElementById(id)
        var topValue= 0,leftValue= 0;
        while(ele){
            leftValue += ele.offsetLeft;
            topValue += ele.offsetTop;
            ele = ele.offsetParent;
        }
        result = new Array(leftValue, topValue);
        return result;
    }

    // this will catch MacFF2
    // special to raise no-opacity case
    function detectBadOpacity() {
        var userAgent = navigator.userAgent.toLowerCase();
        if (/firefox[\/\s](\d+\.\d+)/.test(userAgent)) {
            var ffversion = new Number(RegExp.$1);
            if (ffversion < 3 && userAgent.indexOf('mac') != -1) {
                return true;
            }
        }
    }
    //
    // getPageSize()
    // Returns array with page width, height and window width, height
    // Core code from - quirksmode.org
    // Edit for Firefox by pHaez
    //
    function getPageSize(){

        var xScroll, yScroll;

        if (window.innerHeight && window.scrollMaxY) {
            xScroll = document.body.scrollWidth;
            yScroll = window.innerHeight + window.scrollMaxY;
        } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
            xScroll = document.body.scrollWidth;
            yScroll = document.body.scrollHeight;
        } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
            xScroll = document.body.offsetWidth;
            yScroll = document.body.offsetHeight;
        }

        var windowWidth, windowHeight;
        if (self.innerHeight) {	// all except Explorer
            windowWidth = self.innerWidth;
            windowHeight = self.innerHeight;
        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
            windowWidth = document.documentElement.clientWidth;
            windowHeight = document.documentElement.clientHeight;
        } else if (document.body) { // other Explorers
            windowWidth = document.body.clientWidth;
            windowHeight = document.body.clientHeight;
        }

        // for small pages with total height less then height of the viewport
        if(yScroll < windowHeight){
            pageHeight = windowHeight;
        } else {
            pageHeight = yScroll;
        }

        // for small pages with total width less then width of the viewport
        if(xScroll < windowWidth){
            pageWidth = windowWidth;
        } else {
            pageWidth = xScroll;
        }


        arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
        return arrayPageSize;
    }

}