// FAIL-SAFE Product Protection
// http://fspp.com
// (c)2007 by FAIL-SAFE Product Protection
// All Rights Reserved
// 
// $Id: public.js 3142 2010-07-13 21:04:58Z kevin $

Object.extend(Event, {
  _domReady : function() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;

    if (this._timer)  clearInterval(this._timer);
    
    this._readyCallbacks.each(function(f) { f(); });
    this._readyCallbacks = null;
},
  onDOMReady : function(f) {
    if (!this._readyCallbacks) {
      var domReady = this._domReady.bind(this);
      
      if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", domReady, false);
        
        if (/WebKit/i.test(navigator.userAgent)) { 
          this._timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) domReady(); 
          }, 10);
        }
        
        Event.observe(window, 'load', domReady);
        Event._readyCallbacks =  [];
    }
    Event._readyCallbacks.push(f);
  }
});

var Cookie = {
  set: function(name, value, daysToExpire) {
    var expire = '';
    if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name, '', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') === '1');
  }
};
var MyUtils = {
	_clean: function(element){
		element = $(element);
		var cleanedvalue;
		if(element.value){
			cleanedvalue = element.value.replace(/\$|\,/g,'');
		}else{
			cleanedvalue = element.innerHTML.replace(/\$|\,/g,'');
		}
		return cleanedvalue;
	},
	format: function(element, type){
		element = $(element);
		var value = element._clean();
		var newvalue;
		switch(type){
			case 'camel':
				newvalue = camelize(value);
				break;
			case 'currency':
				newvalue = "$"+formatCurrency(value);
				break;
			case 'date':
				newvalue = Date.parse(value).toString('MM/dd/yyyy');
				break;
			case 'lowercase':
				newvalue = value.toLowerCase();
				break;
			case 'percent':
				newvalue = (value*100).toFixed(2)+"%";
				break;
			case 'phone':
				newvalue = formatPhone(value);
				break;
			case 'uppercase':
				newvalue = value.toUpperCase();
				break;
			default:
				newvalue = value;
				break;
		}
		return newvalue;
	},
	parse: function(element, type){
		element = $(element);
		var value = element._clean();
		if(value==null || value=='') value='0';
		if(value.endsWith('%')) value = (value.replace(/\%/,''))/100;
		var num;
		switch(type){
			case 'int':
				num = parseInt(value,10);
				break;
			case 'float':
				num = parseFloat(value);
				break;
		}
		return num;
	},
	toggletext: function(element,txt1,txt2){
		element = $(element);
		element.innerHTML = element.innerHTML==txt1 ? txt2 : txt1;
		return;
	},
	trim: function(element){
		element = $(element);
		element.value = element.value.replace(/^\s+|\s+$/g,"");
		return element;
	}
};
Element.addMethods(MyUtils);

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
};

Event.onDOMReady(
	function(){
		pageSetup();
	}
);

