var eventsObj = function(){
	this.cBuffer = new ContentBuffer();
	this.serializer = new Serializer();
	this.evtData = {};
	this.uData = {};
	this.seatCt = [];
	this.eRolled = [];
}

eventsObj.prototype.Search = function(el, event){
	var status = 1;
	
	var city = Element.get("city").value;
	var state = Element.get("state").value;
	
	if(city == "City"){city = '';}
	if(state == "State"){state = '';}
	
	if(city || state){
		if(city && !state){
			status = 0;
			alert("Please enter a state.");
		}
		if(!city && state){
			status = 0;
			alert("Please enter a city.");
		}
	}
	
	if(status == 1){
	  var mainform = Element.get("frmLiveEvnts");
	  if(mainform){mainform.submit();}
	}
	
	return false;
}

eventsObj.prototype.Expand = function(el, event){
	var id = el.id.split('_')[1];
	this.data = this.serializer.deserialize(Element.get(id + "_data").value);
	this.uData = this.serializer.deserialize(Element.get(id + "_udata").value);
	this.enrolled = this.serializer.deserialize(Element.get(id + "_enrolled").value);
	this.enrolled = this.enrolled[id];
	if(this.eRolled[this.data.id] != true && this.eRolled[this.data.id] != false){
		this.eRolled[this.data.id] = this.enrolled;
	}
	
	
	if(el.className == 'condensed'){
		var openTRs = Element.parseSelector(".expanded", Element.get("eventsTBody"));
		
		for(var i = 0; i < openTRs.length; i++){
			if(openTRs[i]){this.CloseEvent(openTRs[i]);}
		}
		
		this.OpenEvent(el);
	}
	else{
		this.CloseEvent(el);
	}
}

eventsObj.prototype.OpenEvent = function(el){
	var id = el.id.split('_')[1];
	this.description = Element.get(id + "_desc").value;
	this.location = Element.parseSelector('.location', el, 'first');
	var topic    = Element.parseSelector('.evtTitle', el, 'first');
	var control = Element.parseSelector(".condense", el, 'first');
	if(!control){control = Element.parseSelector(".expand", el, 'first');}
	el.className = 'expanded';
  el.style.backgroundColor = '#F7EFE7';
  control.style.backgroundColor = '#F7EFE7';
	this.location.style.color = '#D26F10';
	topic.style.color = '#D26F10';
	topic.className = 'evtTitle bold';
	control.className = "expand";
	
	var row =  Element.create("tr", {id:el.id + "_panel", style:"background-color:#F7EFE7"});
	Element.create("td", {colspan:7}, this.GetExpandHTML(), row);
	Element.insertAfter(row,el);
	
	
	
	this.sTimeOut = window.setTimeout("events.EnableBtn()", 4000);
}

eventsObj.prototype.EnableBtn = function(){
	this.enrollBtn.disabled = false;
	clearTimeout(this.sTimeOut);
}

eventsObj.prototype.CloseEvent = function(el){
	var id = el.id.split('_')[1];
	this.description = Element.get(id + "_desc").value;
	this.location = Element.parseSelector('.location', el, 'first');
	var topic    = Element.parseSelector('.evtTitle', el, 'first');
	var control = Element.parseSelector(".condense", el, 'first');
	if(!control){control = Element.parseSelector(".expand", el, 'first');}
	el.className = 'condensed';
	el.style.backgroundColor = '#fff';
	control.style.backgroundColor = '#fff';
	topic.style.color = 'black';
	topic.className = 'evtTitle';
	this.location.style.color = '#0071BC';
	control.className = "condense";
	Element.remove(Element.get(el.id + "_panel"));
}

eventsObj.prototype.GetExpandHTML = function(){
	var container = Element.create('div');
	var leftSide = Element.create('div', {className:"floatLft",style:"width:290px;margin-left:12px;font-size:11px;"}, this.DrawLeftForm(), container);
	if(this.data.modType == 2){this.rightSide = Element.create('div', {className:"floatRt bold pt10", style:"width:210px;text-align:center"}, '<img src="../../common/img/icons/cancelled.gif" border="0" alt="cancelled" style="vertical-align:middle" /> This event has been cancelled.', container);}
	else{
	  if(this.eRolled[this.data.id]){this.rightSide = Element.create('div', {className:"floatRt bold pt10", style:"width:210px;text-align:center"}, '<img src="../../common/img/icons/enrolled.gif" border="0" alt="enrolled" style="vertical-align:middle" /> You are currently enrolled for this event.', container);}
	  else if(this.data.seats <= 0){this.rightSide = Element.create('div', {className:"floatRt bold pt10", style:"width:210px;text-align:center"}, "We're sorry, registration for this event is currently closed.<br />There are no remaining seats available.", container);}
	  else{this.rightSide = Element.create('div', {className:"floatRt",style:"width:210px;"}, this.DrawRightForm(), container);}
	}
	Element.create('div',{className:"clear"},'',container);
	return container;
}

