// JavaScript Document
function showAddComment() {
	$('add-comment-link').setStyle('display','none');
	$('add-comment-form').setStyle('display','block');
}
var name, comments;

//Used by the contact us page. Recaptcha will not automatically show multiple
//recaptchas per page.
//Use: one proper recaptcha must be inserted into the page.  For all of the other
//recaptcha spots, just put a div tag with the class "recaptcha_spot", this function
//will do the rest.
function duplicateRecaptchas() {
    $$('.recaptcha_spot').each( function(spot) {
        $('recaptcha_widget_div').clone().inject(spot);
    });
}

function loadDOM() {
	if( page_name=='contact_list' ) {
		selected_contacts = '';
		set_up_selected();
        convert_filter_submit();
		set_up_contacts_table();
	} else { 
		if( photoAlbum )
			loadPhotoAlbum();
		if( eventsPage )
			loadEventsDOM();
		if( loggedIn ) {
			new DropDownMenu('.dropheader', '.dropdown');
			if( hasEditFields )
				loadEditFields();
		}
	}
}

function loadPhotoAlbum() {
	if( hasPhotos )
		loadCommentForm();
	if( loggedIn ) {
		loadFancyUpload();
		if( fullAccess )
			loadGroupSortables();
	}
}

function showHideWithSelected() {
	var selected = false;
	$$('.thumb-check').each(function(i) { selected = i.checked || selected });
	if( selected ) $('with-selected').setStyle('display','block');
	else $('with-selected').setStyle('display','none');
}

function loadCommentForm() {
	//Load Comment Form
	$('add-comment-form').addEvent('submit', function(e) {
		new Event(e).stop(); //prevent form submit
		
		var f = $('add-comment-form');
        var name = $('myname').value;
        var comments = $('mycomment').value;
        var id = $('imageid').value;
		
		new Request({'url': f.action,
                     'method': 'post',
                     'data': 'comments='+encodeURIComponent(comments)+'&imageid='+id+'&name='+encodeURIComponent(name),
            onRequest: function() {
				f.set('html','<img src="images/ajax-loader.gif" />');
			},
			onComplete: function() {
				f.setStyle('display','none');
				var li = new Element('li');
				li.set('html',comments+'<div class="author">'+name+'</div>')
				li.injectInside('comments');
			}}).send();
	});
}

function loadFancyUpload() {
		//New Upload
    var up = new FancyUpload2($('upload-status'), $('upload-list'), { // options object
        // we console.log infos, remove that in production!!
        verbose: true,
        url: $('photoupload').action,
        path: 'Swiff.Uploader.swf',
        typeFilter: {
            'Images (*.jpg, *.jpeg)': '*.jpg; *.jpeg;'
        },

        // this is our browse button, *target* is overlayed with the Flash movie
        target: 'upload-browse-images',

        // graceful degradation, onLoad is only called if all went well with Flash
        onLoad: function() {
            $('upload-status').removeClass('hide'); // we show the actual UI
            $('upload-fallback').destroy(); // ... and hide the plain form

            // We relay the interactions with the overlayed flash to the link
            this.target.addEvents({
                click: function() {
                    return false;
                },
                mouseenter: function() {
                    this.addClass('hover');
                },
                mouseleave: function() {
                    this.removeClass('hover');
                    this.blur();
                },
                mousedown: function() {
                    this.focus();
                }
            });

            // Interactions for the 2 other buttons

            $('upload-clear').addEvent('click', function() {
                up.remove(); // remove all files
                return false;
            });

            $('upload-upload').addEvent('click', function() {
                up.start(); // start upload
                return false;
            });
        },

        // Edit the following lines, it is your custom event handling

        /**
		 * Is called when files were not added, "files" is an array of invalid File classes.
		 *
		 * This example creates a list of error elements directly in the file list, which
		 * hide on click.
		 */
        onSelectFail: function(files) {
            files.each(function(file) {
                new Element('li', {
                    'class': 'validation-error',
                    html: file.validationErrorMessage || file.validationError,
                    title: MooTools.lang.get('FancyUpload', 'removeTitle'),
                    events: {
                        click: function() {
                            this.destroy();
                        }
                    }
                }).inject(this.list, 'top');
            }, this);
        },

        /**
		 * This one was directly in FancyUpload2 before, the event makes it
		 * easier for you, to add your own response handling (you probably want
		 * to send something else than JSON or different items).
		 */
        onFileSuccess: function(file, response) {
            this.fileRemove(file);
        },

        onComplete: function() { window.location.reload(true) },

        /**
		 * onFail is called when the Flash movie got bashed by some browser plugin
		 * like Adblock or Flashblock.
		 */
        onFail: function(error) {
            switch (error) {
                case 'hidden': // works after enabling the movie and clicking refresh
                    alert('To enable the embedded uploader, unblock it in your browser and refresh (see Adblock).');
                    break;
                case 'blocked': // This no *full* fail, it works after the user clicks the button
                    alert('To enable the embedded uploader, enable the blocked Flash movie (see Flashblock).');
                    break;
                case 'empty': // Oh oh, wrong path
                    alert('A required file was not found, please be patient as we fix this.');
                    break;
                case 'flash': // no flash 9+ :(
                    alert('To enable the embedded uploader, install the latest Adobe Flash plugin.')
            }
        }

    });
}

