/*
 * W2C_Config - edit here
 */
 
function _W2C_(){
	/* Cookie handle*/
	this.cookieName = 'BNMI_W2C_Referer'
	
	/* In Days */
	this.cookieExpire = 5.0;
	
	/* Title attribute for span placeholders */
	this.placeHolderTitle = '_W2C_';
	
	/* Set referer string alongside type */
	this.refArr = {
	/*	referer			type */
		'localhost'	:	'Direct',
		'google'	:	'Organic',
		'gclid'		:	'Paid',
		'santacruz'	:	'Direct',
		'losangeles'	:	'Direct',
		//'boulevards'	: 	'Direct',
		//'washington'	:	'Organic',
		'_default'	: 	'Direct'
	}
}

/*
 * Model Class
 */
 

/* Constructor */
function W2C_Model(){
	/* Inherits parent class properties */
	this.name = 'model';
}

W2C_Model.prototype = {
	setReferrer: function(r){
		r = this.filterReferrer(r);
		r = this.syncCookie(r);
		_W2C_.referrer = r;
	},
	
	syncCookie: function(r){
		cookie = new W2C_Cookie();
		var name = _W2C_.cookieName;
		var expire = _W2C_.cookieExpire;
		var cookieExists = cookie.read(name);
		// For debug: cookie.erase(name);
		if(cookieExists){
			/* Set Referer if present in cookie */
			r = cookieExists;
		}
		else{
			/* Create cookie */
			cookie.create(name, r, expire);
		}
		return r;
	},
	
	filterReferrer: function(r){
            for(var key in _W2C_.refArr){
                if(r.indexOf(key)>=0){
                    if(key == 'google'){
                        /* Determine if referer was a paid add */
                        if(String(document.location).indexOf('gclid')>=0){
                            key = 'gclid';
                        }
                        return key
                    }
                    return key;
                }
	    }
	},
	
	setNumbers: function(source){
		var numType = this.getNumberType('selected');
		var defaultNumType = this.getNumberType('default');
                if(source == document){
                    _W2C_.defaultNum = source.getElementById('_W2C_' + defaultNumType).value;
		    var selNum = source.getElementById('_W2C_' + numType).value;
                    _W2C_.selectedNum = (selNum != '') ? selNum : _W2C_.defaultNum;
                }else{
                    var inputs = source.getElementsByTagName('input');
                    var i = inputs.length- 1;
                    do{
                        if(i<0){break;}
                        var input = inputs[i];
                            if(input.id == '_W2C_'+defaultNumType){
                                _W2C_.defaultNum = input.value;
                            }
                            if(input.id == '_W2C_'+numType){
                                var selNum = input.value;
                            }
                        i -= 1;
                        
		    }
                    while(i>=0);
                    _W2C_.selectedNum = (selNum) ? selNum : _W2C_.defaultNum;
                }
	},

	
	getNumberType: function(clas){
		switch(clas){
			case 'selected':
				var type = _W2C_.refArr[_W2C_.referrer]
				/* Sets type according to if referrer exists */
				type = (_W2C_.referrer) ? type : _W2C_.refArr['_default'];
				return type
				break;
			case 'default':
				return _W2C_.refArr['_default'];
				break;
		}
	},
	
	getNum: function(){
		return _W2C_.selectedNum;
	},
	
	getDefaultNum: function(){
		return _W2C_.defaultNum;
	}
}

/*
 * View Class
 */

function W2C_View(model, controller){
	this._model = model;
	this._controller = controller;
}


W2C_View.prototype = {
	/* 
	 * Insert phone number into place holders
	 */
	show: function(){
	        var target = document.getElementById('hotelsblpage');
		this._controller.electNumber(document);
		this.insertNumber(target);
		//this.scourHTML();
	},
	
        mshow: function(){
                //itterate through each node
                var pItems = document.getElementsByTagName('p');
                var i = pItems.length - 1;
                //test if p is the correct one
                do{
                    if(i<0){break;}
                    var pItem = pItems[i];
                    if(pItem.innerHTML.indexOf('_W2C_Referer')>0){
                        this._controller.electNumber(pItem);
                        this.insertNumber(pItem)
                    }
                }
                while (--i);
                
	},
	
        insertNumber: function(target){
	        /* establish the model to change the html */
		var placeHolders = target.getElementsByTagName('span');
		var phoneNum = this._model.getNum();
		for(i=0;i < placeHolders.length; i++)
		{
			var span = placeHolders[i];
			if(span.title == _W2C_.placeHolderTitle)
			{
				span.innerHTML = phoneNum;
			}
		}
	},
	
	scourHTML: function(){
	        /* establish the model to change the html */
	        var htb = document.getElementById('hotelsblpage');
		var oldNum = this._model.getDefaultNum();
		var newNum = this._model.getNum();
		
		oldNum_re = new RegExp(oldNum, 'g');
		/*scour page */
		if (htb.innerHTML.indexOf(oldNum) > 0){
			/* Replace number incase of extra phone number placements*/
                    var newInnerHTML = htb.innerHTML.replace(oldNum_re, newNum);
		    //htb.innerHTML = newInnerHTML;
		}
	}
}

/*
 * Controller Class
 */
 
function W2C_Controller(model){
	this._model = model;
}

W2C_Controller.prototype = {

	electNumber: function(source){
		if (document.referrer != ''){
		    this.setReferrer();
		}else{
	            _W2C_.referrer = "_default";
		    _W2C_.referrer = this._model.syncCookie(_W2C_.referrer);
		}
		this.setNumbers(source);
            
	},

	updateNumbers: function(){
		this._model;
	},
	
	setReferrer: function(){
		r = document.referrer.split('//');
		r = r[1].split('/');
		r = r[0];
		if (r) {
			this._model.setReferrer(r);
		}
	},

	setNumbers: function(source){
		/* Grab phone numbers from input fields */
		this._model.setNumbers(source);
	},
	
	initCookie: function(){
		if (document.referrer != ''){
			this.setReferrer();
		}else{
                    _W2C_.referrer = "_default";
                    this._model.syncCookie(_W2C_.referrer);
                }
	}
}

/*
 * Cookie Class
 */
function W2C_Cookie(){  }

W2C_Cookie.prototype = {
	create: function(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	},

	read: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},

	erase: function(name) {
		this.create(name,"",-1);
	}
}
