// JavaScript Document

$(document).ready(function() {
	RPF.getPageIdentities();
    
    RPF.globalLoadFunctions();
    
    RPF.loadPlugins();
    
    RPF.pageLoadFunctions();
    
});


var RPF = function() {
	
    /*******************************************************************************************
     PRIVATE PROPERTIES AND METHODS
     *******************************************************************************************/

	// a little browser sniffing
    var ie6 = ($.browser.msie && parseInt(jQuery.browser.version) < 7) ? true : false;
    var ie7 = ($.browser.msie && parseInt(jQuery.browser.version) < 8) ? true : false;

    var sitepath = '';
    if (location.hostname === 'webserver') {
		sitepath = 'http://webserver/www/riversideparkfund.org/';	
	} else {
		sitepath = 'http://' + location.host + '/';
	}
	
    /***************************** Dynamic loadings *****************************/

	// Plugins. Note: plugin_data can only uses one entry for a page, if both needed, use entry for id, which overrides class. NOTE: css loading doesn't seem to work for IE6
    /* format:
     var plugin_data = {
     mypage_id_or_class: {
     filestoget:		[myfilepath1, myfilepath2], // put js last
     callback:		'myfunction' // callback for last js function
     }
     };
     */
     
	/* var plugin_data = {
		contact	:	{
			filestoget:	[sitepath + 'js/jquery.validate.min.js', sitepath + 'js/additional-methods.js'], //
			callback:	'validateForm'
		},
		volunteer :	{
			filestoget:	[sitepath + 'js/jquery.validate.min.js', sitepath + 'js/additional-methods.js'], //
			callback:	'validateForm'
		}
	}; */

	// Global functions: array of functions to fire onready for every page
    var globalfunctions = []; 
    
    // Page functions, based on page id (default) and page class
    var pagefunctions = {
		// pageid	: ['function1', 'function2']
		contact		: ['validateForm'],
		volunteer	: ['validateForm'],
		hippopark	: ['validateForm']
    };
    
    
    /********************************* Helpers *********************************/
    
    // helper for plugin loader
    function createCallback(methodName){
        return function(){
            GDC[methodName]();
        };
    }
 
    // preloads regular images
    function preloadImages(src){
        $('<img>').attr('src', src);
    }
    
    // cookie functions
    var Cookie = {
        create: function(name, value, days){
            var expires;
            if (days) {
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                expires = "; expires=" + date.toGMTString();
            }
            else {
                expires = "";
            }
            document.cookie = name + "=" + value + expires + "; path=/";
        },
        
        read: function(name){
            var nameEQ = name + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) === ' ') {
                    c = c.substring(1, c.length);
                }
                if (c.indexOf(nameEQ) === 0) {
                    return c.substring(nameEQ.length, c.length);
                }
            }
            return null;
        },
        
        erase: function(name){
            document.cookie = name + "= ; max-age=-1; path=/";
        },
        
        test: function(){
            // try to create a cookie
            this.create('test', 'testing');
            // then read it
            if (this.read('test') === 'testing') {
                this.erase('test');
                return true;
            }
            else {
                return false;
            }
        }
    };
    
    /***************************** "Constants" ******************************/
    
    var SITE_URL = site_url;

    /***************************** Private Properties *****************************/
    
    var pageId;
    var pageClasses; // array
    // list of dynamically loaded files for loadPlugins
    var filelist = [];
    
    var inputvalues = [];
    
    /***************************** Private Methods *****************************/
    
    // gets text input initial value and stores them in associative array
    function getInitialValue(el){
        $(':text').each(function(i){
            inputvalues[this.id] = this.value;
        });
    }
    
    // empties input on focus
    function emptyInput(el){
        if ($(el).val() === inputvalues[$(el).attr('id')]) {
            $(el).val('');
        }
    }
    
    // refills unused input on blur
    function refillInput(el){
        if (jQuery.trim($(el).val()) === '') {
            $(el).val(inputvalues[$(el).attr('id')]);
        }
    }

	return {
		 
        /***************************** Dynamic Loaders *****************************/
        
        // global on-ready functions
        globalLoadFunctions: function(){ 
            try {
                for (var i = 0; i < globalfunctions.length; i++) {
                    RPF[globalfunctions[i]]();
                }
            } 
            catch (ex) {
            }
        },
        
        // the plugin loader, callbacks below
        loadPlugins: function(){  
            // disable for ie lte6
            //if (ie6) 
                //return;
            var filecount, filetype, filepath, callback, i, j;
            
            // first the classes
            for (j = 0; j < pageClasses.length; j++) { 
                try {
                    // load the file(s)
                    filecount = plugin_data.pageClasses[j].filestoget.length; 
                    //callback = (plugin_data[pageClasses[j]]['callback'] == null)?  plugin_data[pageClasses[j]]['callback'] : false;
                    callback = plugin_data.pageClasses[j].callback;
                    for (i = 0; i < filecount; i++) {
                        // check filetype
                        filepath = plugin_data[pageId].filestoget[i];
                        filetype = filepath.substr(filepath.lastIndexOf('.') + 1);
                        if (filetype === 'css') {
                            // first, has it already been loaded?
                            if (hasBeenLoaded(filepath)) 
                                continue;
                            // load the css file
                            $('head').append('<link rel="stylesheet" type="text/css" href="' + filepath + '" />');
                        }
                        else {
                            // load the script file, run callback on last one only
                            if (i === filecount - 1) {
                                $.getScript(filepath, function(){
                                    if (callback) RPF[callback]();
                                });
                            }
                            else {
                                $.getScript(filepath);
                            }
                        }
                        filelist.push(filepath);
                    }
                } 
                catch (e1) {
                    // in case it's not used
                }
            }
            // now do the id
           try {
                // load the file(s)
                filecount = plugin_data[pageId].filestoget.length;	
                callback = plugin_data[pageId].callback; 
                for (i = 0; i < filecount; i++) { 
                    // check filetype
                    filepath = plugin_data[pageId].filestoget[i];
                    filetype = filepath.substr(filepath.lastIndexOf('.') + 1);
                    if (filetype === 'css') { 
                        // first, has it already been loaded?
                        if (hasBeenLoaded(filepath)) 
                            continue;
                        // load the css file
                        $('head').append('<link rel="stylesheet" type="text/css" href="' + filepath + '" />');
                    } else {
                        // load the script file, run callback on last one only
                        if (i === filecount - 1) {
                            $.getScript(filepath, function(){
                                if (callback) RPF[callback]();
                            });
                        }
                        else {
                            $.getScript(filepath);
                        }
                    }
                    filelist.push(filepath);
                }
            }  catch (e2) {
                // in case it's not used
            }
        },
        
        // specific page-function loader, methods below        
        pageLoadFunctions: function(){
            var f, i;
            if (pagefunctions[pageId]) {
                try {
                    f = pagefunctions[pageId];
                    if (f.length > 1) {
                        for (i = 0; i < f.length; i++) {
                            RPF[f[i]]();
                        }
                    }
                    else {
                        RPF[f]();
                    }
                } 
                catch (e3) {
                }
            } else {
                var count = pageClasses.length;
                for (i = 0; i < count; i++) {
                    try {
                        var className = pageClasses[i];
                        f = pagefunctions[className];
                        if (f.length > 1) {
                            for (var j = 0; j < f.length; j++) {
                                RPF[f[j]]();
                            }
                        }
                        else {
                            RPF[f]();
                        }
                    } 
                    catch (e4) {
                    }
                }
            }
        },
        
        /***************************** Global Helpers *****************************/
        
        // put the page id and page classes into "globals" for access whenever needed
        getPageIdentities: function(){
            pageId = $(document.body).attr('id');
            var pageClass = $(document.body).attr('class');
            pageClasses = pageClass.split(' ');
        },
        
     
        /***************************** Plugin Callbacks *****************************/
        
        // when you don't need one
        dummy: function(){
            // do nothing
        },
        
		/*******************************************************************************************
         PUBLIC PROPERTIES AND METHODS
         *******************************************************************************************/
        
        /***************************** On-ready Functions, specific pages *****************************/

		// client-side form validation
		validateForm: function() {
			// get the token for the secure form
			$.get(site_url+'/action/token.php', function(txt) {
				$('form.secure').append('<input type="hidden" name="ts" id="ts" value="'+txt+'" />');
			}); 
				
			var formId, page_rules, page_messages;
			var formtype = $(':hidden[name="formtype"]').val();  
			switch (formtype) {
				case 'stay_informed':
					page_rules = {
						fname:		{ required: true },
						lname:		{ required: true },
						email:		{ required: true, email: true },
						ts:			{ required: true,
									  remote: {
											type: 'post',
											url: site_url + '/action/token.php',
											data: {
												hash: function(){return Cookie.read('token');}
											}
										}
									}	
					};
					page_messages = {
						fname:		'Your first name is required',
						lname:		'Your last name is required',
						email:		'Your email is required',
						ts:			'Please enable cookies on your browser, reload the page and try again'
					}; 
					formId = '#contactform'; 
					break;
				case 'volunteer':
					page_rules = {
						fname:			{ required: true },
						lname:			{ required: true },
						address1:		{ required: true },
						address2:		{ required: false },
						city:			{ required: true },
						state:			{ required: true },
						zip:			{ required: true, USzip: true },
						phone: 			{ required: true, phone: true },
						email:			{ required: true, email: true },
						ts:				{ required: true,
										  remote: {
												type: 'post',
												url: site_url + '/action/token.php',
												data: {
													hash: function(){return Cookie.read('token');}
												}
											}
										}		
					};
					page_messages = {
						fname:			'Your first name is required',
						lname:			'Your last name is required',
						address1:		'Your address is required',
						city:			'Your city is required',
						state:			'Your state is required',
						zip: 			'Your zipcode is required',
						phone:			'Your phone number is required',
						email:			'Your email is required',
						ts:				'Please enable cookies on your browser, reload the page and try again'
					};
					formId = '#volunteerform';
					break;
				case 'groupform':
					page_rules = {
						fname:			{ required: true },
						lname:			{ required: true },
						gname:			{ required: true },
						gcount:			{ required: true },
						gage:			{ required: true },
						address1:		{ required: true },
						address2:		{ required: false },
						city:			{ required: true },
						state:			{ required: true },
						zip:			{ required: true, USzip: true },
						phone: 			{ required: true, phone: true },
						email:			{ required: true, email: true },
						date:			{ required: true },
						ts:				{ required: true,
										  remote: {
												type: 'post',
												url: site_url + '/action/token.php',
												data: {
													hash: function(){return Cookie.read('token');}
												}
											}
											
												
										}	
					};
					page_messages = {
						fname:			'Your groupcontact\'s  first name is required',
						lname:			'Your group contact\'s last name is required',
						gname:			'Your group name is required',
						gcount:			'The number of people in your group is required',
						gage:			'The age range of your group is required',
						address1:		'Your address is required',
						city:			'Your city is required',
						state:			'Your state is required',
						zip: 			'Your zipcode is required',
						phone:			'Your phone number is required',
						email:			'Your email is required',
						date:			'The date you would like to volunteer is required',
						ts:				'Please enable cookies on your browser, reload the page and try again'	
					};
					formId = '#groupform';
					break;
				case 'hippo_contact':
					page_rules = {
						firstname:		{ required: true },
						lastname:		{ required: true },
						phone: 			{ required: true, phone: true },
						email:			{ required: true, email: true },
						when:			{ required: true },
						ts:				{ required: true,
										  remote: {
												type: 'post',
												url: site_url + '/action/token.php',
												data: {
													hash: function(){return Cookie.read('token');}
												}
											}
											
												
										}
					};
					page_messages = {
						firstname:		'Your first name is required',
						lastname:		'Your last name is required',
						email:			'Your email address is required',
						phone:			'Your phone number is required',
						when:			'Please tell us when you would like to rent the Parkhouse',
						ts:				'Please enable cookies on your browser, reload the page and try again'
					};
					formId = '#hippoform';
			}
			$(formId).validate({
				//debug:	true,
				errorContainer:			'#errors_js', // the div
				errorLabelContainer: 	'#errors_js ul', // the ul				
				errorElement:			'li', // the error
				highlight: 				function(element, errorClass) {
										     //$(element).addClass(errorClass);
										     $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
											 //$(element).fadeOut(function(){ $(element).fadeIn();} );
										  },
				unhighlight:			function(element, errorClass) {
										     //$(element).removeClass(errorClass);
										     $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
										  },
										
				invalidHandler:			function(){ // scroll up to the errors list
											var pos = $(formId).position();
											window.scrollTo(0, pos.top);
										},
				rules: 					page_rules,
				messages:				page_messages
			
			
			});
		}
		
	};
			
}();


