// JavaScript Document	

document.observe('dom:loaded', function(){	
							
	//Select Elements 
	$$('label select').each(function(selectItem){
		
		selectItem.ancestors()[1].addClassName('background');
		if(selectItem.identify() == "Institution_ID"){
			
			newInputText = new Element('input',{'type':'text','autocomplete':'off'});
			newInputVal = new Element('input',{'type':'hidden','name':selectItem.name});
			
			//set up search box
			var strInitialText = '';
			newInputText.value = strInitialText;
			Event.observe(newInputText, 'focus', function(event){
					if(this.value==strInitialText)this.value=''
					newInputVal.value='';
			});
			
			
			dropdownList = new Element('ul',{'class':'dropdown hidden'})
			
			//dropdownOption = new Element ('li',{'id':'val_0','class':'show'}).update('I\'m not sure yet.');
			//dropdownList.insert({'bottom':dropdownOption});
			
			selectItem.childElements().each(function(option){
				dropdownOption = new Element ('li',{'id':'val_'+option.value,'class':'show'}).update(option.innerHTML);
				dropdownList.insert({'bottom':dropdownOption});
				if(option.readAttribute('selected')!=null && option.readAttribute('selected')!=false && option.value != 'NULL'){
					//console.log(option.readAttribute('selected'));
					newInputText.value = option.innerHTML;
					newInputVal.value = option.value;
				}
				
				Event.observe(dropdownOption, 'click', function(event){	
						newInputText.value = this.innerHTML;
						newInputVal.value = this.identify().replace('val_','');
						
						$$('ul#'+dropdownList.identify()+' li.focus').each(function(focussedOption){
								focussedOption.removeClassName('focus');
						});
						this.addClassName('focus');
						dropdownList.addClassName('hidden');
				}); 
			
			});
			
			//dropdownOption = new Element ('li',{'id':'val_0','class':'show nohide'}).update('Not listed.');
			//dropdownList.insert({'bottom':dropdownOption});
			
			// WHEN SEARCH TERM IS ENTERED
			Event.observe(newInputText, 'keyup', function(event){
				var key = event.which || event.keyCode;
				//arrow keys
				switch(key){
						case 13:
							newInputText.value = $$('ul#'+dropdownList.identify()+' li.focus')[0].innerHTML;
							newInputVal.value = $$('ul#'+dropdownList.identify()+' li.focus')[0].identify().replace('val_','');
							dropdownList.addClassName('hidden');
							Event.stop(event);
						break;
						case 38:
						case 40:
						break;
						default:
							dropdownList.removeClassName('hidden');
							__narrowList(newInputText.identify(),dropdownList.identify());
						break;
					}		
		 
			});
			
			// WHEN UP DOWN ARROWS ARE USED
			Event.observe(newInputText, 'keydown', function(event){
				var key = event.which || event.keyCode;
				//arrow keys				
					switch(key){
						case 13:
							Event.stop(event);
						break;
						case 38:
							__selectListUp(dropdownList.identify());
						break;
						case 40:
							__selectListDown(dropdownList.identify());
						break;
					}		
			});
			
			Event.observe(newInputText, 'blur', function(event){
				if(this.value==''){this.value=strInitialText}
				
				new PeriodicalExecuter(function(pe) {
					dropdownList.addClassName('hidden');
					newInputText.value = $$('ul#'+dropdownList.identify()+' li.focus')[0].innerHTML;
					newInputVal.value = $$('ul#'+dropdownList.identify()+' li.focus')[0].identify().replace('val_','');
					pe.stop();
				}, 0.2);

			});

			
			//newInputText.focus();
			
			Event.observe(newInputText, 'focus', function(event){	
				dropdownList.removeClassName('hidden');
			});
			
			Event.observe(newInputText, 'click', function(event){	
				dropdownList.removeClassName('hidden');
			});
			
			
			selectItem.ancestors()[0].addClassName(selectItem.identify());
			
			selectItem.ancestors()[0].insert({'bottom':newInputText});
			selectItem.ancestors()[0].insert({'bottom':newInputVal});
			selectItem.ancestors()[0].insert({'bottom':dropdownList});
			
			if($$('ul#'+dropdownList.identify()+' li.focus').size() <1){
				$$('ul#'+dropdownList.identify()+' li.show')[0].addClassName('focus');
			}
			//dropdownList.childElements()[0].addClassName('focus');
			
			
		}else{
			
			optionContainer = new Element('span',{'class':'container '+selectItem.identify()});
			selectItem.childElements().each(function(option){
				
				optionNew = new Element('span',{'class':'input '+option.innerHTML}).update(option.innerHTML);
				optionInput = new Element('input',{'class':'radio','type':'radio','value':option.value,'name':selectItem.name});
				//optionNew.insert({before:selectItem});
				
				optionNew.insert({'bottom':optionInput});
				optionContainer.insert({'bottom':optionNew});

				/* Default Values */
				//curValue = $$(
				if(option.readAttribute('selected')!=null && option.readAttribute('selected')!=false){
					optionNew.addClassName('selected');
					optionNew.childElements()[0].writeAttribute('checked','checked');
				}
				/*
				
				if(option.value == 3 && selectItem.identify() == 'CourseLength'){
					optionNew.addClassName('selected');
					optionNew.childElements()[0].writeAttribute('checked','checked');
				}
				if(option.value == 'Home Address' && selectItem.identify() == 'Address'){
					optionNew.addClassName('selected');
					optionNew.childElements()[0].writeAttribute('checked','checked');
				}
				*/
				
				Event.observe(optionNew, 'click', function(event){	
					this.siblings().each(function(optionButton){
						optionButton.removeClassName('selected');
						optionButton.childElements()[0].removeAttribute('checked');
					});
					this.addClassName('selected');
					this.childElements()[0].writeAttribute('checked','checked');
				});
				//alert('here');
			});
			labelCont = selectItem.ancestors()[0];
			labelCont.insert(optionContainer);
		}
		
		//selectItem.remove();
		selectItem.hide();
		selectItem.disable();
																				 
	});
		
	// Checkbox Extra Info
	
	$$('label.checkbox span span').each(function(spanExtra){
			spanExtra.hide();
			//insert link to parent
			
			moreInfo = new Element('b',{'class':'Info more'}).update('More Info');
			
			//alert(spanExtra.ancestors()[0].identify());
			
			Event.observe(moreInfo, 'click', function(event){	
				//alert('click__'+moreInfo);
			
				if(this.hasClassName('more')){
				
					this.removeClassName('more');
					this.addClassName('less');
					this.update('Less Info');

					Effect.BlindDown(this.nextSiblings()[0].identify());
				
					
				}else{
					
					this.removeClassName('less');
					this.addClassName('more');
					this.update('More Info');

					Effect.BlindUp(this.nextSiblings()[0].identify());
					
				}
		
				Event.stop(event);
				
			});
			
			spanExtra.insert({before:moreInfo});			
			
	});

});


