var Page;
var Menu;
var Edit;
var Site;


window.addEvent('domready',function(){
	Site=new SiteClass();	
});

window.addEvent('unload',function(){
	GUnload();
});

var SiteClass=new Class({
	Menu:null,
	Edit:null,
	Page:null,
	initialize:function(ajax){
		if(!ajax){
			this.Menu=new MenuClass();
			this.login_config();
		}
		this.Edit=new EditClass();
		this.Page=new PageClass();
		var title=$('title');
		if(title){
			document.title=('LimestoneAgency: '+title.value);
		}
	},
	login_config:function(){
		var l=$('login_link');
		if(l){
			l.addEvent('click',function(e){
				if(e) new Event(e).stop();
				$('login_form').setStyle('display','block');
				this.setStyle('display','none');
			});
			var f=$('login_form');	
			var sub=f.getElements("input.submit")[0];
			$('login_form').addEvent('submit',function(e){
				var w=this.getParent().getElements("img.working")[0];
				w.setStyle('display','block');
				var u=$('username').value;
				var p=$('password').value;
				if(u=='' || p==''){
					alert('Please enter a username and password');
					if (e) new Event(e).stop();
				}
				var c=new Element("input");
				c.type='hidden';
				c.name='data[controller]';
				c.value=$('controller').value;
				this.adopt(c);
			});
		}
		else{
			var l=$('logout_link');
			if(l){
				l.addEvent('click',function(){
					this.href+="/";
					this.href+=$('controller').value;
				});
			}
		}
	},
	login_result:function(res){
		alert(res.username);
	}
});

var RolloverClass=new Class({
	rollovers:[],
	start:function(){
		var ros=$$('div.rollover div');
		ros.each(function(ro){
			ro.setStyle('background-position','0px 0px');
			this.rollovers.push(
					(function(){
					 	new Fx.Style(this,'opacity',{
										duration:500,
										onComplete:function(){
											this.setStyle('background-position',(parseInt(this.getStyle('background-position').replace('px 0px',''))+200)+"px");
											new Fx.Style(this,'opacity',{duration:500}).start(0,1); 
									 	}.bind(this)
									}).start(1,0);
					}).periodical(5000,ro));
		}.bind(this));
	},
	stop:function(){
		this.rollovers.each(function(ro){
			$clear(ro);
		});
		this.rollovers=[];
	}
});

var PageClass=new Class({
	controller:null,
	page:null,
	initialize:function(){
		this.controller=$('controller').value;	
		if(this.controller){
			eval("var page_def=$defined("+this.controller.capitalize()+"Class);");
			if(page_def){
				eval("this.page=new "+this.controller.capitalize()+"Class();");
			}
		}
	}
});


