var rscriptloaded=0;function displayEmailForm(url){if(rscriptloaded){mi_story_tool.storyTool("email",url);}else{$.getScript("http://api.recaptcha.net/js/recaptcha_ajax.js",function(){mi_story_tool.storyTool("email",url);rscriptloaded=1;});}}
/*
This javascript is an object oriented version of MI's Story Tools.  Much of the
code here was developed by Lucas Myers.  It has since been slightly modified to
fit into the Reference Site, and some additions have been made.  Gabe Doliner
made it object oriented.

This script is called from and used by the story detail template only
*/

/* object constructor */
function miStoryTool() {
    /* story tool functions */
    this.toolstate = "off";
    this.toolnames = new Array();
    this.toolnames['email'] = "email this story";

    //initialize the story tool
    this.storyTool = function( tool, url ) {
        // set title of tool
        jQuery("#toolname").empty();
        jQuery("#toolname").append(this.toolnames[tool]);
        // clean up tool area
        jQuery("#tool").empty();
        jQuery("#tool").append("loading...");

        // send request for tool, display if loads ok otherwise display error
        jQuery.ajax({
            type: "GET",
            url: url,

            success: function(msg) {
                jQuery("#tool").empty();
                jQuery("#tool").append(msg);
            },
            error: function() {
                jQuery("#tool").empty();
                jQuery("#tool").append("There was a problem loading this tool.");
            }
        });

        // display the toolbox
        if ( this.toolstate == "off" ) {
            jQuery("#toolbox").fadeIn("fast");
            this.toolstate = "on";
        }
    }

    //close the tool
    this.closeTool = function() {
        // hide toolbox
        jQuery("#toolbox").fadeOut("fast");
        this.toolstate = "off";
        //jQuery("#toolbox").css("top","0px");
    }

    
    this.sendStory = function(theForm) {
        // validate form
        if ( this.validate(theForm) === true )
        {
            // clear tool and display message
            jQuery("#tool").empty();
            jQuery("#tool").append("sending...");
		
	// Initialize recaptcha variables
	var recaptcha_response = typeof(theForm.recaptcha_response_field) == 'undefined' ? '' : theForm.recaptcha_response_field.value;
	var recaptcha_challenge = typeof(theForm.recaptcha_challenge_field) == 'undefined' ? '' : theForm.recaptcha_challenge_field.value;
        
	    // send form for processing
            jQuery.ajax({
                type: "POST",
                url: theForm.action,
                data: { domain: theForm.domain.value, url_form: theForm.url_form.value, email_type: theForm.email_type.value, url_html: theForm.url_html.value, url_story: theForm.url_story.value, to_email: theForm.to_email.value, from_email: theForm.from_email.value, from_name: theForm.from_name.value, comments: theForm.comments.value, headline: theForm.headline.value, recaptcha_challenge_field: recaptcha_challenge, recaptcha_response_field: recaptcha_response },
                success: function(msg){
                    // clear tool message, display message from server
                    jQuery("#tool").empty();
                    jQuery("#tool").append(msg);
                    //jQuery("#emailForm").empty();
                    
                    // close tool after delay
                    //jQuery("#toolbox").fadeOut(3000);
                    //this.toolstate = "off";
                },
                error: function(){
                    jQuery("#tool").empty();
                    jQuery("#tool").append("There was a problem sending this story, please try again.");
                }
            });
        }

        return false;
    }

    this.mvForm = function() {
        this.adj = jQuery("#story_body").height() - 150;
        jQuery("#toolbox").css( "top", this.adj );
    }

    this.validate = function (theForm) {
        this.theForm = theForm;
        with(this.theForm)
        {
            // CHECK NAME
            if (from_name.value == "") {
                alert("Please enter your name.");
                from_name.focus();
                return false;
            }

            // Check "To" email address(es)
            if ( to_email.value == "" ) {
                alert( "Please enter a 'To' email address!" );
                to_email.focus();
                return false;
            }
            this.emailArr = to_email.value.split(',');
            if ( this.emailArr.length > 5 ) {
                alert( "Only 5 'To' email addresses are allowed!" );
                to_email.focus();
                return false;
            }
            for (var i = 0; i < this.emailArr.length; i++) {
                if ( !this.validateEmail( this.emailArr[i] ) ) {
                    alert( "'To' email address [" + this.emailArr[i] + "] is invalid" );
                    to_email.focus();
                    return false;
                }
            }

            // Check "From" email address
            if ( from_email.value == "" ) {
                alert("Please enter a 'From' email address!");
                from_email.focus();
                return false;
            }
            if ( !this.validateEmail ( from_email.value ) ) {
                alert("Please enter a valid 'From' email address!");
                from_email.focus();
                return false;
            }

            return(true);
        }  //  with(theForm)
    }  //  END  validate()

    this.trim = function(str) {
        this.str = str;
        return this.str.replace(/^\s+|\s+$/g, '');
    }

    this.validateEmail = function(valfield) {
        this.tfld = this.trim( valfield );  // value of field with whitespace trimmed off
        this.email = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
        return ( !this.email.test( this.tfld ) ) ? false : true;
    }
}
/* end object constructor */