function __narrowList(srcBox_id,list_id){

		// break into array at spaces
		var terms = $(srcBox_id).value.stripTags().toLowerCase().split(" ");
		//cycle through items to compare with search terms
		
		$(list_id).childElements().each(function(prodEntry){
			prodEntry.removeClassName('focus');
			// intital value gets overwritten with 'hidden' if search fails
			var searchFind = true;
			// cycle through search terms array and try to match
			terms.each(function(srcTerm){
				if(prodEntry.innerHTML.stripTags().toLowerCase().match("("+srcTerm+")")<1){
					//no match therefore overwrite search match as false
					searchFind = false
				}
			});
			//hide if part of the search was not found
			if(searchFind == false && !prodEntry.hasClassName('nohide')){
				prodEntry.addClassName('hidden');
				prodEntry.removeClassName('show');
			}else{
				prodEntry.removeClassName('hidden');				
				prodEntry.addClassName('show');
			}
		});
		
		if($$('ul#'+list_id+' li.show').size() >0){
			$$('ul#'+list_id+' li.show')[0].addClassName('focus');
		}
		
}


function __selectListDown(list_id){
	var intCurr = __selectListCurrent(list_id);
	console.log(intCurr);
	var obCurrentSel = $$('ul#'+list_id+' li.show')[intCurr];
	
	if($$('ul#'+list_id+' li.show').size()>(intCurr+1)){
		
		//manage focus (styling identifyer)
		obCurrentSel.removeClassName('focus')
		obNewSel =  $$('ul#'+list_id+' li.show')[intCurr+1];
		
		obNewSel.addClassName('focus');
		//check container position leaves it on display
		var objectOffset = obNewSel.positionedOffset();
		var objectDimensions = obNewSel.getDimensions();
		var containerDimensions = $(list_id).getDimensions();
		//obNewSel.writeAttribute('title',objectDimensions.height + offsetTop);
		if((objectOffset.top+objectDimensions.height) > (containerDimensions.height + $(list_id).scrollTop)){
			$(list_id).scrollTop = objectOffset.top + objectDimensions.height -containerDimensions.height;
		}else if(objectOffset.top < $(list_id).scrollTop){
			$(list_id).scrollTop = objectOffset.top;
		}
		
	}
}

function __selectListUp(list_id){
	var intCurr = __selectListCurrent(list_id);
	//alert(intCurr);
	var obCurrentSel = $$('ul#'+list_id+' li.show')[intCurr];
	//alert(obCurrentSel); 
	//alert($$('div#listProducts form.show').size()+ '  >  '+(intCurr+1));
	if(intCurr > 0){
		//manage focus (styling identifyer)
		obCurrentSel.removeClassName('focus')
		obNewSel =  $$('ul#'+list_id+' li.show')[intCurr-1];
		
		obNewSel.addClassName('focus');
		//check container position leaves it on display
		var objectOffset = obNewSel.positionedOffset();
		var objectDimensions = obNewSel.getDimensions();
		var containerDimensions = $(list_id).getDimensions();
		//obNewSel.writeAttribute('title',objectDimensions.height + offsetTop);
		if(objectOffset.top < $(list_id).scrollTop){
			$(list_id).scrollTop = objectOffset.top;
		}else if((objectOffset.top+objectDimensions.height) > (containerDimensions.height + $(list_id).scrollTop)){
			$(list_id).scrollTop = objectOffset.top + objectDimensions.height -containerDimensions.height;
		}
		
	}
}


function __selectListCurrent(list_id){
	var count = 0;
	var currOutput = 0;
	$$('ul#'+list_id+' li.show').each(function(possEntry){
		//alert(possEntry.readAttribute('class'));
		if(possEntry.hasClassName('focus')){
			currOutput = count;
		}
		count ++;
	});
	return currOutput;
}

