/** 
 * This is an InternetBrands Travel Tips Widget 
 * @author Emmanuel Gortarez <ecastro@internetbrands.com>
 * @version 1.0
 * @copyright Internet Brands Inc.
 */

/**
 * Binds an object to the function
 * @example
 * 		function(obj){
 * 			alert(obj);
 *      }.ib_Bind(this);
 */
Function.prototype.ib_Bind = function (arg) {
    var func = this;  
    return function () {  
        var newargs = [arg];  
        for (var i = 0; i < arguments.length; i++)  
            newargs.push(arguments[i]);  
        return func.apply(this, newargs);  
    };  
};

/**
 * Object selector wrapper
 * @param String Element id
 * @example 
 * 		var el = ib_$('elementId');
 */
ib_$ = function(id){
	return document.getElementById(id);
}

/**
 * Simple Browser validator
 * @example
 * 		if(ib_Browser.ie()){
 * 			alert('Is Explorer');
 * 		} 
 */
var ib_Browser = {
	ie: function(){
		return (!window.ActiveXObject) ? false : true;
	}
}

/**
 * Elements Event Injector additionaly i add a "domready" event that is triggered when the DOM tree is ready.
 * @example 
 * 		ib_Event.add(Element, "click", function(e){
 * 			ib_Event.cancel(e); // Cancels the event and it's propagation. 
 * 			alert('Element clicked');
 * 		});
 */
var ib_Event = {		
	ie_domredy_fn:new Array(),
	ie_called:false,
	callback :function(){
		if(!ib_Event.ie_called){
			ib_Event.ie_called=true;
			var len = ib_Event.ie_domredy_fn.length;
		    for(j=0; j < len; j++){
		    	ib_Event.ie_domredy_fn[j]();
		    }
		}    
	},		
	add : function (el,ev,fn){//This function inject an event into the object		
		if (ib_Browser.ie()) {
			if(ev == 'domready'){ //Emulating domready for IE.
				ib_Event.ie_domredy_fn.push(fn);
				var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)';
				document.write(
				'<script type="text/javascript" defer="defer" src="' + src + '" ' +
				'onreadystatechange="if (this.readyState == \'complete\') ib_Event.callback();"' +
				'><\/script>');
			}else{
				var fnc = function (context, func) {  
					 return function() {  
					    func.apply(context, arguments);  
					 };  
				} 
				el.attachEvent("on"+ev, fnc(el,fn) , false); //Assigning Event on IE
			}	
		}else{
			ev = (ev == 'domready')?'DOMContentLoaded':ev;
			el.addEventListener(ev, fn, false); //Assigning Event on Firefox | Opera | Webkit
		}
	},
	cancel: function cancelEvent(e) {
	    if (!e) e = window.event;
	    if (e.preventDefault) {
	        e.preventDefault();
	    } else {
	        e.returnValue = false;
	    }
	}
}

/**
 * Ajax call using Internetbrands JSON object
 */
ib_Ajax = function(options){
	this.options   = options || {};
	this.script = document.createElement("script");
	this.script.setAttribute("type","text/javascript");
	this.script.setAttribute("defer","defer");
	if(!ib_Browser.ie()){
		ib_Event.add(this.script,"load",function(obj,e){
			obj.onComplete(ib_AjaxResult);
		}.ib_Bind(this));"http://www.bbonline.com/travel-tips/"
	}else{	
		if (this.script.readyState == "loaded") {
			this.script.onreadystatechange = null;
			this.onComplete(ib_AjaxResult);
		}else{	
	    	 this.script.onreadystatechange = function(obj){
	    		if (obj.script.readyState == "loaded") {
	    			obj.script.onreadystatechange = null;
	    			obj.onComplete(ib_AjaxResult);
	    		}	
	    	 }.ib_Bind(this);
		}	 
	}	 		
	document.body.appendChild(this.script);
	this.request   = function(obj,params){
		this.script.setAttribute("src",this.options.url+"?rand="+Math.random()+"&"+params);
	}.ib_Bind(this)
	this.onComplete = function(obj, HTML){
		obj.options.onComplete(HTML);
	}.ib_Bind(this)
}

