/* 
 * Widget Display Logger
 * 
 * this script dynamically creates a script tag to send a request to the site and log the 
 * hostname of the widget user.
 * 
 * Author: Erick Bajao
 * 
 */
;(function(){
	// placeholders
	var log_url = 'http://www.reviewpips.com/widget/log';
	var item_id = '439';
	var widget_type = '4';
	
	var referrer = window.location.protocol + '//' + window.location.hostname;
	var url = log_url + '/?item_id=' + item_id + '&wtype=' + widget_type + '&ref=' + referrer;
	
	var script = document.createElement('script');
    script.type = "text/javascript";
    script.src = url;
    
    var heads = document.getElementsByTagName('head');

	if ( heads.length > 0 ) {
		heads[0].appendChild(script);
	} else {
		document.body.appendChild(script);
	}
})();/*
 * Babypips.com Review Widget
 * Authors: Jonathan del Mar
 *          James Agawa
 *          Jhen Dumaguin
 */
;(function(){
    // create a random global handler
    var _A="",_D=document;
    for(var i=0;i<5;i++)
        _A += String.fromCharCode(Math.floor(Math.random()*10)+97);

    /***** Start Configuration *****/
    var _C = {
        obj_ns    : 'reviewpips-' + _A.substr(0,3), // namespace (required)
        script_obj: null, // this will hold this script object
        script_url: 'http://www.reviewpips.com/widget/review/thegeekknows/js',
        url       : { base: '', img: 'images/widget/review/'},
        title     : 'Reviewpips Review Widget',
        logo_title: 'ReviewPips.com',
        img       : { logo: 'logo.gif' },
        settings  : {
			        	width: { min: 170, max: 700, curr: 170 }, // in px
			        	items: { min: 1,   max: 20, curr: 3},
			        	link_get_widget: { curr:1 },
			        	link_show_modal: { curr:0 }	        	
        }
    };
    // styles (Note: multiple classes not supported)
    var _S = {
        ''                     : 'margin:0; width:%width%px; text-align:left; position:relative; padding:0',
        ' *'                   : 'margin:0;text-align:left;padding:0;background:none;text-indent:0;',
        'a:hover'              : 'background:none;text-decoration:underline',
        '.clearfix'            : 'display:inline-block;',
        '.clearfix:after'      : 'content:"."; display:block; clear:both; visibility:hidden; line-height:0; height:0;',    
        '#top'                 : 'height:7px;background:url(%url_img%tl.png) no-repeat bottom left;padding:0;',
        '#top_right'           : 'height:7px;background:url(%url_img%tr.png) no-repeat bottom right;padding:0;',
        '#top_center'          : 'height:7px;background:url(%url_img%top.png) repeat-x bottom center;margin:0 10px;',
        '#bottom'              : 'height:7px;background:url(%url_img%bl.png) no-repeat top left;padding:0;',
        '#bottom_right'        : 'height:7px;background:url(%url_img%br.png) no-repeat top right;',
        '#bottom_center'       : 'height:7px;background:url(%url_img%bottom.png) repeat-x top center;margin:0 10px;',
        '#center'              : 'padding:0 6px;',
        '#center_left'         : 'background:url(%url_img%left.png) repeat-y;display:inline-block;width:100%;',
        '#center_right'        : 'background:url(%url_img%right.png) repeat-y top right;display:inline-block;width:100%;',
        '#wrapper'             : 'background-color:#ffffff',
		'#widget_wrapper'      : 'background:#a5cccc url(%url_img%badge_bg.png) repeat-x;display:block;border:1px solid #acacac;',
        '#widget'              : 'background:url(%url_img%top_bg.png) no-repeat top left;padding:3px 10px 0 10px;display:inline-block;margin-top:1px;',
        '.widget_logo'         : 'border:0;display:block;padding:1px 0 7px;',
        '.widget_title_img'    : 'border:0;',
        '.widget_title'        : 'font:bold 13px Arial;color:#435f60;display:block;text-decoration:none;',
        '.widget_ratings'      : 'display:block;height:17px;',
        '.widget_stars'        : 'display:inline-block;width:64px;height:11px;',      
        '.widget_rate'         : 'font:13px Arial;color:#435f60;margin:0 0 0 4px;display:inline-block;',
        '.widget_based'        : 'font:10px Arial;color:#708b8c;display:block;vertical-align:top;',
        '.widget_based strong' : 'font:bold 11px Arial;vertical-align:center;',
        '.star0'               : 'background:url(%url_img%star/0s.png) no-repeat center center;',
        '.star1'               : 'background:url(%url_img%star/1s.png) no-repeat center center;',
        '.star2'               : 'background:url(%url_img%star/2s.png) no-repeat center center;',
        '.star3'               : 'background:url(%url_img%star/3s.png) no-repeat center center;',
        '.star4'               : 'background:url(%url_img%star/4s.png) no-repeat center center;',
        '.star5'               : 'background:url(%url_img%star/5s.png) no-repeat center center;',
        '.star6'               : 'background:url(%url_img%star/6s.png) no-repeat center center;',
        '.star7'               : 'background:url(%url_img%star/7s.png) no-repeat center center;',
        '.star8'               : 'background:url(%url_img%star/8s.png) no-repeat center center;',
        '.star9'               : 'background:url(%url_img%star/9s.png) no-repeat center center;',
        '.star10'              : 'background:url(%url_img%star/10s.png) no-repeat center center;', 
        '#reviews'             : 'background:#a3b3b3;display:block;border:1px solid #737e7e;margin-top:3px;padding:9px;',
        '#reviews ol'          : 'display:block;margin:0;padding:0;',
        '#reviews ol li'       : 'display:block;',
        '#reviews a:hover'     : 'text-decoration:underline',
        '.reviews_date'        : 'font:10px Arial;color:#526377;display:block;',
        '.reviews_quote'       : 'font:11px Arial;color:#ffffff;display:block;line-height:12px;margin:0 0 7px 0;',
        '.reviews_quote a'     : 'color:#ffffff;text-decoration:none;',
        '.reviews_sep'         : 'background:#bac6c6;margin:0 0 5px 0;padding:0;display:block;border-color:#bac6c6;border-width:1px 0 0 0;border-style:solid;',
        '.reviews_more'        : 'font:bold 10px Verdana;color:#3f798c;text-decoration:none;display:block;',
        '.reviews_more:hover'  : 'text-decoration:underline;',
        '.reviews_more img'    : 'border:0;',
        '#get_code'            : 'font:9px Verdana;height:14px;background:#edf0f0 url(%url_img%get_code_bg.png) repeat-x;display:block;border-color:#737e7e;border-width:0 1px 1px 1px;border-style:solid;margin:0;padding:0 10px;',
        '#get_code a'          : 'text-decoration:none;color:#92b1bb;',
        '#get_code a:hover'    : 'text-decoration:underline;',
        '#get_code img'        : 'border:0;'
    };
    // Declaration of data goes here
    var _data = eval('({"item_title":"TheGeekKnows","item_link":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows","item_permalink":"thegeekknows","rating":"4.8","totalReviews":13,"moreRevLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/reviews\/","writeRevLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/reviews\/write","reviews":[{"headline":"A friendly place","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1300#review","created_at":"Feb 08, 2010"},{"headline":"The Geek Cares","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1299#review","created_at":"Feb 07, 2010"},{"headline":"Cutting edge!","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1298#review","created_at":"Feb 07, 2010"},{"headline":"very enjoyable","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1209#review","created_at":"Nov 20, 2009"},{"headline":"Money management that is key to success","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1208#review","created_at":"Nov 19, 2009"},{"headline":"Simple and Helpful","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1207#review","created_at":"Nov 19, 2009"},{"headline":"Works for beginners!","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1206#review","created_at":"Nov 19, 2009"},{"headline":"Geekiness = goodness","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1199#review","created_at":"Nov 18, 2009"},{"headline":"The Geek Really Does know.","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1172#review","created_at":"Nov 01, 2009"},{"headline":"Helpful Blog","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1154#review","created_at":"Oct 24, 2009"},{"headline":"Just found you","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1152#review","created_at":"Oct 24, 2009"},{"headline":"Great Blog at last for me.","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1151#review","created_at":"Oct 23, 2009"},{"headline":"Beginners must visit","revLink":"http:\/\/www.reviewpips.com\/education\/blogs\/item\/thegeekknows\/review\/1148#review","created_at":"Oct 23, 2009"}]})');
    // end declaration of data
    /***** End Configuration *****/

    // create a private pointer so you don't have to keep saying window[widget_obj]
    // A - namespace, C - config, S - styles, W - widget, D - data
    var $=window[_A]={ _A:_A, _C:_C, _S:_S, _W:null, _data:_data };
    _A='';_C='';_S='';_data='';

    $.vars = {};
    /***** Start Declaration of Helpers *****/
    // return current namespace
    $.get_ns = function() {
        return $._C.obj_ns;
    };
    // A function responsible for creating DOM elements and its classes.
    $.CE = function(obj_type, obj_class, obj_id, set_namespace) {
        var obj = _D.createElement(obj_type);
        if(obj_id)
            $.setId(obj, obj_id, set_namespace);
        return $.addClass(obj, obj_class);
    };
    // Alias for createTextNode
    $.TN = function(txt) {
        return _D.createTextNode(txt);
    };
    // append child return self. Usage: $.ACS(parent, child1, child2, ...)
    $.ACS = function(s) {
        for(var i=1;i<arguments.length;i++)
            $.ACC(s,arguments[i]);
        return s;
    };
    // append child return child. Usage: $.ACC(parent, child1, child2, ...)
    $.ACC = function(s) {
        for(var i=1;i<arguments.length;i++)
            s = s.appendChild(arguments[i]);
        return s;
    };
    // A function responsible for setting id.
    $.setId = function(obj, id, set_namespace) {
        if(set_namespace !== false)
            id = $.get_ns() + id;
        obj.id = id;
        return obj;
    };
    // A function responsible for adding classes.
    $.addClass = function(obj, obj_class) {
        if(obj_class) {
            var cs = obj_class.split(' ');
            for(var i=0;i<cs.length;i++)
                if(cs[i])
                    obj.className += ' ' + $.get_ns() + cs[i];
        }
        return obj;
    };
    // alias for getElementById, if set_namespace is set to false, no namespace will be appended
    $.byId = function(id, set_namespace) {
        if(set_namespace === false)
            return document.getElementById(id);
        return document.getElementById($.get_ns() + id);
    }
    // alias for getElementsByTagName
    $.byTag = function(tag, node) {
        if ( node == null )
            node = document;
        return node.getElementsByTagName(tag);
    };
    // remove instance of this script
    $.remThisInst = function() {    	
    	var script_obj = $.getThisScriptObj();    	
    	if(script_obj)
    		script_obj.parentNode.removeChild(script_obj);
    };
    // string to JSON. Extracted from json.org
    $.strToJSON = function(str) {
        try { return eval('(' + str + ')'); }
        catch (e) {}
        return '';
    };
    // A function responsible adding a style header
    $.InsertStyles = function(rules) {
        var ns = $.CE('style'), ieRules = "", IE = window.createPopup;
        $.ACC($.byTag('head')[0], ns);
        if(!IE) {
            $.ACC(ns, $.TN(""));
            ns.setAttribute('type','text/css');
        }
        var s = _D.styleSheets[_D.styleSheets.length - 1];
        for(var r in rules) {
            var selector = '#' + $.get_ns() + ' ' + r.replace(/([\.\#])/gi, '$1' + $.get_ns());
            if(!IE)
                $.ACC(ns, $.TN(selector + '{' + rules[r] + '}'));
            else
                ieRules += selector + '{' + rules[r] + '}';
        }
        if(IE)
            s.cssText = ieRules;
    };
    // setup url parameters
    $.setupUrlParams = function() {
    	var script_obj = $.getThisScriptObj();      	
    	if(script_obj) {
			var re_base_url = new RegExp(/^(http(s)*\:\/\/[^\/]*).*$/i);
			$._C.url.base = re_base_url.exec(script_obj.src);
			$._C.url.base = $._C.url.base[1];
			$._C.url.img  = $._C.url.base + '/' + $._C.url.img; 
			return true;
    	}
    	return false;
    };
    // setup widget parameters
    // @todo: for numbers only. will refactor later
    $.setupWidgetParams = function(w_params) {
    	var param = '';
    	for(var i in w_params) {
    		if($._C.settings[i]) {
    			param = (w_params[i]+'').replace(/[^\d]+/i, '');
    			if(param) {
    				if(param < $._C.settings[i].min)
	    				$._C.settings[i].curr = $._C.settings[i].min;
	    			else if(param > $._C.settings[i].max)
	    				$._C.settings[i].curr = $._C.settings[i].max;
	    			else
	    				$._C.settings[i].curr = param; 	    			
    			}	    			
    		}
    	}
    };
    // get my script src
    $.getThisScriptObj = function() {
    	if(!$._C.script_obj) {
    		var scripts = $.byTag('script');
    		for(var i=0; i< scripts.length; i++) {
    			if(scripts[i].src == $._C.script_url) {
    				$._C.script_obj = scripts[i];
    				break;
    			}
    		}
    	}
    	return $._C.script_obj;
    };
    // get my script object params
    $.getThisScriptObjParams = function() {
    	if(!$.vars['obj_params_set']) {
    		var script_obj = $.getThisScriptObj();      	
	    	if(script_obj) {
	    		$.setupWidgetParams($.strToJSON(script_obj.innerHTML));
	    		$.vars['obj_params_set'] = true;
	    	}
    	}	    	
		return $._C.settings;
    };
    // A function responsible for inserting widget to the page
    $.insertWidget = function(widget) {        
    	var script_obj = $.getThisScriptObj();      	
    	if(script_obj) {
    		// insert the widget here    		
    		var p = script_obj.parentNode;
    		p.insertBefore(widget, script_obj);
    		return true;
    	}	   	
        return false;
    };
    
    // A function responsible for generating cross-browser safe widget object. Returns widget object
    $.WidgetGenerator = function(params) {        
    	if($._W)
    		return $._W;
    	
    	// create widget here
		$._W = $.CE('div', '', $.get_ns(), false); // main container		
		        
        // create center and its parents
        var c = $.CE('div', '', 'center');
        var c_l = $.CE('div', '', 'center_left');
        var c_r = $.CE('div', '', 'center_right');
        $.ACC(c_l, c_r, c);
		
		// create 2 divs for top and bottom then integrate
        var t = $.CE('div', '', 'top');
        var b = $.CE('div', '', 'bottom');
        $.ACS($._W, t, c_l, b);
        
        // add top parts
        var tr = $.CE('div', '', 'top_right');
        var tc = $.CE('div', '', 'top_center');
        $.ACC(t, tr, tc);
        
		var cw = $.CE('div', '', 'wrapper');
		$.ACS(c, cw);
		
        // create center parts
        var cb = $.CE('div', '', 'widget_wrapper');
        var cr = $.CE('div', '', 'reviews');
        var cg = $.CE('div', '', 'get_code');
        $.ACS(cw, cb, cr, cg);
        
        // add badge parts
        var cbb = $.CE('div', '', 'widget');
        $.ACC(cb, cbb);
        
        var cbbl = $.CE('a', 'widget_logo');
        var cbbt = $.CE('a', 'widget_title');
        var cbbr = $.CE('div', 'widget_ratings');
        var cbbb = $.CE('div', 'widget_based');
        $.ACS(cbb, cbbl, cbbt, cbbr, cbbb);        
        
		var cbbli = $.CE('img', 'widget_title_img');
		$.ACS(cbbl, cbbli);
		
        var cbbrs = $.CE('span', 'widget_stars');
        var cbbrr = $.CE('span', 'widget_rate');
        $.ACS(cbbr, cbbrs, cbbrr);        
        
        var rating_equiv = ($._data.rating - $._data.rating % 0.5 ) * 2;
        $.addClass(cbbrs, 'star' + rating_equiv); 
        
        // add logo contents
        cbbl.href = $._C.url.base;
        cbbl.title = $._C.logo_title;
		cbbli.src = $._C.url.img + $._C.img.logo;

        // add badge contents
        $.ACC(cbbt, $.TN($._data.item_title));
        cbbt.href = $._data.item_link + '?fromwidget=4';
        cbbt.title = $._data.item_title;
        cbbrr.innerHTML = '<strong>' + $._data.rating + '/</strong>5';
        cbbb.innerHTML = '(based from <strong>' + $._data.totalReviews + '</strong> reviews)';
        
        // add reviews parts
        var cro = $.CE('ol');
        var crs = $.CE('span', 'reviews_sep');
        var crm = $.CE('a', 'reviews_more');
        $.ACS(cr, cro, crs, crm);
        
        // add reviews items
        var ctr = 0;
        for(var i in $._data.reviews) {        	
        	if(typeof $._data.reviews[i].headline != 'undefined') {
            	if(++ctr > params.items.curr)
            		break;

        		var crol = $.CE('li');
	        	$.ACC(cro, crol);
	
	        	var crold = $.CE('span', 'reviews_date');
	        	var crolq = $.CE('p', 'reviews_quote');
	        	$.ACS(crol, crold, crolq);
	        	
	        	$.ACC(crold, $.TN($._data.reviews[i].created_at));
	        	
	        	var crolqa = $.CE('a');
	        	crolqa.href = $._data.reviews[i].revLink;
	        	$.ACC(crolq, crolqa, $.TN('"' + $._data.reviews[i].headline + '"'));
        	}    
        }
                
        if(ctr == 0) {
        	// no reviews?
        	var crol = $.CE('li');
        	$.ACC(cro, crol);

        	var crolq = $.CE('p', 'reviews_quote');
        	$.ACS(crol, crolq);        	
        	
        	var crolqa = $.CE('a');
        	crolqa.href = $._data.writeRevLink;
        	$.ACC(crolq, crolqa, $.TN('Be the first to write a review!'));
        } else {
        	// add reviews_more contents
	        crm.href = $._data.moreRevLink;
	        crm.alt = "get this widget";
	        crm .innerHTML = 'more reviews &raquo;';
        }	        

        var cga = $.CE('a');
        cga.href = $._data.item_link + '/widgets/promote';
        cga.innerHTML = 'GET THIS WIDGET &gt;';
        $.ACC(cg, cga);
        
        try {
        	if(!parseInt(params.link_get_widget.curr)) {
	        	cga.href = 'javascript:void(0);';
	        } else if(params.link_show_modal.curr) {
	        	cga.onclick = function() { ReviewPips.WidgetCode.Review($._data.item_permalink, params.items.curr, params.width.curr); };
	        	cga.href = 'javascript:void(0);';
	        }
        } catch (e) {}	        
        
        // add bottom parts
        var br = $.CE('div', '', 'bottom_right');
        var bc = $.CE('div', '', 'bottom_center');
        $.ACC(b, br, bc);           
		
		return $._W;
    };
    /***** End Declaration of Helpers *****/

    // start main function
    var _CC = function() {
    	$.setupUrlParams(); 
    	var w_params = $.getThisScriptObjParams();  
    	var widget = $.WidgetGenerator(w_params);    	
        if( widget) {     
        	// do some corrections in url settings
        	for(var r in $._S) {
        		$._S[r] = $._S[r].replace('%url_img%', $._C.url.img);
        		$._S[r] = $._S[r].replace('%width%', w_params.width.curr);
        	}
    		$.InsertStyles($._S); // set class styles    		
        	$.insertWidget(widget);
        }        
    };  
    
    try { // try catch so we do not mess up in case have unexpected errors
        _CC();
        $.remThisInst();
    } catch(e){
    	try {
    		if($._W) $._W.style.display = 'none';
    		if($) $ = null;
    	} catch(e) {} 	
    }
})();