function pageSetup(){
	$$('.focus').each(function(el,i){
		el.focus();
	});
	
	$$('.rowlink').each(function(el,i){
		var link = el.getElementsByTagName("a");
		if(link[0] != null){
			Event.observe(el,'click',function(evt){
				var e = Event.element(evt);
				if(!e.href){
					Event.stop(evt);
					if(evt.ctrlKey || evt.shiftKey){
						open(link[0].href);
						self.focus();
					}else
						document.location.href= link[0].href;
				}
			});
			el.onmouseover = new Function('window.status ="' + link[0].href +'"' );
			el.onmouseout = new Function('window.status =""' );
		}
	});
	
	$$('.tabnav').each(function(tab_group){  
		new Control.Tabs(tab_group);
	});
	
	$$('.tip').each(function(el,i){
		return Try.these(
		    function() {
			    var tip = el.title;
			    el.title = '';
			    return new Tip(el.id,tip);  
			    }
		  ) || false;
	});
	
	$$('.camel').each(function(el){
		Event.observe(el,'blur',function(){
			this.value = this.format('camel');
		});
	});
	
	$$('.upper').each(function(el){
		Event.observe(el,'blur',function(){
			this.value =  this.format('uppercase');
		});
	});
	
	$$('.lower').each(function(el){
		Event.observe(el,'blur',function(){
			this.value = this.format('lowercase');
		});
	});
	
	$$('.currency').each(function(el){
		Event.observe(el,'blur',function(){
			this.value = this.format('currency');
		});
	});
	
	$$('.phone').each(function(el){
		Event.observe(el,'blur',function(){
			this.value =  this.format('phone');
		});
	});
	
	$$('.date').each(function(el){
		Event.observe(el,'keydown',changeDate);
	});
	
	//$$('.percent').each(function(el){
	//	Event.observe(el,'blur',function(){
	//		this.value = this.format('percent');
	//	});
	//});
	
	// $$('a').each(function(el){
	// 		if(el.href && el.href.indexOf('#') > -1){
	// 			el.uri = el.href.split("#");
	// 			el.observe('click', function(evt){
	// 				Event.stop(evt);
	// 				// this.onclick = function() {return false;};
	// 				var t = this.uri[1];
	// 				if($(t)) new Effect.ScrollTo(t, {offset: -24});
	// 			});
	// 		}
	// 	});

	$$('.autocompleter').each(function(el){
		Element.insert(el,{after:'<div id="' + el.id + '_result" class="autocomplete"></div>'});
		Element.insert(el,{after:'<div id="' + el.id + '_loading" class="ajax_indicator" style="display:none;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>'});
		new Ajax.Autocompleter(el.id, el.id+"_result", baseURL + "ajax/find/" + el.id, {
			frequency:0.3,
			paramName: 'searchvalue',
			indicator: el.id+'_loading',
			afterUpdateElement: function(text,li){
				if(el.next('input[type=hidden]')){
					el.next('input[type=hidden]').value = li.id;
				}
				if(li.id=='0'){
					el.value = '';
				}
				if(el.readAttribute('callback')){
					eval(el.readAttribute('callback'));
				}
			}
		});
		Event.observe(el, 'blur', function(){
			if(this.value==''){
				el.next('input[type=hidden]').value = 0;
			}
		});
	});
	
	
	$$('input.required','select.required','select.validate-selection').each(function(el,i){
		Element.insert(el,{after:'<span class=\"requiredstar\">* </span>'});
	});
}

function $int(num){
	return parseInt(num,10);
}
function $float(num){
	return parseFloat(num);
}

