var popup = Class.create();
var randid = 0;
popup.prototype = {
    initialize: function(ElemId) {
        this.options = Object.extend({
            content: '',
            overlay: false,
            width: 300,
            height: 'auto',
            relative: 0,
            contentid: 0,
            title: '',
            url: '',
            offsetleft: 0,
            offsettop: 0,
            close: 1,
            draggable: 1,
            handle: 'boxtitle'
        }, arguments[1] || {});

        this.params = Object.extend({
            }, arguments[2] || {});

        this.el = $(ElemId);

        if(this.options.overlay == 1) this._showOverlay();
        this._before();
        this._showBox();
        this._after();
        this._pngfix();

        return false;
    },

    _showBox: function() {
        boxstuff = this._getBoxContent();
        $('box').down('.boxcontent').update('' + boxstuff + '');

        closebutton = '';
        if(this.options.close == 1) closebutton = '<a href="#" class="closer" onclick="closePopup(this); return false;" onfocus="this.blur()"><img src="/corporate/wp-content/themes/default/images/popupclose.png" alt=""></a>';
        new Insertion.Bottom('box', closebutton);

        boxtop = (innery/2)+viewporty + 'px';
        boxleft = '50%';
        boxwidth = parseInt(this.options.width)+16 + 'px';
        boxheight = (this.options.height == 'auto') ? 'auto' : this.options.height + 'px';
        offsetleft = parseInt(this.options.offsetleft);
        //offsettop = parseInt(this.options.offsettop);
        offsettop = 0

        if(this.options.relative == 1) {
            elloc = Position.page(this.el);
            boxleft = (elloc[0]+viewportx+offsetleft) +  'px';
            boxtop = (elloc[1]+viewporty+offsettop) + 'px';
            boxmarginleft = -((this.options.width == 'auto') ? $('box').getWidth()/2 : this.options.width/2) + 'px';
            boxmargintop = '20px';
        }
        else {
            boxmargintop = -((this.options.height == 'auto') ? $('box').getHeight()/2 : this.options.height/2) + offsettop + 'px';
            boxmarginleft = -(this.options.width/2) + offsetleft + 'px';
        }
        $('box').setStyle({
            top: boxtop,
            left: boxleft,
            width: boxwidth,
            height: boxheight,
            marginTop: boxmargintop,
            marginLeft: boxmarginleft
        });
        $('box').down('.boxcontent').setStyle({
            //padding: '8px'
        });
        $('box').show();
    },

    _showOverlay: function() {
        $('overlay').setStyle({
            width: pagex + 'px',
            height: pagey + 'px'
        });
        $('overlay').show();
    },

    _getBoxContent: function() {
        boxtitle = '';
        boxstuff = '';
        if(this.options.content == '' && this.options.contentid == 0) {
            boxstuff = 'No content';
        }
        else {
            // content
            if(this.options.contentid != 0) {
                boxstuff = $(this.options.contentid).innerHTML;
            }
            else boxstuff = this.options.content;
        }
        if(this.options.title != '') {
            // title
            boxtitle = this.options.title;
        }
        boxid = 'divi' + randid;
        boxfinal = '';
        if(boxtitle) boxfinal += '<h2 class="boxtitle">' + boxtitle + '</h2>';
        boxfinal += '<div class="boxinner" id="' + boxid + '">' + boxstuff + '</div>';
        randid++;

        return boxfinal;
    },

    _before: function() {
        if($('box')) $('box').remove();
        
		
		if (self.pageYOffset) {
	        viewportx = self.pageXOffset;
	        viewporty = self.pageYOffset;
	    }
	    else if (document.documentElement && document.documentElement.scrollTop) {
	        viewportx = document.documentElement.scrollLeft;
	        viewporty = document.documentElement.scrollTop;
	    }
	    else if (document.body) {
	        viewportx = document.body.scrollLeft;
	        viewporty = document.body.scrollTop;
	    }
	    test1 = document.body.scrollHeight;
	    test2 = document.body.offsetHeight;
	    if (test1 > test2) {
	        pagex = document.body.scrollWidth;
	        pagey = document.body.scrollHeight;
	    }
	    else {
	        pagex = document.body.offsetWidth;
	        pagey = document.body.offsetHeight;
	    }
	    if (self.innerHeight) {
	        innerx = self.innerWidth;
	        innery = self.innerHeight;
	    }
	    else if (document.documentElement && document.documentElement.clientHeight) {
	        innerx = document.documentElement.clientWidth;
	        innery = document.documentElement.clientHeight;
	    }
	    else if (document.body) {
	        innerx = document.body.clientWidth;
	        innery = document.body.clientHeight;
	    }
		
        new Insertion.Bottom(document.body, '<div class="overlay" id="overlay" style="display: none"></div><div class="box" id="box" style="display: none"><div id="boxcontent" class="boxcontent">&nbsp;</div></div>');
        boxShader('box');
    },

    _after: function() {
        if(this.options.draggable == 1) new Draggable($('box'), {
            handle:this.options.handle,
            starteffect:'',
            endeffect:''
        });
        insertIEFramePopup();
        if(this.options.url != '') {
            new aj(boxid, {
                url:this.options.url,
                onComplete: function() {
                    insertIEFramePopup();
                }
            });
        }
    },

    _pngfix: function() {
        if(getBrowser.Version() < 7) {
            fixpng($($('box').down('.closer').down('IMG')));
        }
    }
}