var EditClass=new Class({
	edit_link:null,
	initialize:function(){
		this.edit_link=$('edit_link');
		if(this.edit_link){
			this.ajax_config();
		}
	},
	ajax_config:function(){
		this.edit_link.removeEvents('click');
		this.edit_link.href=$('url').value.replace('index','edit');
		this.edit_link.addEvent('click',function(e){
			if(e) new Event(e).stop();					
			new Ajax(this.edit_link.href,{update:$('content'),onComplete:function(){
					tinyMCE.init({
						mode:"textareas",
						theme:"advanced",
						theme_advanced_buttons1:"bold,italic,underline,link,bullist,numlist",
						theme_advanced_buttons2:"",
						theme_advanced_buttons3:"",
						init_instance_callback:function(ed){
							tinyMCE.get(ed.id).setContent(ed.value);
						},
						fix_nesting:true,
						convert_newlines_to_brs:true,
						verify_html:true
					});
		
					if($defined(Site.Page.edit_config)){
						Site.Page.edit_config();
					}
					this.form_config();
					
				}.bind(this)
			}).request();
		}.bind(this));
	},
	form_config:function(secure){
		var fs=$$('form');
		fs.each(function(f){
			/*
			if(secure){
				f.action=f.action.replace('http','https');
			}
			*/
			var submits=f.getElements("input[type=submit]");
			submits.each(function(s){
				s.addEvent('mousedown',function(e){
					//var w=$('working');
					var w=f.getElements(".working")[0];
					switch(this.value){
						case "Save" || "Cancel":
							w.setStyle('float','right');
							var cancels=this.getParent().getElements(".edit_cancel");
							if(cancels.length>0){
								w.injectAfter(cancels[0]);
							}
							else{
								w.injectAfter(this.getParent().getElements(".edit_save")[0]);
							}
						break;
						case "Delete":
							w.setStyle('float','left');
							w.injectAfter(this);
						break;
					}
					w.setStyle('display','block');

					var i=$('submit_action');
					if(!i){
						i=new Element("input");
						i.type='hidden';
						i.id='submit_action';
						i.name='data[Submit][action]';
						i.injectAfter(this);
					}
					i.value=this.value;
				});
			});

			if(f.hasClass('iframe')){
				f.target=f.getElements("iframe")[0].id;
				f.addEvent('submit',function(e){
					var action=$('submit_action');
					if(action.value=='Delete'){
						if(!confirm("Are you sure you want to remove this record?")){
							if (e) new Event(e).stop();
							return;
						}
						else{
							var w=this.getElements(".working")[0];
							w.setStyle('display','none');
						}
					}
					Site.Edit.ta_set_vals();
				});
			}
			else if(f.hasClass('reload')){
				f.addEvent('submit',function(e){
					if(e) new Event(e).stop();					
					Site.Edit.ta_set_vals();
					if($('submit_action').value=='Delete'){
						if(!confirm('Are you sure you want to delete this record?')){
							return;
						}
					}
					this.send(
						{
							onComplete:function(){
								alert('SUCCESS');
								Site.Edit.edit_link.fireEvent('click');
							}
						}
					);
				});
			}
			else{
				f.addEvent('submit',function(e){
					if (e) new Event(e).stop();	
					Site.Edit.ta_set_vals();
					this.send({update:$('content')});
				});
			}
		}.bind(this));
	},
	ta_get_vals:function(){
		var tas=$$('textarea');
		tas.each(function(ta){
			tinyMCE.get(ta.id).setContent(ta.value);
		});
	},
	ta_set_vals:function(){
		var tas=$$('textarea');
		tas.each(function(ta){
			ta.value=tinyMCE.get(ta.id).getContent();
		});
	}

})