function roundNum(num, dec){
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

function camelize(text){
	text = text.toLowerCase();
	var text_array = $w(text);
	var newText = "";
	for(var i=0;i<text_array.length;i++){
		var t = text_array[i];
		var foundamp = 0;
		var founddot = 0;
		var amp = t.indexOf('&', foundamp);
		var dot = t.indexOf('.', founddot);
		while(amp>0){
			t = t.substring(0,amp+1) + t.charAt(amp+1).toUpperCase() + t.substring(amp+2);
			foundamp++;
			amp = t.indexOf('&', foundamp);
		}
		while(dot>0){
			t = t.substring(0,dot+1) + t.charAt(dot+1).toUpperCase() + t.substring(dot+2);
			founddot++;
			dot = t.indexOf('.', founddot);
		}
		newText += t.charAt(0).toUpperCase() + t.substring(1) + ' ';
	}
	
	newText = newText.replace(/Mcc/g,"McC");
	newText = newText.replace(/(Llc|llc)/g,"LLC");
	return newText.replace(/^\s+|\s+$/g,"");
}

function changeDate(evt){
	// Adds keyboard functionality to increase and decrease the date value with the plus and minus keys
	// Used as : Event.observe('DateFieldID', 'keydown', changeDate);
	var num=0;
	if(evt.keyCode==107 || evt.keyCode==61){ // + key
		num = 1;
	}else if(evt.keyCode==109){ // - key
		num = -1;
	}
	
	if(num!=0){
		Event.stop(evt);
		if(evt.ctrlKey==true){
			this.value = Date.parse(this.value).addYears(num).toString('MM/dd/yyyy');
		}else if(evt.shiftKey==true){
			this.value = Date.parse(this.value).addMonths(num).toString('MM/dd/yyyy');
		}else{
			this.value = Date.parse(this.value).addDays(num).toString('MM/dd/yyyy');
		}
	}else if(evt.keyCode==110 && evt.ctrlKey==true){ // . key
		Event.stop(evt);
		this.value = Date.today().toString('MM/dd/yyyy');
	}
}
	
function checkActive(timevisited){
	if(Cookie.get('Active')-timevisited<=-1800){
		location.href='http://www.fspp.com/home/logout';
	}
}

function displayCal(el){
	var date = new Date();
	var month = date.getMonth()+1;
	var year = date.getFullYear();
	new Insertion.After(el, buildCal(month, year, "main", "month", "daysofweek", "days", 0));
}

function format(el, type){
	switch(type){
		case 'cur': el.value = formatCurrency(el.value);break;
		case 'date': el.value = formatDate(el.value);break;
		case 'up': el.value = el.value.toUpperCase();break;
		case 'down': el.value = el.value.toLowerCase();break;
		case 'camel': el.value = camelize(el.value);break;
		case 'phone': el.value = formatPhone(el.value);break;
	}
}

function formatCurrency(num){
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') +  num + '.' + cents);
}

function formatDate(date) {
	var result = "";
	if(date!=''){
		date = date.replace(/-/g,'');
		date = date.replace(/\//g,'');
		result = date.substring(0,2) + '/' + date.substring(2,4) + '/' + date.substring(4,8);
	}
	return result;
}

function formatPhone(phone){
	var newphone = '';
	if(phone!=''){
		newphone = phone.replace(/\D/g,'');
		newphone = '(' + newphone.substring(0,3) + ') ' + newphone.substring(3,6) + '-' + newphone.substring(6,10);
	}
	return newphone;
}

function hidevideo(){
	bod = document.getElementsByTagName('body')[0];
	bod.style.height = '';
	bod.style.overflow = 'auto';
	htm = document.getElementsByTagName('html')[0];
	bod.style.height = '';
	htm.style.overflow = 'auto';
	
	$('overlay').style.display = 'none';
	$('lightbox').style.display = 'none';
	$('lightbox').innerHTML = '';
}

function popvideo(video){
	var bod = document.getElementsByTagName('body')[0];
	var objvideo = 	'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="720" height="486" title="Fail-Safe Service Video">'
  					+ '<param name="movie" value="/swf/' + video + '.swf" />'
  					+ '<param name="quality" value="high" />'
  					+ '<embed src="/swf/' + video + '.swf" quality="high"  pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="720" height="486"></embed>'
					+ '</object>'
					+ '<br /><div style="background:#FFF;width:720px; margin: 0 auto; font-size: 200%; font-weight: bold;"><a href="#" onClick="hidevideo();return false;">Close Video</a></div>';
	if(!$('overlay')){// || $('overlay').style.display=='none'){
		overlay 			= document.createElement('div');
		overlay.id			= 'overlay';
		overlay.style.display = 'block';
		overlay.onclick 	= function(){hidevideo();};
		lb					= document.createElement('div');
		lb.id				= 'lightbox';
		lb.className 		= 'loading';
		lb.style.display 	= 'block';
		lb.innerHTML		= objvideo;
		bod.appendChild(overlay);
		bod.appendChild(lb);
	}else{
		$('lightbox').innerHTML = objvideo;
	}

	$('overlay').style.display = 'block';
	$('lightbox').style.display = 'block';
}

function toggleclass(el, classname){
	var items = $(el).getElementsByClassName(classname);
	for(var i=0;i<items.length;i++){
		items[i].toggle();
	}	
}