/**
 * Writing Widget
 */
var ib_MovableTypeBlogURLTag = "http://www.bbonline.com/travel-tips/";
if(ib_MovableTypeBlogURLTag.indexOf("<")!=-1)
	ib_MovableTypeBlogURLTag = "http://www.bbonline.com/travel-tips/";

document.write("<link rel='stylesheet' type='text/css' href='"+ib_MovableTypeBlogURLTag+"tt-widget.css'>");			
document.write(
		"<div id='ib_ttip'>"+
		"<div id='ib_ttip_title'>" +
			"<img src='"+ib_MovableTypeBlogURLTag+"img/tt-title.gif' alt='The Weekly Wanderer-Travel Tip' />" +
		"</div>" +
		"<div id='ib_ttip_content'>" +
			"<div id='ib_ttip_content_title'></div>" +
			"<div id='ib_ttip_content_abstract'></div>" +
		"</div>" +
		"<div id='ib_ttip_content_logo'><a  target='_blank' href='"+ib_MovableTypeBlogURLTag+"'><img src='"+ib_MovableTypeBlogURLTag+"img/tt-logo.gif' /></a></div>"+
		"<div id='ib_ttip_content_get'><a id='ib_ttip_content_get_a' target='_blank' href='#'><img border='0' align='absmiddle' src='"+ib_MovableTypeBlogURLTag+"img/tt-button.gif' alt='Get travel tips on your site' /></a></div>" +
		"<div style='display:none' id='ib_ttip_content_get_area'>Paste code into your HTML page"+
		"<textarea id='ib_ttip_content_get_code'>&lt;script type='text/javascript' src='"+ib_MovableTypeBlogURLTag+"tt-widget.js'&gt;&lt;/script&gt; &lt;div&nbsp;style='display:none'&nbsp;id='ib_ttip_provided'&gt;&lt;div&gt;Travel&nbsp;tips&nbsp;provided&nbsp;by&nbsp;&lt;a&nbsp;target='_blank'&nbsp;href='"+ib_MovableTypeBlogURLTag+"'&gt;Bed&nbsp;and&nbsp;Breakfast&nbsp;Inns&nbsp;Online&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</textarea></div>"+
		"</div>"
);

/**
 * Assigning Behaviours and Calling Las tip
 */
ib_Event.add(window,"domready",function(e){
	ib_$('ib_ttip').style.display ='none';
	if(ib_$('ib_ttip_provided')){
		ib_$('ib_ttip_provided').style.display ='none';
	}else{
		alert("Please copy & paste the BBOnline.com Travel Tip Widget exactly how is provided in order to be shown.");
		return ;
	}
	var ajaxCall = new ib_Ajax({
		url:ib_MovableTypeBlogURLTag+"tt-widget-feed.js",
		onComplete:function(HTML){
			var res = eval(HTML);
			ib_$('ib_ttip_provided').style.display ='block';
			ib_$('ib_ttip').style.display ='block';
			ib_$('ib_ttip_provided').style.display ='block';
			ib_$('ib_ttip_content_title').innerHTML    = "Travel Tip #"+res.id+"<br /> <a target='_blank' href='"+res.URL+"'>"+res.title+"</a>";
			ib_$('ib_ttip_content_abstract').innerHTML = res.body;
			ib_Event.add(ib_$('ib_ttip_content_get_code'),'click',function(e){
				this.select();				
			});	
			ib_Event.add(ib_$('ib_ttip_content_get_a'),'click',function(e){
				ib_Event.cancel(e);
				var code = ib_$('ib_ttip_content_get_area');
				if(code.style.display!='none')
					ib_$('ib_ttip_content_get_area').style.display='none';
				else{
					ib_$('ib_ttip_content_get_area').style.display='block';
					ib_$('ib_ttip_content_get_code').select();
				}	
			});
			var anchors = ib_$('ib_ttip_content_abstract').getElementsByTagName("A");
			for(i = 0; i < anchors.length; i++){
				anchors[i].target= "_blank";
			}
		}
	}).request('');	
});