var MenuClass=new Class({
	history:null,
	historyKey:'',
	controller:null,
	initialize:function(){
		if(!this.controller){
			this.controller=$('controller').value;
		}
		this.li_config();
		this.ajax_config();
		this.hx_config();
	},
	hx_config:function(){
		HistoryManager.initialize();

		this.history=HistoryManager.register(
			this.historyKey,
			[this.controller],
			function(values){
				this.route($(values[0]+"_link"));
			}.bind(this),
			function(values){
				return this.historyKey+values[0];
			}.bind(this),
			/([a-zA-Z]+)/
		);

		HistoryManager.start();
	},
	li_config:function(){
		var lis=$$('#menu ul li');
		lis.each(function(li){
			li.addEvent('mouseenter',function(){
				this.addClass('hover');
			});
			li.addEvent('mouseleave',function(){
				this.removeClass('hover');
			});
		});
	},
	route:function(a){
		if(!a.getParent().hasClass('selected')){
			if(a.href.indexOf(this.controller)==-1){
				this.navigate(a.href);
			}
		}
		this.trigger(a);
	},
	ajax_config:function(){
		var ajaxs=$$('#menu a.ajax');
		ajaxs.each(function(ajax){
			ajax.addEvent('click',function(e){
				if(e) new Event(e).stop();
				if(e){
					if(e.target){
						var a=e.target;
					}
					else if(e.srcElement){
						var a=e.srcElement;
					}	
				}
				else{
					var a=$(this.controller+"_link");	
				}
				this.route(a);
			}.bind(this));		  
		}.bind(this));
	},
	trigger:function(a){
		var li=a.getParent();
		var sub=li.getElements("div.sub");
		if(sub.length>0){
			sub=sub[0];
		}
		else{
			if(li.getParent().getParent().hasClass('sub')){
				sub=li.getParent().getParent();
			}
			else{
				sub=false;
			}
		}
		if(li.hasClass('selected')){
			if(sub){
				if(sub.hasClass('visible')){
					if(a.hasClass('ajax')){
						this.navigate(a.href);
					}
				}
				else if(sub.hasClass('hidden')){
					this._sub_show(sub);
				}
				else{
					this._sub_show(sub);
				}
			}
			else{
				return;
			}
		}
		else{
			if(sub){
				if(!sub.hasClass('visible')){
					this._sub_show(sub);
				}
			}
		}

		var subparent=a.getParent().getParent().getParent();
		if(subparent.hasClass('sub')){
			var liparent=subparent.getParent();
			if(liparent.hasClass('selected')){
				var sels=subparent.getElements("li.selected");
				sels.each(function(sel){
					sel.removeClass('selected');
				});
				li.addClass('selected');
			}
			else{
				var sels=$$('li.selected');
				sels.each(function(sel){
					sel.removeClass('selected');
				});
				liparent.addClass('selected');
				li.addClass('selected');
			}
		}
		else{
			var sels=$$('li.selected');
			sels.each(function(sel){
				sel.removeClass('selected');
			});
			li.addClass('selected');
		}
	},
	_sub_show:function(sub){
		sub.removeClass('hidden');
		sub.addClass('visible');
		sub.setStyle('display','block');
		var size=sub.getSize();
		var h=size.size.y;
		sub.setStyle('height','0px');
		sub.setStyle('visibility','visible');
		new Fx.Styles(sub,  {
								duration:200,
								transition:Fx.Transitions.linear
							}).start({'height':[0,h]});
	},
	_sub_hide:function(sub){
		sub.removeClass('visible');
		sub.addClass('hidden');
		var size=sub.getSize();
		new Fx.Styles(sub,	{
								duration:200,
								transition:Fx.Transitions.linear,
								onComplete:function(){
									sub.setStyle('visibility','hidden');
									sub.setStyle('display','none');
									sub.setStyle('height',size.size.y+"px");
								}
							}).start(	{
											'height':[size.size.y,0]
										});
		var sels=sub.getElements("li.selected");
		sels.each(function(sel){
			sel.removeClass('selected');
		});

	},
	navigate:function(href,controller){
		if(controller){
			var arr=$('url').value.split("/");
			arr[arr.length-2]=controller;
			arr[arr.length-1]='index';
			href=arr.join("/");
		}
		$$('body')[0].focus();
		new Ajax(href,
			{
				update:$('content'),
				evalScripts:true,
				onComplete:function(){
					this.controller=$('controller').value;
					this.history.setValue(0,this.controller);
					Site.initialize(true);
				}.bind(this)
			}
		).request();
	}
});