eventsObj.prototype.DrawRightForm = function(){
	var container = Element.create('form',{name:"frmEvt" + this.data.id,action:"",method:"get", onsubmit:"return false;"});
	Element.create('div', {className:"bold"},"First Name",container);
	this.fName = Element.create('input',{type:"text",name:"fname",className:"formInput",value:this.uData.firstName},'',container);
	Element.create('div', {className:"bold"},"Last Name",container);
	this.lName = Element.create('input',{type:"text",name:"lname",className:"formInput",value:this.uData.lastName},'',container);
	Element.create('div', {className:"bold"},"Email Address",container);
	this.bevte = Element.create('input',{type:"text",name:"bevte",className:"formInput",value:''}, '',container);
	Element.create('div', {className:"bold"},"Daytime Phone",container);
	this.phone = Element.create('input',{type:"text",name:"phone",className:"formInput",value:''},'',container);
	var div = Element.create('div',{},'',container);
	this.stUser = Element.create('input', {type:"checkbox", name:"stuser", id:this.data.id + '_stuser'}, '', div);
	//if(this.uData.stUser){this.stUser.checked = true;}
	Element.create('label', {},"&nbsp;I am a Scottrade customer", div);
  
  var guestDiv = Element.create('div',{className:"guest"},'',container);
  var gInputDiv = Element.create('div', {id:this.data.id + "GLink_panel", className:"drkGryBorderB drkGryBorderT pt5 pb5", style:"display:none;"},'',guestDiv);
  Element.create('div', {className:"bold mb5"}, "Guests", gInputDiv);
	var guestLink = Element.create('a',{id:this.data.id + "GLink",className:"link_s",href:"javascript:void(0)"},'+ Add Guest',guestDiv);
	Events.add(guestLink, "click", this.ShowGuestInput, this);
	var div = Element.create('div', {}, '', gInputDiv);
	Element.create('div', {}, Element.create('label',{className:"bold"},"First Name"), div);
	Element.create('input',{type:"text",name:"gfname",id:"gFName",className:"formInput"}, '', div);
	div = Element.create('div', {}, '', gInputDiv);
	Element.create('div', {}, Element.create('label',{className:"bold"},"Last Name"), div);
	Element.create('input',{type:"text",name:"glname",id:"gLName",className:"formInput"}, '', div);
	this.guests = Element.create('input',{type:"hidden",name:"guestslist", id:this.data.id + '_guestList',value:''},'',div);
	var addGLink = Element.create('a', {href:"javascript:void(0)", id: this.data.id + "_addLink"}, "Add");
	Element.create('div', {style:"text-align:right; padding-right:10px;"}, addGLink, gInputDiv);
	Events.add(addGLink,"click",this.AddGuest,this);
	var enrollDiv = Element.create('div',{className:"enroll"},'',container);
	this.enrollBtn = Element.create('input',{type:"image",src:"../../common/img/buttons/enroll_button.gif",name:"enroll", disabled:true},'',enrollDiv);
	Events.add(this.enrollBtn,"click",this.Enroll,this);
	this.email = Element.create('input',{type:"text",name:"email",className:"formInput",value:'',tabindex:100,style:"position:absolute;top:-1000px;"},'',container);
	
	return container;
}

eventsObj.prototype.DrawLeftForm = function(){
	if(!this.seatCt[this.data.id] && this.seatCt[this.data.id] != 0){
		this.seatCt[this.data.id] = this.data.seats;
	}
	
	var html = [];
	html.push('<div class="formLeft">');
	html.push('  <div class="leftHeader"><span id="' + this.data.id + '_seatCount">' + this.seatCt[this.data.id] + '</span> seats remaining</div>');
	html.push('  <div class="details">' + this.description + '</div>');
	html.push('  <div class="address">');
	html.push('    <div class="mb5">Hosted By:</div>');
	html.push('    <div class="bold mb3">' + this.data.location + '</div>');
	if(this.data.address && this.data.city && this.data.state && this.data.zip){
	  html.push('    <div class="mb5">' + this.data.address + '<br />' + this.data.city + ', ' + this.data.state + ' ' + this.data.zip + '</div>');
	}
	if(this.data.phone){html.push('    <div class="mb3">(P) ' + this.data.phone + '</div>');}
	if(this.data.phone2){html.push('    <div class="mb3 pl20">' + this.data.phone2 + '</div>');}
	if(this.data.fax){html.push('    <div class="mb5">(F) ' + this.data.fax + '</div>');}
	html.push('    <div><a class="bold" href="mailto:support@scottrade.com?subject=Branch Event: ' + this.data.title + ' (event: ' + this.data.id + ')">support@scottrade.com</a>'); 
	html.push('  </div>');
	html.push('</div>');
	
	return html.join('');
}

eventsObj.prototype.ShowGuestInput = function(evt, el){
	Element.get(el.id + '_panel').style.display = "block";
}

