function getScrollY() {
  if( typeof( window.pageYOffset ) == 'number' ) {
    return window.pageYOffset; // netscape
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    return document.body.scrollTop; //DOM compliant
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    return document.documentElement.scrollTop; //IE6
  }
  return 0;
}

/**
 * Creates a popup, and puts content loaded into the div loaded via an ajax request
 * @param {Object} options
 */
jQuery.fn.ajaxPopup = function(options){
    var
    defaults = {
        link: '/SimpleAjaxPage',
        bgContainer: 'AjaxBackground',
        wrapper: 'AjaxDefBox',
        successMesg: 'Message sent'
    },
    settings = jQuery.extend({}, defaults, options);

    // allow chaining
    return this.each(function() {
        jQuery(this).click(function(){
            // launch the ajax request
            jQuery.ajax({
                url: jQuery(this).attr('href') + settings.link,
                cache: false,

                // if you succeded in getting the page
                success: function(html){
                    if (jQuery('#AjaxContainer').size() == 0) {

                        jQuery('body').prepend('<div id="AjaxContainer" class="typography"><div id="popupTop"><div id="popupBot"><a href="#" id="PopupClose">&nbsp;</a><div id="'+settings.wrapper+'" class="ajaxContainerBox">' + html + '</div></div></div></div>');
                        jQuery('body').append('<div id="'+settings.bgContainer+'"></div>');
                        // ie 6 opacity
                        jQuery('#'+settings.bgContainer).css('opacity', .2);
                        jQuery('#'+settings.bgContainer).hide().fadeIn('slow').css('height', jQuery(document).height() + 'px');

                        // set the window to where the user is viewing
                        jQuery('#popupTop').css('margin-top',(getScrollY()+20)+'px');


                        // Highjack the submit form (if one found)
                        jQuery('#AjaxContainer').find('form').each(function(){

                            
                            var myForm = jQuery(this);
                            jQuery('#AjaxContainer').find(':submit').click(function(){
                                // validate me
                                jQuery('#Firstname').removeClass('error');
                                jQuery('#Lastname').removeClass('error');
                                jQuery('#Address1').removeClass('error');
                                jQuery('#Postcode').removeClass('error');

                                jQuery('#Error').remove();
                                jQuery('#Form_OrderForm_action_Submit').before('<div id="Error">Please enter all fields</div>');
                                if(jQuery('#Firstname div input').val() == ''){
                                    jQuery('#Firstname').addClass('error');
                                    jQuery('#Firstname div input').focus();
                                    return false;
                                }
                                if(jQuery('#Lastname div input').val() == ''){
                                    jQuery('#Lastname').addClass('error');
                                    jQuery('#Lastname div input').focus();
                                    return false;
                                }
                                if(jQuery('#Address1 div input').val() == ''){
                                    jQuery('#Address1').addClass('error');
                                    jQuery('#Address1 div input').focus();
                                    return false;
                                }
                                if(jQuery('#Postcode div input').val() == ''){
                                    jQuery('#Postcode').addClass('error');
                                    jQuery('#Postcode div input').focus();
                                    return false;
                                }

                                jQuery.ajax({
                                    type: 'POST',
                                    url: myForm.attr('action'),
                                    data: myForm.serialize(),
                                    success: function(data){
                                        jQuery('#'+settings.wrapper).html(data+'<br/>'+settings.successMesg).css('background-position','50% 50%').animate({height:'100px'}, 500);
                                    },
                                    error: function(data){
                                        alert('Submission error ('+data.getAllResponseHeaders()+')');
                                    }
                                });
                                return false;
                            });
                        });

                       // remove box when click outside container
                        var canExit = true;
                        jQuery('#'+settings.wrapper).hover(function(){canExit = false;}, function(){canExit = true;});

                        jQuery('#'+settings.bgContainer).click(function(){
                                if (canExit) {
                                        jQuery('#'+settings.bgContainer).fadeOut('slow', function(){jQuery('#'+settings.bgContainer).remove();});
                                        jQuery('#AjaxContainer').fadeOut('slow', function(){jQuery('#AjaxContainer').remove();});
                                }
                        });

                        Cufon.replace('h2');
                        jQuery('h2').each(function(){
                            jQuery(this).css('visibility','visible');
                            if(jQuery(this).find('a')) jQuery(this).find('a').css('visibility','visible');
                        });

                        if(jQuery('#GIBVideo').length){
                           // install everything after page is ready

                            $f("GIBVideo", {
                              src:"mysite/themes/gib/flash/flowplayer-3.1.1.swf",
                              wmode:"transparent"
                            },{
                                clip: {
                                    autoPlay: false,
                                    autoBuffering: true
                                },
                                plugins: {controls: null}
                            }).controls("GIBControls");
                        }

                        //if(jQuery("#PopupClose")){
                            jQuery("#PopupClose").css({
                                'position':'absolute',
                                'top':'18px',
                                'right':'19px',
                                'width':'31px',
                                'height':'30px',
                                'display':'block',
                                'text-decoration':'none',
                                'z-index':'9999',
                                'background':'transparent url(/mysite/themes/gib/images/bttn-close.png) left top no-repeat'
                            });

                            jQuery("#PopupClose").click(function(event){
                                event.preventDefault();
                                jQuery('#'+settings.wrapper).fadeOut('slow', function(){
                                    jQuery('#'+settings.wrapper).remove();
                                });
                                jQuery('#'+settings.bgContainer).fadeOut('slow', function(){
                                    jQuery('#'+settings.bgContainer).remove();
                                });
                                jQuery('#AjaxContainer').fadeOut('slow', function(){
                                    jQuery('#AjaxContainer').remove();
                                });
                                jQuery(this).remove();
                            });
                        //}
                    }
                }
            });
            return false;
        });
    });
}