function loadGroupSortables() {
	new Sortables($('navbar'), { handle: 'img',
			onComplete: function() {
				var order = '';
				$$('#navbar li').each(function(g,i) {
					order += g.title + 'A' + i + '-';
				});
				order = order.substr(0, order.length-1);
				new Request({url: 'change-order.php', method: 'post',data: 'o='+order}).send();
			} });
}

function loadEditFields() {
	myNicEditor = new nicEditor({iconsPath : 'includes/nicEditorIcons.gif',fullPanel : true});
				 myNicEditor.setPanel('edit-bar');			 
				 $$('.edit_field').each(function(ef){
						myNicEditor.addInstance(ef);
				});
}

function renameAlbum(id,name) {
    var name = prompt("Rename this group:",name);
    if( name!='' ) {
        window.location = "index.php?do=rename&g="+id+"&to="+encodeURIComponent(name.trim());
    }
}

function saveEditFields() {
	var post_value = '';
	$$('.edit_field').each( function(ef) {
			post_value += ef.id + '=' + encodeURIComponent(myNicEditor.instanceById(ef.id).getContent()) + '&';
		});
	post_value = post_value.substr(0, post_value.length-1);
	
	$('edit-save').value = '   Saving...   ';
	$('edit-save').setProperty('disabled','true');
	
	new Request({url: 'includes/edit-fields.php',
							method:'post',
						onSuccess: function(){
					 		$('edit-save').value = '   Save Changes   ';
							$('edit-save').removeProperty('disabled');
					 } }).send(post_value);
}

/* Contact LIst Functions */
function set_up_selected() {
	selected_contacts = '';
	mail_tos = '';
	$('contactlist').getElements('input[checked]').each(function(box) {
			selected_contacts += '|' + box.value + '|';
			var email_link = box.getParent('tr').getElement('.email_link');
			if( email_link ) {
				mail_tos += email_link.get('href').substr(7) + ',';
			}
			mail_tos = mail_tos.substr( 0, mail_tos.length-1 );
		});	
	
	$('send_email_link').set('href','mailto:'+mail_tos);
	update_pages_selected_contacts();
}

function convert_filter_submit() {
    if( !listReq ) {
       listFx = new Fx.Tween('contactlist_container',{'link':'cancel'});

       listReq = new Request({'url':'get_list.php',
            'method':'post',
            'onRequest':function() {
                if($('type_filter').selectedIndex!=0 || $('q').value!='' || $('subgroup_filter').selectedIndex!=0 )
                    $('clear_filter_link').setStyle('display','inline');
                else
                    $('clear_filter_link').setStyle('display','none');
                listFx.start('opacity',0);
            },
            'onSuccess':function(responseText,responseXML) {
                $('contactlist_container').innerHTML = responseText;
                listFx.cancel();
                listFx.set('opacity',1);
                selected_contacts = '';
                set_up_selected();
                set_up_contacts_table();
            },
            'onFailure':function(){
                alert('The request failed.  Please try again.');
                listFx.cancel();
                listFx.set('opacity',1);
            }});
   }

    $('filter_form').addEvent('submit',function(e){
       new Event(e).stop(); //stop submit

       contactListRequest();
    });
}

function clear_filter() {
    $('q').value='';
    $('type_filter').selectedIndex=0;
    $('subgroup_filter').selectedIndex=0;
    contactListRequest();
}

function contactListRequest() {
    listReq.send('q='+enc($('q').value)+'&type='+enc(option_val($('type_filter')))+'&if='+enc($('subgroup_filter').value)+'&ob='+enc($('ob').value));
}

function enc(s) {
    return encodeURIComponent(s);
}
function option_val(opt) {
    return opt.options[opt.selectedIndex].value;
}

function update_pages_selected_contacts() {
	if( selected_contacts=='' )
		$('with_selected').setStyle('display','none');
	else
		$('with_selected').setStyle('display','block');
	$('selected1').value = selected_contacts;
	$('selected2').value = selected_contacts;
	$('selected3').value = selected_contacts;
	$('edit_selected_link').set('href','contact_list_edit.php?ids=' + selected_contacts);
	if( $('delete_selected_link') )
        $('delete_selected_link').set('href','contact_list.php?r=' + selected_contacts);
	$('export_selected_link').set('href','contacts_list.xls.php?ids=' + selected_contacts);
}