/* instantiate the object */
mi_story_tool = new miStoryTool();
var mi=(typeof mi=='undefined')?{'media_domain':''}:mi;if(window.miAppControler){mi.control=new miAppControler();}
mi.getArgs=function(){if(typeof mi.args=='undefined'){mi.args={};var query=location.search.substring(1);var pairs=query.split('&');for(var i=pairs.length-1;i>=0;i--){var pos=pairs[i].indexOf('=');if(pos==-1){continue;}
mi.args[pairs[i].substring(0,pos)]=unescape(pairs[i].substring(pos+1));}}
return mi.args;};mi._console=function(s){mi._console.log=(mi._console.log&&mi._console.log.length>0)?mi._console.log+'\n---------------------------------------------------\n'+s:s;};mi.fixConsole=function(){if(typeof window.console!="object"){window.console={};}
if(window.console.is_fixed){}
else{var firebugMethods=["log","debug","info","warn","error","assert","dir","dirxml","trace","group","groupEnd","time","timeEnd","profile","profileEnd","count"];var methodCount=firebugMethods.length;var args=mi.getArgs();var view=(args.viewlog&&args.viewlog=='1');for(var i=0;i<methodCount;i++){var methodName=firebugMethods[i];if(typeof window.console[methodName]!="function"){switch(methodName){case'log':if(view){window.console.log=mi._console;if(window.addEventListener){window.addEventListener("load",function(){alert(mi._console.log);},false);}else if(window.attachEvent){window.attachEvent("onload",function(){alert(mi._console.log);});}}else{window.console.log=function(){};}
break;default:eval("window.console[methodName] = function(s){window.console.log('"+methodName.toUpperCase()+": '+ s)};");}}}}
window.console.is_fixed=true;};mi.fixConsole();mi.cloneObject=function(sourceObj){if(sourceObj==null||typeof sourceObj!='object'){return sourceObj;}
var temp=new sourceObj.constructor();for(var key in sourceObj){temp[key]=mi.cloneObject(sourceObj[key]);}
return temp;};mi.App=function(){var _configs={};this._manageConf=function(prop,val){return val;};this.setConf=function(){switch(arguments.length){case 1:for(var prop in arguments[0]){_configs[prop]=this._manageConf(prop,arguments[0][prop]);}
break;case 2:_configs[arguments[0]]=this._manageConf(arguments[0],arguments[1]);break;default:console.warn('mi.App.setConf was passed an incorrect number of arguments, the method should be used with either a name-value pair or an object containing configuration settings.');}};this.getConf=function(prop){return _configs[prop];};this.viewConfs=function(){console.dir(_configs);};this.cache={};switch(arguments.length){case 1:this.setConf(arguments[0]);break;case 2:this.setConf(arguments[0],arguments[1]);break;}};mi.getEventSrc=function(e){if(!e){e=window.event;}
if(e.target){return e.target;}else if(e.srcElement){return e.srcElement;}};mi.templateVarPattern=/\@([^\@]+)\@/g;mi.templateParser=function(data,template){return template.replace(mi.templateVarPattern,function(){return data[arguments[1]];})};mi.makeHash=function(sourceData,firstDelimiter,secondDelimiter){if(sourceData&&firstDelimiter&&secondDelimiter){var hash={};var pairs=sourceData.split(firstDelimiter);var pos;for(var i=pairs.length-1;i>=0;i--){if(typeof(pairs[i+1])!='undefined'){pos=pairs[i].indexOf(secondDelimiter);if(pos==-1){continue;}
hash[pairs[i].substring(0,pos)]=pairs[i].substring(pos+1);}}
return hash;}
else{console.log('sourceData, firstDelimiter, & secondDelimiter must be defined. There are no default values.');}};mi.loadPageInfo=function(){if(window.pageInfo){var pi=window.pageInfo;if(this.pageInfo==undefined){this.pageInfo=this.cloneObject(pi);}else{for(var key in pi){if(key==='version'&&(parseFloat(pi[key])>parseFloat(this.pageInfo.version))){this.pageInfo.version=pi[key];}else if(this.pageInfo[key]==undefined){this.pageInfo[key]=this.cloneObject(pi[key]);}else if(typeof this.pageInfo[key]=='object'){for(var key2 in pi[key]){this.pageInfo[key][key2]=(this.pageInfo[key][key2])?this.pageInfo[key][key2]:this.cloneObject(pi[key][key2]);}}}}}
window.pageInfo=null;}
mi.wait_for_ready=function(time,target,callback){var checker,time_spent=0,interval=3000;_check_document=function(){if(null!==$(target)){clearInterval(checker);callback();}else{time_spent+=interval/1000;if(time_spent>=time){clearInterval(checker);}}};$(document).ready(function(){checker=setInterval(_check_document,interval);});};mi.DealSaver=function(){mi.App.apply(this,arguments);if(mi.control&&mi.control.dealsaver!==undefined){this.setConf("enabled",mi.control.dealsaver);}else{this.setConf("enabled",0);console.warn("DealSaver has been instantiated, but disabled because mi.control.dealsaver is not defined.");}};mi.DealSaver.prototype.executeDs=function(){var self=this;var e=self.getConf("enabled");if(e!==0){dsUrl="http://"+window.location.hostname+"/static/dealsaver/widget/dealsaver.json";jQuery.ajax({type:"GET",cache:false,dataType:"json",url:dsUrl,success:function(data){if(data.page.deals.deal){self.distributeData(data);self.displayWidget(self.getConf("enabled"));}else{self.setConf("enabled",0);console.warn("The DealSaver widget has been disabled because it can't find any deal information in the feed.");self.displayWidget(self.getConf("enabled"));};},error:function(){self.setConf("enabled",0);self.displayWidget(self.getConf("enabled"));}});}
else{console.info('Display of DealSaver has been disabled.');}};mi.DealSaver.prototype.distributeData=function(data){var self=this;if(self.getConf("LID")!==undefined){var lid=self.getConf("LID");var lidHash='#lid='+lid;}else{console.warn("DealSaver can't find mi.dealSaver.getConf('LID'). Disabling the LID hash tag in URLs.");var lidHash='';}
var dsvalue=data.page.deals.deal.productvalue.$t;var dsprice=data.page.deals.deal.saleprice.$t;var dollarsoff=(dsvalue-dsprice);var percentoff=(dollarsoff/dsvalue)*100;jQuery("#ds_value").html("$"+Math.round(dsvalue));jQuery("#ds_discount").html(Math.floor(percentoff)+"%");jQuery("#ds_save").html("$"+Math.round(dollarsoff));jQuery("#dealsaver_td .ds_title_link").html(data.page.deals.deal.offer.$t);jQuery("#dealsaver_td .ds_pricetag_container").html("$"+data.page.deals.deal.saleprice.$t);jQuery("#dealsaver_td .ds_deal_image img").attr("src",data.page.deals.deal.splashpagethumbnail.$t);jQuery("#dealsaver_td .ds_dealtitle").attr("href",data.page.site.sitelink.$t+"#widget=ds_rrail"+lidHash);jQuery("#dealsaver_td .ds_title_link").attr("href",data.page.deals.deal.link.$t+"#widget=ds_rrail"+lidHash);jQuery("#dealsaver_td .ds_deal_image a").attr("href",data.page.deals.deal.link.$t+"#widget=ds_rrail"+lidHash);jQuery("#dealsaver_td .ds_pricetag a").attr("href",data.page.deals.deal.link.$t+"#widget=ds_rrail"+lidHash);jQuery("#dealsaver_td .ds_logo_link").attr("href",data.page.site.sitelink.$t+"#widget=ds_rrail"+lidHash);};mi.DealSaver.prototype.displayWidget=function(display_mode){if(display_mode!==0){jQuery("#dealSaverWidget").attr("style","display:block");}};
