
Voter=Class.create();Voter.prototype={initialize:function(extension){if(extension){this.extension=extension;this.extension.setVoter(this);}},vote:function(link,obj_class,obj_id,rating,modal){var link=$(link);if(!modal)modal=false;if(link.tagName!='A'){link=link.up('a');}
if(link.hasClassName('voted')){var text_direction=rating==-1?'negatively':'positively';alert('You already voted '+text_direction+' for this deal!');}else{if(this.extension){this.extension.vote(link,obj_class,obj_id,rating,modal);}else{this.submitVote(obj_class,obj_id,rating);}
return false;}},submitVote:function(obj_class,obj_id,rating){this.updateVoteLinks(obj_id,rating);new Ajax.Request('/'+obj_class.underscore()+'s/vote/'+obj_id,{method:'post',parameters:{rating:rating}});return false;},updateVoteLinks:function(obj_id,rating){if(rating==-1){var direction='negative';var opposite_direction='positive';}else{var direction='positive';var opposite_direction='negative';}
var text_obj=$(direction+'_votes_'+obj_id);var opposite_text_obj=$(opposite_direction+'_votes_'+obj_id);var link_obj=$(direction+'_vote_link_'+obj_id);var opposite_link_obj=$(opposite_direction+'_vote_link_'+obj_id);text_obj.update(Number(text_obj.innerHTML)+1);if(opposite_link_obj.hasClassName('voted')){opposite_text_obj.update(Number(opposite_text_obj.innerHTML)-1);opposite_link_obj.removeClassName('voted').removeClassName(opposite_direction+'_active').addClassName(opposite_direction);}
link_obj.removeClassName(direction).addClassName(direction+'_active').addClassName('voted');}};


MerchantCommentVoter=Class.create();MerchantCommentVoter.prototype={initialize:function(){this.voter=null;},setVoter:function(voter_obj){this.voter=voter_obj;},vote:function(link,obj_class,obj_id,rating){this.voter.submitVote(obj_class,obj_id,rating);link.hide();var direction=(rating==1)?'positive':'negative';$(direction+'_vote_link_'+obj_id+'_inactive').show();var opposite=(rating==1)?'negative':'positive';$(opposite+'_vote_link_'+obj_id).show();$(opposite+'_vote_link_'+obj_id+'_inactive').hide();}};


var FormValidator=Class.create({initialize:function(display_object,elements,prefix){this.prefix=prefix;if(!this.prefix){this.prefix='deal_';}
this.display_object=display_object;this.validations=new Hash;this.elements=$A();this.setUpValidationsFromElements(elements);},setUpValidationsFromElements:function(elements){$H(elements).each(function(validation){var element=$(validation[0])||$(this.prefix+validation[0]);if(element&&element.type!='hidden'&&element.tagName!='META'){this.addValidationsToElement(element,validation[1]);this.elements.push(element);}}.bind(this));},observeElement:function(element){if(!element.id.match(/_cost/)&&!element.id.match(/_savings/)){element.observe('blur',this.validate.bindAsEventListener(this));}},addValidationsToElement:function(element,validation_functions){this.validations.set(element.id,{'element':element,'functions':validation_functions});this.observeElement(element);},findValidationByElement:function(element){return match=this.validations.find(function(validation){return validation.value.element==element;});},elementIsVisible:function(element){if($(element).hasClassName('step')&&Element.visible(element))
return true;return Element.visible(element)&&this.elementIsVisible(element.parentNode);},validate:function(event){var element=Event.element(event);this.validateElement(element);},validateAllElements:function(){this.elements.each(function(element){this.validateElement(element);}.bind(this));},validateElement:function(element){var errors=[];if(this.elementIsVisible(element)){var validation=this.findValidationByElement(element);if(validation){$H(validation.value.functions).each(function(validation){var functioncall;var binding;if(this["validate_"+validation[0]]){var functioncall=this["validate_"+validation[0]];var binding=this;}else{var functioncall=this.display_object["validate_"+validation[0]];var binding=this.display_object;}
var ret=functioncall.bind(binding)({'string':$F(element),'extra':validation[1],'element':element});if(!ret['valid']){errors.push(ret['message']);}}.bind(this));}
if(errors.length>0){try{this.display_object.markFieldInvalid(element,errors);}catch(e){}}else{try{this.display_object.markFieldValid(element);}catch(e){}}}},validate_required:function(h){if(h['string']==null)h['string']='';return{'valid':h['string'].strip()!='','message':"Field cannot be left blank."};},validate_limit:function(h){if(h['string']==null)h['string']='';return{'valid':h['string'].length<h['extra'],'message':"The character limit is "+h['extra']+" and you have entered "+h['string'].length+" characters."};},validate_url:function(h){if(h['string']==''){return{'valid':true,'message':''}}
if(h['string'].match(/^www/i)){h['string']='http://'+h['string'];$(h['element']).setValue(h['string']);}
var regexp=/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return{'valid':regexp.test(h['string']),'message':"Doesn't look like a valid URL to me! It should start with 'http://'"};},validate_date:function(h){var regexp=/^(\d{2}\/\d{2}\/\d{4}|)$/;return{'valid':regexp.test(h['string']),'message':"Should be in the format MM/DD/YYYY."};},validate_checkbox:function(h){return{'valid':true,'message':''};},validate_email:function(h){var regexp;if(h['string']==''){regexp=/.*/;}else{regexp=/(.+)@(.+)\.(.{2,})/;}
return{'valid':regexp.test(h['string']),'message':"Doesn't look like a valid email to me!"};},validate_greater_than_zero:function(h){return{'valid':Number(h['string'])>0,'message':"Must be greater than zero."};}});


MerchantComment=Class.create({initialize:function(validations){this.form=$('mc_form');this.validator=new FormValidator(this,validations,'mc_');this.defaultTitle='Type something catchy here...';if(this.form){if($F('mc_title')=='')$('mc_title').value=this.defaultTitle;$('mc_title').observe('focus',this.titleFocusEvent.bindAsEventListener(this)).observe('blur',this.titleBlurEvent.bindAsEventListener(this));this.form.observe('submit',this.verifyForm.bindAsEventListener(this));}},titleFocusEvent:function(event){if($('mc_title').value==this.defaultTitle){$('mc_title').value='';}
$('mc_title').addClassName('active');},titleBlurEvent:function(event){if($('mc_title').value.blank()||$('mc_title').value==this.defaultTitle){$('mc_title').removeClassName('active');$('mc_title').value=this.defaultTitle;}},resetField:function(field){$(field).removeClassName('invalid').removeClassName('valid').removeClassName('active');},markFieldValid:function(field){var field=$(field);this.resetField(field);field.addClassName('valid');var error_field=$(field.id+"_error");if(error_field){error_field.hide();}},markFieldInvalid:function(field,messages){var field=$(field);this.resetField(field);field.addClassName('invalid');var error_field=$(field.id+"_error");if(error_field){error_field.update(messages.join('<br/>'));error_field.show();}},verifyForm:function(event){this.validator.validateAllElements();if($('mc_title').value==this.defaultTitle){this.markFieldInvalid($('mc_title'),['This field cannot be left blank.']);}
var errors=this.form.select('.invalid');if(errors.length>0){$('cannot_submit_form').style.visibility='visible';Event.stop(event);return false;}else{return true;}}});