/*  Praized Widget (codename: Snarl), version <%= APP_VERSION %>
 *  (c) 2008 PraizedMedia Inc.
 *
 *  Snarl is freely distributable under 
 *  the terms of an MIT-style license.
 *
 *--------------------------------------------------------------------------*/
(function(){;var appName='PraizedWidgetCodeNameSnarl_UID_';for(var i=0;i<16;i++){appName+=String.fromCharCode(Math.floor(Math.random()*26)+97);};window[appName]={};var $=window[appName];;$.dom=function(){return{build:function(nodename,attributes,content){if('string'==typeof nodename){try{if(arguments.length>1){var node=document.createElement(nodename);}else{return document.createTextNode(nodename);}}catch(e){return document.createTextNode(nodename);};}else{var node=nodename;};if(attributes&&('string'==typeof attributes)){content=[document.createTextNode(attributes)];}else if(attributes){for(var e in attributes){node.setAttribute(e,attributes[e]);};};if(content&&('string'==typeof content)){content=[document.createTextNode(content)];};if(content){if(content.splice){for(i=0;i<content.length;i++){try{node.appendChild(content[i]);}catch(e){throw("PRAIZED WIDGET ERROR"+e);};}}else{node.appendChild(content);};};return node;},replaceNode:function(target,replacement){target.parentNode.insertBefore(replacement,target);$.dom.removeNode(target);},removeNode:function(node){node.parentNode.removeChild(node);}}}();;$.jsonp=function(){return{request:function(url,id){document.getElementsByTagName('body')[0].appendChild($.dom.build('script',{id:appName+'-'+id,type:'text/javascript',src:url}));},clean:function(id){var s='';if(s=document.getElementById(id)){s.parentNode.removeChild(s);};$[id]=null;}};}();;$.cfg=function(){return{fetch:function(scriptTag){if(scriptTag.innerHTML){var configObject=$.cfg.parseJSON(scriptTag.innerHTML);};if(configObject.err){throw('BAD JSON CONFIG FOR '+appName+" "+configObject.err);}else{for(var key in configObject){$.cfg[key]=configObject[key];};};},parseJSON:function(jsonString){if(typeof jsonString!=='string'){return{'err':'trying to parse a non-string JSON Object'};};try{var f=Function(['var document,top,self,window,parent,Number,Date,Object,Function,','Array,String,Math,RegExp,Image,ActiveXObject;','return (',jsonString.replace(/<\!--.+-->/gim,'').replace(/\bfunction\b/g,'function­'),');'].join(''));return f();}catch(e){return{"err":"trouble parsing JSON object: "+e};};},key:null,slug:null,title:"Top Rated Places",term:"Restaurant",city:"Montreal",total:6,insertId:null};}();;$.css=function(){return{build:function(id){var css='';for(var key in $.css.jsonStyle){css+="#"+id+" "+key+"{"+$.css.jsonStyle[key]+"}";};return css;},insert:function(id){document.getElementsByTagName('HEAD')[0].appendChild($.dom.build('style',{'type':'text/css'},$.css.build(id)));},jsonStyle:{'':'display:none','.praized-widget-merchant-item':'list-style-type:none','.praized-widget-merchant-percentage':'color:#009900;line-height:11px;font-family:Helvetica,Verdana,sans-serif;font-size:12px;font-weight:bold;white-space:nowrap;vertical-align:baseline','.praized-widget-arrow':'border:0;vertical-align:baseline;margin-left:2px'}};}();;$.w=function(){return{init:function(target){var arrow=new Image(9,9);arrow.src='http://static.praized.com/praized-com/images/icons/up-right-green-arrow-9x9.gif';$.originalScriptTag=$.w.findCurrentScriptTag(target);$.cfg.fetch($.originalScriptTag);$.w.getResults();},findCurrentScriptTag:function(target){var allScripts=document.getElementsByTagName('SCRIPT');for(var i=0;i<allScripts.length;i++){if(allScripts[i].src.match(target)){return allScripts[i];};};return false;},buildContainer:function(){var _=$.dom.build;$.container=_('div',{id:appName,'class':'praized-widget'},[_('h1',{'class':'praized-widget-title'},$.cfg.title),_('ul',{id:appName+'-merchants-list','class':'praized-widget-list'}),_('div',{'class':'praized-widget-footer'},[_('span',{'class':'praized-widget-seemore'},'see more on '),_('a',{id:appName+'-community-link','class':'praized-widget-community-link',href:$.cfg.communityUrl+'/merchants?q='+$.cfg.term+'&l='+$.cfg.city},$.cfg.communityName)])]);if($.cfg.insertId!=null){document.getElementById($.cfg.insertId).appendChild($.container);$.dom.removeNode($.originalScriptTag);}else{$.dom.replaceNode($.originalScriptTag,$.container);}},buildMerchantItem:function(merchant){var _=$.dom.build;return _('li',{'class':'praized-widget-merchant-item'},[_('a',{'class':'praized-widget-merchant-link',href:$.cfg.communityUrl+('merchants/'+merchant.pid).replace('//','/')},[_(merchant.name+' '),_('span',{'class':'praized-widget-merchant-percentage','style':'color:#009900;line-height:11px;font-family:Helvetica,Verdana,sans-serif;font-size:12px;font-weight:bold;white-space:nowrap;vertical-align:baseline'},[_(merchant.votes.pos_count+'/'+merchant.votes.count),_('img',{'class':"praized-widget-arrow",src:'http://static.praized.com/praized-com/images/icons/up-right-green-arrow-9x9.gif',border:'0',width:9,height:9})])])]);},genId:function(){var ID='PRZD_';for(var i=0;i<16;i++){ID+=String.fromCharCode(Math.floor(Math.random()*26)+97);};return ID;},getResults:function(){var callerId=$.w.genId();$[callerId]=function(data){$.w.parseResponse(data);$.jsonp.clean(callerId);};var connectUrl="http://api.praized.com/"+$.cfg.slug+"/merchants.json";connectUrl+="?api_key="+$.cfg.key;connectUrl+="&q="+$.cfg.term;connectUrl+="&l="+$.cfg.city;connectUrl+="&per_page="+$.cfg.total;connectUrl+="&page=1";connectUrl+="&callback="+appName+'.'+callerId;$.jsonp.request(connectUrl,callerId);},parseResponse:function(data){if(data&&data.praized){$.cfg.communityUrl=data.praized.community.base_url;$.cfg.communityName=data.praized.community.name;};$.w.buildContainer();if(data.praized.merchants.length>0){var listContainer=document.getElementById(appName+'-merchants-list');while(data.praized.merchants.length>0){var merchant=data.praized.merchants.shift();listContainer.appendChild($.w.buildMerchantItem(merchant));};};$.css.insert(appName);$.container.style.display="block";}}}();;var scriptRE=new RegExp("http://static.praized.com/praized-com/javascripts/widgets/snarl/0_2/widget.js");if(window.addEventListener){window.addEventListener('load',function(){$.w.init(scriptRE);},false);}else if(window.attachEvent){window.attachEvent('onload',function(){$.w.init(scriptRE);});};})();