function insertIEFramePopup() {
    if(getBrowser.Version() < 7) {
        if($($('box').down('IFRAME'))) $($('box').down('IFRAME')).remove();
        boxwidth = $('box').getWidth()-16;
        boxheight = $('box').getHeight()-16;
        ieframe = '<iframe width="' + boxwidth + '" height="' + boxheight + '" frameborder="0" border="0" background="none" style="z-index: -1; position: absolute; top: 0; left: 0; background: none;"></iframe>';
        boxinner = $('box').down('.boxinner');
        new Insertion.Top(boxinner, ieframe);
    }
}

function closePopup(el) {
    if($(el)) thebox = $(el).up('.box');
    else thebox = $('box');
    if($(thebox)) $(thebox).remove();
//new Effect.Fade($(thebox), {duration:0.2});
}

function boxShader(el) {
    // screw ie6
    if(getBrowser.Version() > 6) {
        var boxshade = new ShaBoRenderer();
        boxshade.Init({
            corner:10,
            border:8,
            borderOpacity:0.4
        });
        boxshade.RenderElement($(el));
        $(el).setStyle({
            position:'absolute'
        });
    }
}


var getBrowser = {
  Version: function() {
    var version = 999; // we assume a sane browser
    if (navigator.appVersion.indexOf("MSIE") != -1) {
      // bah, IE again, lets downgrade version number
      version = parseFloat(navigator.appVersion.split("MSIE")[1]);
    }
    return version;
  }
}


var aj = Class.create();
aj.prototype = {
    initialize: function(ElemId) {
        this.options = Object.extend({
            method: 'get',
            url: '',
            params: '',
            onComplete: '',
            loader:1,
            tbl:0
        }, arguments[1] || {});

        this.el = ElemId;
        this.url = this.options.url;

        if(this.options.method == 'post') this._post();
        else if(this.options.method == 'req') this._req();
        else this._get();
        if(this.options.loader == 1) this._loader();
    },

    _loader: function() {
        if(this.options.tbl != 0) $(this.el).update('<tr><td colspan="' + this.options.tbl + '" class="noborder nopad"><div class="loading">&nbsp</div></td></tr>');
        else $(this.el).update('<div class="loading">&nbsp</div>');
    },

    _post: function() {
        el = this.el;
        params = this.options.params;
        oc = this.options.onComplete;

        new Ajax.Request(this.url, {
            method: 'post',
            asynchronous: true,
            evalScripts: true,
            parameters: params,
            onComplete: function() {
                if(oc != '') oc();
            },
            onSuccess: function(t) {
            }
        });
    },

    _get: function() {
        url = this.url;
        oc = this.options.onComplete;
        params = this.options.params;

        new Ajax.Updater(this.el, url, {
            method: 'get',
            asynchronous: true,
            evalScripts: true,
            parameters: params,
            onComplete: function() {
                if(oc != '') oc();
            },
            onSuccess: function(t) {
            }
        });
    },

    _req: function() {
        url = this.url;
        oc = this.options.onComplete;
        params = this.options.params;

        new Ajax.Request(url, {
            method: 'get',
            asynchronous: true,
            evalScripts: true,
            parameters: params,
            onComplete: function() {
                if(oc != '') oc();
            },
            onSuccess: function(t) {
            }
        });
    }
}