function set_up_contacts_table() {
	$('contactlist').getElements('tr').each(function(tr) {
		if( !tr.hasClass('header_row') ) {
			tr.addEvent('mouseenter', function(ev) { //Add popout list events
				tr.getElements('.popout_list').each(function(list) { //each popout list
					span = list.getElement('span');
					if( span ) {
						choords = list.getCoordinates();
						span.setStyles({
								left: choords.left,
								top: choords.top+1,
								width: choords.width-6,
								visibility: 'visible'
						});
					}
				});
			});
			tr.addEvent('mouseleave', function(ev) { //Add popout list events
				tr.getElements('.popout_list').each(function(list) { //each popout list
					span = list.getElement('span');
					if( span ) span.setStyle('visibility','hidden');
				});
			});
            var td = tr.getElements('td');
			for( var i=1; i<td.length; ++i ) {
                td[i].addEvent('click',function(ev) {
                    input = tr.getElement('input');
                    input.checked = !input.checked;
                    adjust_selected( input );
                });
            }
		}
	});
    $$('#contactlist th a').each(function(link) {
        link.addEvent('click',function(e){
           $('ob').value = this.id.substr(7);
           contactListRequest();
        });
    });
}

function adjust_selected( box ) {
	box = $(box);
	//Get E-Mail from Box
	var href;
	var email_link = box.getParent('tr').getElement('.email_link');
	if( email_link )
		href = $('send_email_link').get('href');
	if( box.checked ) {
		selected_contacts += '|' + box.value + '|';
		//Update the e-mail selected link
		if( email_link ) {
			if( href.substr(href.length-1) == ':' )
				href += email_link.get('href').substr(7);
			else
				href += ',' + email_link.get('href').substr(7);
			$('send_email_link').set('href',href);
		}
	} else {
		selected_contacts = selected_contacts.replace('|' + box.value + '|', '');
		//Update the e-mail selected link
		if( email_link ) {
			href = href.replace(email_link.get('href').substr(7),'');
			if( href.search(',,')!=-1 )
				href = href.replace(',,',',');
			else if( href.substr( href.length-1 )==',' )
				href = href.substr( 0, href.length-1 );
            else if( href.search(':,')!=-1 )
                href = href.replace(':,',':');
			$('send_email_link').set('href',href);
		}
	}
	
	update_pages_selected_contacts();
}

function add_subgroup_selected(selector) {
    if( option_val(selector)=='other' ) {
        $('add_new_subgroup').setStyle('display','inline');
        $('add_new_subgroup').blur();
    } else {
        $('add_new_subgroup').setStyle('display','none');
    }
}

//Used for when the user clicks the "check all" box at the top of the list
function check_all(box) {
    var allboxes = $$('.with_selector');
    allboxes.each(function(s) {
        s.checked = box.checked;
    });

    if( !box.checked ) {
        selected_contacts = '';
        $('send_email_link').set('href','mailto:');
    } else {
        selected_contacts = '';
        href = '';
        allboxes.each(function(s) {
            selected_contacts += '|'+s.value+'|';
        });
        $$('.email_link').each(function(l){
            href += l.get('href').substr(7)+',';
        });
        $('send_email_link').set('href','mailto:'+href.substr(0,href.length-1));
    }

    update_pages_selected_contacts();
}

//Shows/hides special fields just for member
function set_add_form_type(opt) {
    //opt[1]==General Contact, else member
    $$('.member_row').each(function(td){td.setStyle('display',opt.selectedIndex==1 ? 'none' : 'table-row')});
}

function confirm_password(field) {
    if( field.value!=$('add_password').value ) {
        alert('The passwords do not match.\nPlease re-enter your password.');
        field.value = '';
        $('add_password').value = '';
        $('add_password').focus();
    }
}

function validate_add_form() {
    var error = new Array();
    var requiredFields = [['add_first_name','First Name'],['add_last_name','Last Name'],['add_email','E-Mail']];
    if( $('add_type').selectedIndex!=1 ) { //Member or Alumni
        requiredFields.push(['add_phone','Phone']);
        requiredFields.push(['add_password','Password']);
        requiredFields.push(['add_username','Username']);

        if( $('add_password_confirm').value!=$('add_password').value )
            error.push('Your passwords do not match.');
    }

    var missing = new Array();
    requiredFields.each(function(f){
       if( $(f[0]).value.length==0 ) missing.push(f[1]);
    });
    
    if( missing.length ) {
        error.push("The following firelds are required:\n"+missing.join(', '));
    }

    //Test for valid e-mail
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if( !filter.test($('add_email').value) ) {
        error.push('Please enter a valid e-mail address.');
    }


    if( error.length ) {
        alert(error.join("\n\n"));
        return false;
    }
    return true;
}


function limit_selected_ids() {
    var sel = $$('.with_selector');
    for( var i=0; i<sel.length; ++i ) {
       if( sel[i].checked ) {
           var cl = sel[i].getParent().getParent().getProperty('class');
           if( cl!='even' && cl!='odd' ) {
               alert('You cannot edit Active Members or Alumni');
               return false;
           }
       }
    }
    return true;
}

// EDIT CONTACT LIST
function editList_set_type(opt,id) {
    $(id+'_member_row').setStyle('display',opt.selectedIndex==1 ? 'none' : 'table-row')
}

//Manage subgroups
function subgroups_rename(name,id) {
    var new_name = prompt("Rename this subgroup subgroup:",name);
    if( new_name!=null && new_name!=name )
        window.location = php_url_chop(document.location.href)+'?rename='+id+'&name='+encodeURIComponent(new_name);
}

//removes everything after .php
function php_url_chop(url) {
    return url.substr(0,url.indexOf('.php')+4);
}