
jQuery.autocomplete=function(input,options){var me=this;var $input=$(input).attr("autocomplete","off");if(options.inputClass)$input.addClass(options.inputClass);var results=document.createElement("div");var $results=$(results);$results.hide().addClass(options.resultsClass).css("position","absolute");if(options.width>0)$results.css("width",options.width);$("body").append(results);input.autocompleter=me;var timeout=null;var prev="";var active=-1;var cache={};var keyb=false;var hasFocus=false;var lastKeyPressCode=null;function flushCache(){cache={};cache.data={};cache.length=0;};flushCache();if(options.data!=null){var sFirstChar="",stMatchSets={},row=[];if(typeof options.url!="string")options.cacheLength=1;for(var i=0;i<options.data.length;i++){row=((typeof options.data[i]=="string")?[options.data[i]]:options.data[i]);if(row[0].length>0){sFirstChar=row[0].substring(0,1).toLowerCase();if(!stMatchSets[sFirstChar])stMatchSets[sFirstChar]=[];stMatchSets[sFirstChar].push(row);}}
for(var k in stMatchSets){options.cacheLength++;addToCache(k,stMatchSets[k]);}}
$input.keydown(function(e){lastKeyPressCode=e.keyCode;switch(e.keyCode){case 38:e.preventDefault();moveSelect(-1);break;case 40:e.preventDefault();moveSelect(1);break;case 9:case 13:if(selectCurrent()){$input.get(0).blur();e.preventDefault();}
break;default:active=-1;if(timeout)clearTimeout(timeout);timeout=setTimeout(function(){onChange();},options.delay);break;}}).focus(function(){hasFocus=true;}).blur(function(){hasFocus=false;hideResults();});hideResultsNow();function onChange(){if(lastKeyPressCode==46||(lastKeyPressCode>8&&lastKeyPressCode<32))return $results.hide();var v=$input.val();if(v==prev)return;prev=v;if(v.length>=options.minChars){$input.addClass(options.loadingClass);requestData(v);}else{$input.removeClass(options.loadingClass);$results.hide();}};function moveSelect(step){var lis=$("li",results);if(!lis)return;active+=step;if(active<0){active=0;}else if(active>=lis.size()){active=lis.size()-1;}
lis.removeClass("ac_over");$(lis[active]).addClass("ac_over");};function selectCurrent(){var li=$("li.ac_over",results)[0];if(!li){var $li=$("li",results);if(options.selectOnly){if($li.length==1)li=$li[0];}else if(options.selectFirst){li=$li[0];}}
if(li){selectItem(li);return true;}else{return false;}};function selectItem(li){if(!li){li=document.createElement("li");li.extra=[];li.selectValue="";}
var v=$.trim(li.selectValue?li.selectValue:li.innerHTML);input.lastSelected=v;prev=v;$results.html("");$input.val(v);hideResultsNow();if(options.onItemSelect)setTimeout(function(){options.onItemSelect(li)},1);};function createSelection(start,end){var field=$input.get(0);if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select();}else if(field.setSelectionRange){field.setSelectionRange(start,end);}else{if(field.selectionStart){field.selectionStart=start;field.selectionEnd=end;}}
field.focus();};function autoFill(sValue){if(lastKeyPressCode!=8){$input.val($input.val()+sValue.substring(prev.length));createSelection(prev.length,sValue.length);}};function showResults(){var pos=findPos(input);var iWidth=(options.width>0)?options.width:$input.width();$results.css({width:parseInt(iWidth)+"px",top:(pos.y+input.offsetHeight)+"px",left:pos.x+"px"}).show();};function hideResults(){if(timeout)clearTimeout(timeout);timeout=setTimeout(hideResultsNow,200);};function hideResultsNow(){if(timeout)clearTimeout(timeout);$input.removeClass(options.loadingClass);if($results.is(":visible")){$results.hide();}
if(options.mustMatch){var v=$input.val();if(v!=input.lastSelected){selectItem(null);}}};function receiveData(q,data){if(data){$input.removeClass(options.loadingClass);results.innerHTML="";if(!hasFocus||data.length==0)return hideResultsNow();if($.browser.msie){$results.append(document.createElement('iframe'));}
results.appendChild(dataToDom(data));if(options.autoFill&&($input.val().toLowerCase()==q.toLowerCase()))autoFill(data[0][0]);showResults();}else{hideResultsNow();}};function parseData(data){if(!data)return null;var parsed=[];var rows=data.split(options.lineSeparator);for(var i=0;i<rows.length;i++){var row=$.trim(rows[i]);if(row){parsed[parsed.length]=row.split(options.cellSeparator);}}
return parsed;};function dataToDom(data){var ul=document.createElement("ul");var num=data.length;if((options.maxItemsToShow>0)&&(options.maxItemsToShow<num))num=options.maxItemsToShow;for(var i=0;i<num;i++){var row=data[i];if(!row)continue;var li=document.createElement("li");if(options.formatItem){li.innerHTML=options.formatItem(row,i,num);li.selectValue=row[0];}else{li.innerHTML=row[0];li.selectValue=row[0];}
var extra=null;if(row.length>1){extra=[];for(var j=1;j<row.length;j++){extra[extra.length]=row[j];}}
li.extra=extra;ul.appendChild(li);$(li).hover(function(){$("li",ul).removeClass("ac_over");$(this).addClass("ac_over");active=$("li",ul).indexOf($(this).get(0));},function(){$(this).removeClass("ac_over");}).click(function(e){e.preventDefault();e.stopPropagation();selectItem(this)});}
return ul;};function requestData(q){if(!options.matchCase)q=q.toLowerCase();var data=options.cacheLength?loadFromCache(q):null;if(data){receiveData(q,data);}else if((typeof options.url=="string")&&(options.url.length>0)){$.get(makeUrl(q),function(data){data=parseData(data);addToCache(q,data);receiveData(q,data);});}else{$input.removeClass(options.loadingClass);}};function makeUrl(q){var url=options.url+"?q="+encodeURI(q);for(var i in options.extraParams){url+="&"+i+"="+encodeURI(options.extraParams[i]);}
return url;};function loadFromCache(q){if(!q)return null;if(cache.data[q])return cache.data[q];if(options.matchSubset){for(var i=q.length-1;i>=options.minChars;i--){var qs=q.substr(0,i);var c=cache.data[qs];if(c){var csub=[];for(var j=0;j<c.length;j++){var x=c[j];var x0=x[0];if(matchSubset(x0,q)){csub[csub.length]=x;}}
return csub;}}}
return null;};function matchSubset(s,sub){if(!options.matchCase)s=s.toLowerCase();var i=s.indexOf(sub);if(i==-1)return false;return i==0||options.matchContains;};this.flushCache=function(){flushCache();};this.setExtraParams=function(p){options.extraParams=p;};this.findValue=function(){var q=$input.val();if(!options.matchCase)q=q.toLowerCase();var data=options.cacheLength?loadFromCache(q):null;if(data){findValueCallback(q,data);}else if((typeof options.url=="string")&&(options.url.length>0)){$.get(makeUrl(q),function(data){data=parseData(data)
addToCache(q,data);findValueCallback(q,data);});}else{findValueCallback(q,null);}}
function findValueCallback(q,data){if(data)$input.removeClass(options.loadingClass);var num=(data)?data.length:0;var li=null;for(var i=0;i<num;i++){var row=data[i];if(row[0].toLowerCase()==q.toLowerCase()){li=document.createElement("li");if(options.formatItem){li.innerHTML=options.formatItem(row,i,num);li.selectValue=row[0];}else{li.innerHTML=row[0];li.selectValue=row[0];}
var extra=null;if(row.length>1){extra=[];for(var j=1;j<row.length;j++){extra[extra.length]=row[j];}}
li.extra=extra;}}
if(options.onFindValue)setTimeout(function(){options.onFindValue(li)},1);}
function addToCache(q,data){if(!data||!q||!options.cacheLength)return;if(!cache.length||cache.length>options.cacheLength){flushCache();cache.length++;}else if(!cache[q]){cache.length++;}
cache.data[q]=data;};function findPos(obj){var curleft=obj.offsetLeft||0;var curtop=obj.offsetTop||0;while(obj=obj.offsetParent){curleft+=obj.offsetLeft
curtop+=obj.offsetTop}
return{x:curleft,y:curtop};}}
jQuery.fn.autocomplete=function(url,options,data){options=options||{};options.url=url;options.data=((typeof data=="object")&&(data.constructor==Array))?data:null;options.inputClass=options.inputClass||"ac_input";options.resultsClass=options.resultsClass||"ac_results";options.lineSeparator=options.lineSeparator||"\n";options.cellSeparator=options.cellSeparator||"|";options.minChars=options.minChars||1;options.delay=options.delay||400;options.matchCase=options.matchCase||0;options.matchSubset=options.matchSubset||1;options.matchContains=options.matchContains||0;options.cacheLength=options.cacheLength||1;options.mustMatch=options.mustMatch||0;options.extraParams=options.extraParams||{};options.loadingClass=options.loadingClass||"ac_loading";options.selectFirst=options.selectFirst||false;options.selectOnly=options.selectOnly||false;options.maxItemsToShow=options.maxItemsToShow||-1;options.autoFill=options.autoFill||false;options.width=parseInt(options.width,10)||0;this.each(function(){var input=this;new jQuery.autocomplete(input,options);});return this;}
jQuery.fn.autocompleteArray=function(data,options){return this.autocomplete(null,options,data);}
jQuery.fn.indexOf=function(e){for(var i=0;i<this.length;i++){if(this[i]==e)return i;}
return-1;};
(function($)
{$.DesignerClass=function()
{this.construct();};$.extend($.DesignerClass.prototype,{EMAIL_REGEXP:new RegExp("(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"+'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"'+')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$',"i"),design_url:window.location.href,construct:function(options)
{if(this.design_url[this.design_url.length-1]!="/")
this.design_url+="/";$("body").bind("ajaxError",function(error,request)
{});$(document).ready(function(e)
{$.Designer.initialize();$("#message").each(function(){$.Designer.update_msg_limit($(this));});var cookies=Cookies.getAll();if(cookies["from_name"])
{$("#from_name").val(cookies["from_name"]);$("#from_name").removeClass('default');$("#from_email").val(cookies["from_email"]);$("#from_email").removeClass('default');}});},initialize:function(options)
{$("#designer_form").submit(function(e){return $.Designer.submit(e);});$("#from_email").blur(function(e){if($.Designer.validate_email())
{$("#from_email").removeClass("field_error");$("#from_email_error").html("");}
else
{$("#from_email").addClass("field_error");$("#from_email_error").html("Invalid email");}});$("#from_name").blur(function(e){if($.Designer.validate_name())
{$("#from_name").removeClass("field_error");$("#from_name_error").html("");}
else
{$("#from_name").addClass("field_error");$("#from_name_error").html("Invalid name");}});$("#message").focus(function(e){$("#card_preview_inside").animate({left:"0px"},500);});$("#message").blur(function(e){$("#card_preview_inside").animate({left:"300px"},500);}).keyup(function(e){$('#message_mini').html($(this).val().replace(/\n/g,"<br/>"));$.Designer.update_msg_limit($(this));});$(".designer #submit_button").click(function(e)
{$('#designer_form').submit();});$(".designer #submit_button").keypress(function(e)
{if(e.keyCode==13)
$('#designer_form').submit();});$("#design-flag .link").click(function(c){$.post($.Designer.design_url+"flag",{},function(data){if(data.status=="ok")
$("#design-flag .status").html("Flagged");else if(data.status=="duplicate")
$("#design-flag .status").html("Already flagged");},"json");});$("#design-meta .meta-link").click(function(e){$("#design-meta .meta-link").removeClass("active");$(e.target).addClass("active");var rel=$(e.target).attr("rel");$("#design-meta .meta-content").hide()
$("#design-meta .meta-contents #"+rel).show();});$("#tags .edit-container").click(function(e)
{$("#tags .values").hide();$("#tags .edit-container").hide();$("#tags .form").show();$("#tag_entry").focus();});$("#tag_entry").keypress(function(e){if(e.keyCode==13)
{e.stopPropagation();$.Designer.save_tags();return false;}});$("#tag_entry").blur(function(e){$.Designer.save_tags();});},save_tags:function()
{$("#tags .form").hide();var tags_str=$("#tag_entry").val();var tags_arr=$("#tag_entry").val().split(/ /);var tags_link=$.map(tags_arr,function(tag){return"<span class='tag'><a href='/tag/"+tag+"'>"+tag+"</a></span>&nbsp;";});$("#tags .values").html(tags_link.join(" "));$("#tags .values").show();$("#tags .edit-container").show();$.post($.Designer.design_url+"tag",{tags:tags_str},function(data){},"json");return false;},validate_email:function()
{return $("#from_email").val().match($.Designer.EMAIL_REGEXP);},validate_name:function()
{var value=$("#from_name").val();return value.match(/\w{1,}/);},validate_msg:function()
{var elem=$("#message");return elem.val().length<=parseInt(elem.attr("maxlength"));},update_msg_limit:function(elem)
{var left=parseInt(elem.attr("maxlength"))-elem.val().length;var msg=(left==0?"No":left)+" letter"+(left!=1?"s":"")+" left";var d=$("#msg_limit_display").html(msg);if(left<=0)d.addClass("over");else d.removeClass("over");},validate_form:function()
{var valid_to_data=$.ToData.is_valid();var valid_email=this.validate_email();var valid_name=this.validate_name();var valid_msg=this.validate_msg();if(!valid_to_data||!valid_email||!valid_name||!valid_msg)
{var message="Oops...we can't send this just yet.";message+=!valid_email?"\n -Please enter a valid email.":"";message+=!valid_to_data?"\n -Please enter valid recipient info.":"";message+=!valid_name?"\n -Please enter a valid name.":"";message+=!valid_msg?"\n -Please shorten your message.":"";alert(message);return false;}
return true;},submit:function(e)
{if(this.validate_form(e))
{$("#submit_button").attr("disabled","disabled");$("#submit_button").removeClass("unclicked");$("#submit_button").addClass("clicked");return true;}
e.stopPropagation();return false;}});if(typeof $.Designer==='undefined')
$.Designer=new $.DesignerClass();})(jQuery);
(function($)
{$.ToDataClass=function()
{this.construct();};$.extend($.ToDataClass.prototype,{input:$("#to_data"),error:$("#to_data_error"),_format_type:"phone",_initialized:false,construct:function(options)
{this.input.blur(function(){$.ToData.blur();});this.input.focus(function(){$.ToData.focus();});$(document).ready(function(e)
{if(!$.ToData.autodetect_format_type())
{$.ToData.set_to_data("phone");$.ToData.check_error();}
$("#delivery_method .channel").click(function(e){var format_type=$(e.target).attr("rel");$.ToData.set_to_data(format_type);$.ToData.check_error();});$.ToData._initialized=true;});},hide:function()
{this.input.hide();},show:function()
{this.input.show();},is_default:function()
{return this.input.val()==this.format().default_value;},val:function(value)
{if(typeof(value)=='undefined')
{if(this.is_default())
return"";return this.input.val();}
this.input.val(value);},check_error:function()
{if(this.format().is_valid()||this.val()=="")
{this.clear_error();}
else
{this.show_error();}},blur:function(){this.autodetect_format_type();this.check_error();if(this.val()=="")
this.set_default();},focus:function()
{if(this.is_default())
this.val("");this.input.removeClass("default");},format:function()
{return this._formats[this._format_type];},clear_error:function()
{this.input.removeClass("field_error");this.error.html("");},show_error:function()
{if(!this.input.hasClass('field_error'))
this.input.addClass('field_error');this.error.html(this.format().invalid);},is_valid:function()
{return this.format().is_valid();},autodetect_format_type:function()
{if(this.format().is_valid()&&this._initialized)return true;if(this._formats.email.is_valid())
{this.set_to_data("email");return true;}
if(this._formats.phone.is_valid())
{this.set_to_data("phone");return true;}
return false;},set_default:function()
{if(!this.input.hasClass('default'))
this.input.addClass('default');this.val(this.format().default_value);},set_to_data:function(format_type)
{var val=this.val();var old_format=this.format();old_format.deactivate();this._format_type=format_type;var new_format=this.format();$("#recipient").html(new_format.label);$("#recipient_instructions").html(new_format.instructions);$("#to_data_type").val(format_type);if(val==""||val==new_format.default_value)
{this.set_default();}
$("#delivery_method .channel").removeClass("active");$("#delivery_method .channel."+format_type).toggleClass("active");new_format.activate();return;},_formats:{facebook:{default_value:"",label:"Facebook message:",instructions:"",is_valid:function()
{return $.Facebook.is_logged_in();},invalid:"",activate:function(){$.ToData.val("");$.ToData.hide();$.Facebook.activate();},deactivate:function(){$.Facebook.deactivate();$.ToData.show();}},phone:{default_value:"example: (415) 555-1212",label:"Recipient Phone:",instructions:"US AT&T Only",is_valid:function()
{var value=$.ToData.val();value=value.replace(/[^0-9]/g,'');return(value==$.ToData._formats.phone.default_value)||(value.length==10&&value[0]!="1")||(value.length==11&&value[0]=="1");},invalid:"Invalid phone",activate:function(){},deactivate:function(){}},email:{default_value:"example: you@you.com",label:"Recipient Email:",instructions:"",is_valid:function()
{var value=$.ToData.val();return value==$.ToData._formats.email.default_value||value.match($.Designer.EMAIL_REGEXP);},invalid:"Invalid email",activate:function(){},deactivate:function(){}}}});if(typeof $.ToData==='undefined')
$.ToData=new $.ToDataClass();})(jQuery);
(function($)
{$.FacebookClass=function()
{this.construct();};$.extend($.FacebookClass.prototype,{construct:function()
{this._is_logged_in=false;this._is_complete=false;$("#card_id").val('');$(".submit_button.facebook").click(function(){$.Facebook.send_message();});$(".submit_button.facebook").keypress(function(e)
{if(e.keyCode==13)
$.Facebook.send_message();});},send_message:function()
{if(!this.is_logged_in())
{alert("Please login to Facebook first.")}
else if($.Designer.validate_form())
{$(".submit_button.facebook").removeClass("unclicked");$(".submit_button.facebook").addClass("clicked");$.post(window.location.href,{from_name:$("#from_name").val(),from_email:$("#from_email").val(),message:$("#message").val(),to_data_type:$("#to_data_type").val(),json:true},function(data){var url=data.url;var caption=data.caption;$("#card_id").val(data.id);var comment_data={"card_url":url,"card_caption":caption,"images":[{"src":data.thumb_url,"href":url}]};FB.Connect.showShareDialog(url,function()
{$.Facebook.complete();});},'json');}},is_complete:function(){return this._is_complete;},complete:function()
{$.Facebook._is_complete=true;$("form").submit();},is_logged_in:function(){return this._is_logged_in;},activate:function()
{$("#facebook").show();$(".submit_button.send").hide();$(".submit_button.facebook").show();this.login();},deactivate:function()
{$(".submit_button.facebook").hide();$(".submit_button.send").show();$("#facebook").hide();},login:function()
{$("#facebook .progress").show();FB.Connect.ifUserConnected(function(){$("#facebook .progress").hide();$("#facebook .info").show();$("#facebook .login").hide();$.Facebook._is_logged_in=true;},function(){$("#facebook .progress").hide();$("#facebook .info").hide();$("#facebook .login").show();$.Facebook._is_logged_in=false;});}});if(typeof $.Facebook==='undefined')
{$.Facebook=new $.FacebookClass();}})(jQuery);
var Cookies={getAll:function(){var cookies={};var pairs=document.cookie.split("; ");for(var i=0;i<pairs.length;i++){var pair=pairs[i].split("=");if(pair.length==2){cookies[pair[0]]=pair[1];}}
return cookies;},get:function(name){var cookies=Cookie
s.getAll();return cookies[name];},set:function(cookies,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));cookies.expires=date.toGMTString();}
cookies.path="/";var cookieString="";for(name in cookies){cookieString+=name+"="+cookies[name]+"; ";}
document.cookie=cookieString;},unset:function(name){var unsetter={};unsetter[name]="";Cookies.set(unsetter,-1);}};