var ContactClass=new Class({
	form:null,
	working:null,
	initialize:function(){
		this.form=$('contact_form');
		//this.form.action=this.form.action.replace('http://','https://');
		this.working=this.form.getElements(".working")[0];
		//Site.Edit.form_config(true);
		var contact_msg=$$('div.contact_email');
		if(contact_msg.length>0){
			new Fx.Scroll(window).toElement(contact_msg[0],{duration:'short',wait:false});
		}
		
		$('email_send').addEvent('mousedown',function(){
			var i=$('email_send_value');
			var s=$('email_send');
			if(!i){
				i=new Element("input");
				i.type='hidden';
				i.name=s.name;
				this.form.adopt(i);
			}
			i.value=s.value;
		}.bind(this));
		this.form.addEvent('submit',function(e){
			//if(e) new Event(e).stop();
			if(this.validate()){
				this.working.setStyle('display','block');
				//this.form.send({update:$('content'),onComplete:function(){this.initialize();}.bind(this)});
				//this.scroll();
			}
			else{
				if(e) new Event(e).stop();
			}
		}.bind(this));
		this.location_config();
	},
	email_complete:function(obj){
		var f=$('contact_form');
		f.getElements(".working")[0].setStyle('display','none');
		if(obj.email_success){
			var div=new Element("div");
			div.addClass('contact_email');
			div.addClass('contact_email_success');
			div.innerHTML="<span>Thank you for your contact!  We will get in touch with you as soon as we can.</span>";
		}
		else{
			var div=new Element("div");
			div.addClass('contact_email');
			div.addClass('contact_email_error');
			div.innerHTML="<span>We are sorry but there was an error sending your contact.  Please feel free to try again, give us a call or stop by.</span>";
		}
		div.injectBefore(f);
	},
	complete:function(obj){

		switch(obj.Submit.action){
			case "Delete":
				$('location_'+obj.Contact_locations.id).getParent().remove();
			break;
			default:
				if(!obj.Contact_locations.id){
					if(obj.error){
						alert(obj.error_message+"\n\n**The entry may have still saved and can be edited in the list below.");
					}
					else{
						alert('SUCCESS');
					}
					$('edit_link').fireEvent('click');
				}
				else{
					var f=$('location_'+obj.Contact_locations.id);
					f.getElements(".working")[0].setStyle('display','none');
					if(obj.error){
						alert(obj.error_message+"\n\n**The entry may have still saved and can be edited in the list below.");
					}
					else{
						alert('SUCCESS');
					}
				}
		}
	},
	scroll:function(){
		new Fx.Scroll(window).toElement($$('.contact_email')[0]);
	},
	office_pic_load:function(){
		var imgs=$$('office_pic_load');
		imgs.each(function(img){
			if(img.value.length>0){
				new Asset.image('/limestoneagency/img'+img.value);
			}
		});
	},
	location_config:function(){
		this.office_pic_load();
		var loc=$('Contact_locationsId');	
		loc.removeEvents('change');
		if(loc.value!==0){
			this.location_load();
		}
		loc.addEvent('change',function(){
			this.location_load();
		}.bind(this));
	},
	location_load:function(){
		var loc=$('Contact_locationsId').value;
		if(loc>0){
			eval("var data="+$('loc_'+loc).value);
			var add=$$('#location div.address')[0];
			add.getParent().setStyle('display','block');
			add.innerHTML="<div>"+data.street+"</div><div>"+data.city+", "+data.state+" "+data.zip+"</div><div>Phone: "+data.phone+"</div>";
			if(data.fax.length>0){
				add.innerHTML+="<div>Fax: "+data.fax+"</div>";
			}
			if(data.hours.length>0){
				add.innerHTML+="<div>Hours: "+data.hours+"</div>";
			}

			if(data.long!=='0.000000' && data.lat!=='0.000000'){
				this.map_load(data.lat, data.long);
			}
			else{
				$$('#location div.map')[0].innerHTML='';
			}

			if(data.office_pic.length>0){
				var imgs=$$('#location div.office')[0].getElements("img");
				imgs.each(function(img){
					img.remove();
				});
				var office=$$('#location div.office')[0];
				var img=new Element("img");
				img.src="/img/"+data.office_pic;
				office.adopt(img);
			}
			else{
				var imgs=$$('#location div.office')[0].getElements("img");
				imgs.each(function(img){
					img.remove();
				});
			}
		}
	},
	map_load:function(lat,lon){
		var map = new google.maps.Map2($$('#location div.map')[0]);
		map.setCenter(new google.maps.LatLng(lat,lon), 15);
		var marker=new GMarker(new GPoint(parseFloat(lon),parseFloat(lat)));
		map.addOverlay(marker);
		map.addControl(new GSmallMapControl());
	},
	validate:function(){
		if(!$('name').value.test('[a-z]','i')){
			$('name').addClass('err');
			alert('Please type your name in the contact form');
			return false;
		}
		else{
			$('name').removeClass('err');
		}

		if(!($('email').value.test('[a-z]','i') || $('phone').value.test('[0-9]'))){
			$('email').addClass('err');
			$('phone').addClass('err');
			alert('Please type a valid phone number or email address in the contact form so that we can contact you back');
			return false;
		}
		else{
			$('email').removeClass('err');
			$('phone').removeClass('err');
		}

		if(!$('message').value.test('[a-z]','i')){
			$('message').addClass('err');
			alert('Please type a message in the contact form');
			return false;
		}
		else{
			$('message').removeClass('err');
		}

		return true;

	}
});

