/**
 * @author Craig MacKenzie
 */
var _ADDMATCH = {};

/* ---------------------------------------------------------------------------------------
 / Basic Conifguration
 / ---------------------------------------------------------------------------------------*/
_ADDMATCH.config = function(){


    // ** public config settings ** //
    /* settings will default to the advisor match application as 
     the other frames that are now being loaded or an extension of this app */
    return {
        advisorURL: function(){
            return jQuery('#AdvisorQuickSearch').attr('action').split('?')[0];
        },
        advisorTitle: function(){
            return jQuery('#AdvisorQuickSearch').attr('data-title');
        },
        frameDimensions: {
            standard: {
                width: 800,
                height: 650
            },
            wide: {
                width: 970,
                height: 600
            }
        },
        postalCodeCheck: new RegExp(/^\s*[a-ceghj-npr-tvxy]\d[a-z](\s)?\d[a-z]\d\s*$/i),
        dialogID: 'DialogPopUp',
        disableURLloader: null,
        isURLloaded: function(){
            if (_ADDMATCH.tools.queryStringParams.PC && _ADDMATCH.tools.queryStringParams.lang) {
                return true;
            }
            else {
                return false;
            }
        }
    }
    
}();

_ADDMATCH.build = function(){

    // dialog container
    var popFrame = jQuery("<div>").attr({
        'id': _ADDMATCH.config.dialogID
    }).css({
        overflow: 'hidden'
    });
    
    // dialog iframe
    var frameContent = jQuery('<iframe>').attr({
        'id': 'advisorMatchFrame',
        width: _ADDMATCH.config.frameDimensions.standard.width,
        height: _ADDMATCH.config.frameDimensions.standard.height,
        scrolling: 'no',
        frameborder: '0'
    });
    
    
    // when the dom is ready append dialog box
    jQuery(function(){
    
        // append iframe to popup
        popFrame.append(frameContent);
        
        // append advisor app popup to body
        jQuery('body').append(popFrame);
        
        
        popFrame.dialog({
            modal: true,
            autoOpen: _ADDMATCH.config.isURLloaded(),
            width: _ADDMATCH.config.frameDimensions.standard.width + 27,
            height: 'auto',
            position: ['top', 'center'],
            resizable: true,
            title: _ADDMATCH.config.advisorTitle(),
            open: function(){
				
				/* hide selects in IE6 */				
				jQuery('body').addClass('hideSelect');
				
                /* attach incoming URL parameters
                 this is used to show the Advisor Search when
                 coming from an outside source Eg. Flash AD on Yahoo! */
                if (_ADDMATCH.config.disableURLloader != true || _ADDMATCH.config.isURLloaded == true) {
                    // pass parameters to the advisor match application          
                    jQuery(this).find('#advisorMatchFrame').attr({
                        'src': _ADDMATCH.config.advisorURL() + window.location.search
                    });
                }
            },
            close: function(){
				
				/* show selects in IE6 */				
				jQuery('body').removeClass('hideSelect');
				
                /* reset iframe src so that music stops playing
                 when you close the popup window */
                popFrame.find('iframe').attr('src', '');
            }
        });
    })
}();


/*---------------------------------------------------------------------------------------
 / Basic Tools (form validation, Flash dialog opening method, etc.
 /---------------------------------------------------------------------------------------*/