eventsObj.prototype.AddGuest = function(evt, el){
	var id = el.id.split('_')[0];
	var panel = Element.get(id + 'GLink_panel');
	var listHolder = Element.get(id + '_guestList');
	var fname = Element.get("gFName");
	var lname = Element.get("gLName");
	var currentGuests = 1;
	
	if(listHolder.value){
	  if(listHolder.value.indexOf('|') > -1){
		  currentGuests += listHolder.value.split('|').length;
	  } else {
	  	currentGuests++;
	  }
	}
	
	if(currentGuests < this.seatCt[this.data.id]){
	  if(fname.value && lname.value){
		  var name = fname.value + ' ' + lname.value;
		  
		  var curList = listHolder.value;
		  if(curList){
		    if(curList.indexOf('|') > -1){var names = curList.split('|');}
		    else{var names = [curList];}
		    var newlist = [];
		    newlist.push(name);
		    for(var i = 0; i < names.length; i++){if(names[i] != name){newlist.push(names[i]);}}
		    listHolder.value = newlist.join('|');
		  }
		  else{listHolder.value = name;}
		
		  Element.create('div', {}, name, panel);
		  fname.value = '';
		  lname.value = '';
	  }
	  else{alert("You must enter the guest's first and last name")};
	}else{alert("No more seats available");}
}

eventsObj.prototype.Enroll = function(evt, el){
	var error = false;
	var entered = {};
	entered.firstName = this.fName.value;
	entered.lastName = this.lName.value;
	entered.email = this.email.value;
	entered.bevte = this.bevte.value;
	entered.phone = this.phone.value;
	entered.stUser = this.stUser.checked;
	
	for(var name in entered){
		if(name != "stUser" && name != "email" && entered[name] == ''){
			error = true;
			alert("All enrollment fields are required.");
			break;
		}
		else if(name == "email"){
			
		}
		else if(name == "bevte"){
			if(!this.ValidateEmail(entered[name])){
				error = true;
				alert("Please provide a valid email.");
				break;
			}
		}
		else if(name == "phone"){
			if(!this.ValidatePhone(entered[name])){
				error = true;
				alert("Phone Number Must Be Entered As: (xxx) xxx-xxxx or xxx-xxx-xxxx");
				break;
			}
		}
	}
	
	if(!error){
		this.enrollBtn.disabled = true;
		entered.guests = this.guests.value;
		this.seatCt[this.data.id] -= 1;
		if(entered.guests){
		  this.seatCt[this.data.id] -= entered.guests.split('|').length;
		}
		var obj = {};
		obj.data = this.serializer.serialize(this.data);
		obj.uData = this.serializer.serialize(this.uData);
		obj.entered = this.serializer.serialize(entered);
		this.Buffer(this.EnrollStatus, obj);
	}
	
	Events.cancel(evt);
}

eventsObj.prototype.EnrollStatus = function(buffer){
	var result = this.serializer.deserialize(buffer.getResult());
	
	if(result){
    result.msg = decodeURIComponent(result.msg);
    
		if(result.error < 1 && !this.email.value){
			Element.get("enrolled_" + result.eventId).innerHTML = '<img class="checkBox" src="../../common/img/icons/enrolled.gif" border=0 alt="enrolled" style="vertical-align:middle" />';
			var img = Element.create('img', {className:"checkBox", src:"../../common/img/icons/enrolled.gif", border:0, alt:"enrolled", style:"vertical-align:middle"});
			this.rightSide.innerHTML = '';
			this.rightSide.appendChild(img);
			this.rightSide.appendChild(document.createTextNode(result.msg));
			this.rightSide.className = "floatRt bold pt10";
			this.rightSide.style.textAlign = "center";
			Element.get(result.eventId + '_seatCount').innerHTML = this.seatCt[this.data.id];
			this.eRolled[this.data.id] = true;
		}
    else{alert(result.msg)}
	}
	
	this.enrollBtn.disabled = false;
}

eventsObj.prototype.ValidateEmail = function(email){
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(email)){return true;}
	return false;
}

eventsObj.prototype.ValidatePhone = function(pNum){
  var regPhone1 = new RegExp(/^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/);
  var regPhone2 = new RegExp(/^[2-9]\d{2}-\d{3}-\d{4}$/);
  if(regPhone1.test(pNum) || regPhone2.test(pNum)){return true;}
  return false;
}

eventsObj.prototype.TogglePins = function(el, evt, pin){
	if(el && pin){
		if(pin == "dot_green"){
			var listing = Element.get("summitListings");
		} else {
			var listing = Element.get("branchListings");
		}
		
		var pins = Element.parseSelector('.' + pin, Element.get("leftSide"));
		for(var i = 0; i < pins.length; i++){
		  if(el.checked){
			  pins[i].style.display = "block";
			  listing.style.display = "block";
			} else {
				pins[i].style.display = "none";
				listing.style.display = "none";
			}
		}
	}
}

eventsObj.prototype.Error = function(buffer){}

eventsObj.prototype.Buffer = function(callback, data){
	this.cBuffer.load({
		url:"../../common/buffer/eventsBuffer.asp",
		data:data,
		method:"post",
		onload:callback,
		onerror:this.Error,
		contentType:"text/javascript",
		context:this,
		debug:true
	});
}

var events = new eventsObj();

function CheckToOpenEvent(){
  if(eId && eId != undefined){
    var rowToOpen = Element.get("evt_" + eId);
    if(rowToOpen){events.Expand(rowToOpen, '');}
  }
}

Events.add({element:window, type:"load", handler:CheckToOpenEvent});