var BoatmotoClass=new Class({
	working:null,
	rollover:null,
	initialize:function(){
		this.rollover=new RolloverClass();
		this.rollover.start();
	}
});

var FarmClass=new Class({
	working:null,
	rollover:null,
	initialize:function(){
		this.rollover=new RolloverClass();
		this.rollover.start();
	}
});

var PersautoClass=new Class({
	form:null,
	working:null,
	rollover:null,
	initialize:function(){
		this.rollover=new RolloverClass();
		this.rollover.start();

		var contact_msg=$$('div.contact_email');
		if(contact_msg.length>0){
			new Fx.Scroll(window).toElement(contact_msg[0],{duration:'short',wait:false});
		}

		this.form=$('persauto_form');
		//this.form.action=this.form.action.replace('http','https');
		//this.form.action=this.form.action.replace('http://','https://');
		this.working=this.form.getElements('.working')[0];
		$('email_send').addEvent('mousedown',function(){
			var i=$('email_send_value');
			var s=$('email_send');
			if(!i){
				i=new Element("input");
				i.type='hidden';
				i.name=s.name;
				this.form.adopt(i);
			}
			i.value=s.value;
		}.bind(this));
		this.form.addEvent('submit',function(e){
			if(this.validate()){
				this.working.setStyle('display','block');
				/*
				this.form.send({update:$('content'),onComplete:function(){
					this.initialize();
					this.scroll();
				}.bind(this)});
				*/
			}
			else{
				if(e) new Event(e).stop();
			}
		}.bind(this));
		$('vehicle_add').addEvent('click',function(){
			this.section_add($('vehicle_section'));	
		}.bind(this));
		$('driver_add').addEvent('click',function(){
			this.section_add($('driver_section'));	
		}.bind(this));
	},
	scroll:function(){
		new Fx.Scroll(window).toElement($$('.contact_email')[0]);
	},
	section_add:function(sect){
		var entries=sect.getElements(".entry");
		if(sect.id=='vehicle_section'){
			var vehs=$$('#driver_section select.vehicle');
			vehs.each(function(veh){
				var o=new Element("option");
				o.value=('Vehicle '+(entries.length+1));
				o.innerHTML=('Vehicle '+(entries.length+1));
				veh.adopt(o);
			});
		}
		var newentry=entries[0].clone();
		var is=newentry.getElements("input");
		is.each(function(i){
			i.id=i.id.replace('_0','_'+entries.length);
			i.name=i.name.replace('[0]','['+entries.length+']');
			i.value='';
		});
		var sels=newentry.getElements("select");
		sels.each(function(sel){
			sel.id=sel.id.replace('_0','_'+entries.length);
			sel.name=sel.name.replace('[0]','['+entries.length+']');
			var os=sel.getElements("option");
			os.each(function(o){
				if(o.value==''){
					o.selected=true;
				}
			});
		});
		var tas=newentry.getElements("textarea");
		tas.each(function(ta){
			ta.id=ta.id.replace('_0','_'+entries.length);
			ta.name=ta.name.replace('[0]','['+entries.length+']');
			ta.value='';
		});

		var add=sect.getElements(".add")[0];
		var br=new Element('br');
		br.injectBefore(add);
		newentry.injectBefore(add);
	},
	validate:function(){
		if(!$('name').value.test('[a-z]','i')){
			$('name').addClass('err');
			alert('Please type your name in the contact form');
			return false;
		}
		else{
			$('name').removeClass('err');
		}

		if(!($('email').value.test('[a-z]','i') || $('phone').value.test('[0-9]'))){
			$('email').addClass('err');
			$('phone').addClass('err');
			alert('Please type a valid phone number or email address in the contact form so that we can contact you back');
			return false;
		}
		else{
			$('email').removeClass('err');
			$('phone').removeClass('err');
		}


		return true;

	}
});