_ADDMATCH.tools = function(){


    // ** private variables/functions  ** //
	
	var dialogWidth;
    var frameBuffer = 27;
    
    // Query string parser
    function getQueryString(strQuery){
        strQuery = strQuery.replace('?', '');
        var strQueryFields = strQuery.split(/&/);
        var info = {};
        for (var i = 0; i < strQueryFields.length; i++) {
            var fieldInfo = strQueryFields[i].split(/=/, 2);
            info[fieldInfo[0]] = fieldInfo[1];
        }
        return info;
    }
    
    var queryStringObj = getQueryString(window.location.search);
    
    
    // when the dom is ready setup the advisor quick search form and pop frame functionality
    jQuery(function(){
        
        jQuery('.popFrame').click(function(){
        
            _ADDMATCH.config.disableURLloader = true;
            
            // IE6/7 don't like auto width so we have to set it using dialog's width option
            dialogWidth = _ADDMATCH.config.frameDimensions[jQuery(this).attr('data-dimensions')].width;
            
            // set iFrame URL
            jQuery('#advisorMatchFrame').attr({
                'src': jQuery(this).attr('href')
            }).css('width', dialogWidth + 'px');
            
            // set/show dialog box
            jQuery('#' + _ADDMATCH.config.dialogID).dialog('option', 'title', jQuery(this).attr('data-title')).dialog('option', 'width', dialogWidth + frameBuffer).dialog('open');
            
            return false;
        });
        
        
        jQuery('#AdvisorQuickSearch').submit(function(){
        
            // disable auto pop URL loader
            _ADDMATCH.config.disableURLloader = true;
            
            
            // advisor form
            advisorForm = jQuery(this);
            
            var postalCode = advisorForm.find('#postalCode');
            var language = advisorForm.find('#language');
            
            // reset errors
            var hasErrors = false;
            advisorForm.find('em.error').remove();
            advisorForm.find('li.error').removeClass('error');
            
            // check if postal code is valid
            if (_ADDMATCH.config.postalCodeCheck.test(postalCode.val()) != true) {
                postalCode.closest('li').addClass('error').append('<em class="error">' + postalCode.attr('title') + '</em>');
                
                // stop form submition
                return false;
            }
            
            // check to see if language is set
            if (language.val() == 'null') {
                //default to either english or french
                //need to figure out how to grab the defualt value
                if (_ADDMATCH.tools.queryStringParams.vgnLocale && _ADDMATCH.tools.queryStringParams.vgnLocale == 'fr_CA') {
                    language.val('french');
                }
                else {
                    language.val('english')
                }
                
                
            }
            
            
            if (advisorForm.attr('openURL') == 'null') {
            
                // IE6/7 don't like auto width so we have to set it using dialog's width option
                dialogWidth = _ADDMATCH.config.frameDimensions.standard.width;
                
                // pass parameters to the advisor match application
                jQuery('#advisorMatchFrame').attr({
                    'src': advisorForm.attr('action') + '&' + jQuery('#AdvisorQuickSearch').serialize()
                }).css('width', dialogWidth);
                
                
                
                // set/show advisor match application
                jQuery('#' + _ADDMATCH.config.dialogID).dialog('option', 'title', _ADDMATCH.config.advisorTitle()).dialog('option', 'width', dialogWidth + frameBuffer).dialog('open');
                
                return false;
            }
            else {
                window.location = advisorForm.attr('openURL') + '?' + advisorForm.attr('action').split('?')[1] + '&' + jQuery('#AdvisorQuickSearch').serialize()
                
                return false;
            }
            
        });
    });
    
    
    
    // ** public tool methods ** //     
    return {
        // this method is called by the TODO LIST flash
        // it will open the advisor match dialog box
        openAddMatch: function(postalCode, lang, guid){             
			    
            // disable auto pop URL loader
            _ADDMATCH.config.disableURLloader = true;
            
            // IE6/7 don't like auto width so we have to set it using dialog's width option
            dialogWidth = _ADDMATCH.config.frameDimensions.standard.width;
            
            // pass parameters to the advisor match application
            jQuery('#advisorMatchFrame').attr({
                'src': _ADDMATCH.config.advisorURL() + '?PC=' + postalCode + '&lang=' + lang + '&GUID=' + guid
            }).css('width', dialogWidth);
			
            // set/show advisor match application
            jQuery('#' + _ADDMATCH.config.dialogID).dialog('option', 'title', _ADDMATCH.config.advisorTitle()).dialog('option', 'width', dialogWidth + frameBuffer).dialog('open'); 
        },
        queryStringParams: queryStringObj
    }
    
}();