var HomeownersClass=new Class({
	form:null,
	rollover:null,
	working:null,
	initialize:function(){
		this.rollover=new RolloverClass();
		this.rollover.start();
		this.form=$('homeowners_form');
		//this.form.action=this.form.action.replace('http://','https://');
		var contact_msg=$$('div.contact_email');
		if(contact_msg.length>0){
			new Fx.Scroll(window).toElement(contact_msg[0],{duration:'short',wait:false});
		}
		this.working=this.form.getElements(".working")[0];;
		$('email_send').addEvent('mousedown',function(){
			var i=$('email_send_value');
			var s=$('email_send');
			if(!i){
				i=new Element("input");
				i.type='hidden';
				i.name=s.name;
				this.form.adopt(i);
			}
			i.value=s.value;
		}.bind(this));
		this.form.addEvent('submit',function(e){
			if(this.validate()){
				this.working.setStyle('display','block');
				/*
				this.form.send({update:$('content'),onComplete:function(){
					this.initialize();
					this.scroll();
				}.bind(this)});
				*/
			}
			else{
				if(e) new Event(e).stop();
			}
		}.bind(this));
	},
	scroll:function(){
		new Fx.Scroll(window).toElement($$('.contact_email')[0]);
	},
	validate:function(){
		if(!$('name').value.test('[a-z]','i')){
			$('name').addClass('err');
			alert('Please type your name in the contact form');
			return false;
		}
		else{
			$('name').removeClass('err');
		}

		if(!($('email').value.test('[a-z]','i') || $('phone').value.test('[0-9]'))){
			$('email').addClass('err');
			$('phone').addClass('err');
			alert('Please type a valid phone number or email address in the contact form so that we can contact you back');
			return false;
		}
		else{
			$('email').removeClass('err');
			$('phone').removeClass('err');
		}


		return true;

	}
});

var ClientsClass=new Class({
	initialize:function(){
	},
	complete:function(obj){
		switch(obj.Submit.action){
			case "Delete":
				$('client_edit_'+obj.Clients_list.id).getParent().remove();
			break;
			default:
				if(!obj.Clients_list.id){
					if(obj.error){
						alert(obj.error_message+"\n\n**The entry may have still saved and can be edited in the list below.");
					}
					else{
						alert('SUCCESS!');
					}
					$('edit_link').fireEvent('click');
				}
				else{
					var f=$('client_edit_'+obj.Clients_list.id);
					f.getElements(".working")[0].setStyle('display','none');
					if(obj.error){
						f.getElements(".status")[0].innerHTML=obj.error_message;
					}
					else{
						f.getElements(".status")[0].setStyle('display','block');
					}
				}
		}
	},
	edit_config:function(){
		this.cancel_config();
	},
	cancel_config:function(){
		var cs=$$('.edit_cancel');
		cs.each(function(c){
			c.addEvent('click',function(){
				var ext=this.id.replace('edit_cancel_','');
				$('Clients_list_'+ext+'_img_file').value='';
				$('Clients_list_'+ext+'_url').value=$('orig_url_'+ext).value;
				$('Clients_list_'+ext+'_blurb').value=$('orig_blurb_'+ext).value;
				tinyMCE.get('Clients_list_'+ext+'_blurb').setContent($('orig_blurb_'+ext).value);
			});
		});
	}
});

var HealthClass=new Class({
	rollover:null,
	working:null,
	initialize:function(){
		this.rollover=new RolloverClass();	
		this.rollover.start();
	}
});

var HomeClass=null;
var PersonalClass=null;
var BusinessClass=null;
var ClaimClass=null;
var PrivacyClass=null;
var FireClass=null;

/*
var gload=function(){
	if($defined(google)){
		google.load('maps','2');
		$clear(gload);
	}
}
*/

//gload.periodical(100);
//google.load("maps", "2");
