
/**
* Behaviors applied to document
*/
function clear_form_elements(ele) {

    $(ele).find(':input').each(function() {
        switch(this.type) {
            case 'password':
            case 'select-multiple':
            case 'select-one':
            case 'text':
                $(this).val('');
                break;
            case 'textarea':
                $(this).val('');
                break;
            case 'checkbox':
            case 'radio':
                this.checked = false;
        }
    });

}

$(document).ready(function () {

	/**
	* General / Sitewide
	*/

	/**
	* Auto-suggest feature
	*/
	$('form .autosuggest').each(function ()
	{
		// Parent container.
		$autosuggest = $(this);

		// Create a global identifer.
		window.autosuggestId = window.autosuggestId++ || 0;
		var autosuggestId = 'autosuggestId'+window.autosuggestId;
		$autosuggest.addClass(autosuggestId);

		// Find the input field.
		$query = $autosuggest.find('input.query');

		// Insert response container.
		$autosuggest.append('<div class="response"></div>');

		// Set response container position.
		$autosuggest.find('.response')
			.css('left', $query.offset().left)
			.css('width', $query.width() - 2);

		// Set input query actions on keyUp.
		$query.keyup(function (event)
		{
			// Good for debugging!
			//alert(event.keyCode);

			// Get query keyword so far...
			var keyword = $query.val();
			if(keyword.length)
			{
				// Pressed a letter, start searching...
				if(event.keyCode != 40 && event.keyCode != 38 && event.keyCode != 13 || !$autosuggest.hasClass('open'))
				{
					// Loading animation by css class...
					$autosuggest.addClass('loading');

					// Load results on timed delay.
					var action = $autosuggest.find('input.action').val() || $autosuggest.parents('form').attr('action') + '-autosuggest';
					clearInterval(window[autosuggestId+'timer']);
					window[autosuggestId+'timer'] = setInterval("$('."+autosuggestId+"').find('.response').load('"+action+"?query="+$query.val().replace(/\s/g, '+')+"', function () { $(this).fadeIn().find('li a').click(function (event) { return false; }); $('."+autosuggestId+"').removeClass('loading').addClass('open'); clearInterval(window['"+autosuggestId+"timer']); });", 500);

					/*$autosuggest.find('.response').load(action+'?query='+$query.val().replace(/\s/g, '+'), function ()
					{
						$(this).fadeIn().find('li a').click(function (event)
						{
							return false;
						});
						$autosuggest.removeClass('loading').addClass('open');
					});*/
				}
				// Pressed another key, up or down for selection? (only if matches exist)
				else if (!$autosuggest.find('.response li.none').length)
				{
					switch (event.keyCode)
					{
						// Down key.
						case 40:

							found = 0;
							$autosuggest.find('.response li').each(function ()
							{
								if ($(this).hasClass('selected'))
								{
									found = 1;
								}
							});

							if (found == 1)
							{
								var sel = $autosuggest.find('.response li[class="selected"]');
								sel.next().addClass('selected');
								sel.removeClass('selected');
							}
							else
							{
								$autosuggest.find('.response li:first').addClass('selected');
							}

							break;
				 
						// Up key.
						case 38:

							found = 0;
							$autosuggest.find('.response li').each(function ()
							{
								if ($(this).hasClass('selected'))
								{
									found = 1;
								}
							});
							if(found == 1)
							{
								var sel = $autosuggest.find('.response li[class="selected"]');
								sel.prev().addClass('selected');
								sel.removeClass('selected');
							}
							else
							{
								$autosuggest.find('.response li:last').addClass('selected');
							}

							break;
					
						// Enter key.
						case 13:

							$autosuggest.find('.response').fadeOut();
							if ($autosuggest.find('.response li.selected').length)
							{
								$query.val($autosuggest.find('.response li.selected a').text()).focus();
							}
							if ($autosuggest.hasClass('open'))
							{
								$autosuggest.removeClass('open');
								return false;
							}
							break;
					}
				}
			}
			else
			{
				$autosuggest.removeClass('open').find('.response').fadeOut();
			}
		});

		// Add mouse movements.
		$autosuggest.find('.response').mouseover(function ()
		{
			if (!$(this).find('li.none').length)
			{
				$(this).find('li a:first-child').mouseover(function ()
				{
					$(this).addClass('selected');
				});
				$(this).find('li a:first-child').mouseout(function ()
				{
					$(this).removeClass('selected');
				});
				$(this).find('li a:first-child').click(function ()
				{
					$query.val($(this).text()).focus();
					$autosuggest.removeClass('open').find('.response').fadeOut();
					return false;
				});
			}
		});

		// Make sure form doesn't submit while response is open.
		$autosuggest.parents('form').submit(function (event)
		{
			if ($(this).find('.autosuggest').hasClass('open'))
			{
				return false;
			}
		});
	});

	// Unselect.
	$(document).click(function (event)
	{
		if (event.pageX != 0)
		{
			$('.autosuggest').removeClass('open').find('.response').fadeOut();
		}
	});

	/*
	$(document).click(function(){
		$("#ajax_response").fadeOut('slow');
	});
	$("#keyword").focus();
	var offset = $("#keyword").offset();
	var width = $("#keyword").width()-2;
	$("#ajax_response").css("left",offset.left); 
	$("#ajax_response").css("width",width);
	$("#keyword").keyup(function(event){
		 //alert(event.keyCode);
		 var keyword = $("#keyword").val();
		 if(keyword.length)
		 {
			 if(event.keyCode != 40 && event.keyCode != 38 && event.keyCode != 13)
			 {
				 $("#loading").css("visibility","visible");
				 $.ajax({
				   type: "POST",
				   url: "ajax_server.php",
				   data: "data="+keyword,
				   success: function(msg){	
					if(msg != 0)
					  $("#ajax_response").fadeIn("slow").html(msg);
					else
					{
					  $("#ajax_response").fadeIn("slow");	
					  $("#ajax_response").html('<div style="text-align:left;">No Matches Found</div>');
					}
					$("#loading").css("visibility","hidden");
				   }
				 });
			 }
			 else
			 {
				switch (event.keyCode)
				{
				 case 40:
				 {
					  found = 0;
					  $("li").each(function(){
						 if($(this).attr("class") == "selected")
							found = 1;
					  });
					  if(found == 1)
					  {
						var sel = $("li[class='selected']");
						sel.next().addClass("selected");
						sel.removeClass("selected");
					  }
					  else
						$("li:first").addClass("selected");
					 }
				 break;
				 case 38:
				 {
					  found = 0;
					  $("li").each(function(){
						 if($(this).attr("class") == "selected")
							found = 1;
					  });
					  if(found == 1)
					  {
						var sel = $("li[class='selected']");
						sel.prev().addClass("selected");
						sel.removeClass("selected");
					  }
					  else
						$("li:last").addClass("selected");
				 }
				 break;
				 case 13:
					$("#ajax_response").fadeOut("slow");
					$("#keyword").val($("li[class='selected'] a").text());
				 break;
				}
			 }
		 }
		 else
			$("#ajax_response").fadeOut("slow");
	});
	$("#ajax_response").mouseover(function(){
		$(this).find("li a:first-child").mouseover(function () {
			  $(this).addClass("selected");
		});
		$(this).find("li a:first-child").mouseout(function () {
			  $(this).removeClass("selected");
		});
		$(this).find("li a:first-child").click(function () {
			  $("#keyword").val($(this).text());
			  $("#ajax_response").fadeOut("slow");
		});
	});*/

	// Back button
	$('input.back, button.back').click(function (event)
	{
		event.preventDefault();
		history.go(-1);
	});

	// Country/phone selection.
	$('select.country-phone').change(function (event)
	{
		var number = '';
		$(this).parent().parent().parent().find('span.phone-value-container input').each(function ()
		{
			number += this.value;
		});
		$(this).parent().parent().parent().find('span.phone-value-container').load('/phone-format?country='+$(this).val()+'&value='+number, function ()
		{
			$(this).removeClass('loading').css({opacity: 1});	
		}).addClass('loading').css({opacity: .3});
	});
	$('select.country-phone').parents('form').submit(function (event)
	{
		$(this).find('select.country-phone').each(function ()
		{
			var number = '';
			$(this).parent().parent().parent().find('span.phone-value-container input').each(function ()
			{
				number += this.value;
				this.disabled = true;
			});
			$(this).parent().parent().parent().find('input.phone-value').val(number);
		});
	});

	/**
	* Signup page
	*/

	// Recharge automatically?
	var checkRecharge = function (event)
	{
		if ($('#recharge-yes').get(0) && $('#recharge-yes').get(0).checked)
		{
			$('span.recharge-yes').show().find('select').attr({disabled:false});
		}
		else
		{
			$('span.recharge-yes').hide().find('select').attr({disabled:true});
		}
	};

	$('#recharge-yes, #recharge-no').click(checkRecharge);
	checkRecharge();

	// Add additional phone numbers?
	var checkAnswer = function (event)
	{
		if ($('#add-number-yes').get(0) && $('#add-number-yes').get(0).checked)
		{
			$('span.answer-yes').show().find('span.add-number-personal input, span.add-number-other input, span.add-number-other personal,  span.add-number-other select').attr({disabled:false});
		}
		else
		{
			$('span.answer-yes').hide().find('span.add-number-personal input, span.add-number-other input, span.add-number-other personal,  span.add-number-other select').attr({disabled:true});
		}
	};

	$('#add-number-yes, #add-number-no').click(checkAnswer);
	checkAnswer();

	// Add another personal/friend phone number.
	var fieldId = $('span.add-number-personal, span.add-number-other').size();
	$('a.add-number-other, a.add-number-personal').click(function (event)
	{
		event.preventDefault();

		$inputs = $('span.'+this.className+'-temp')
			.clone(true)
			.removeAttr('class')
			.addClass(this.className)
			.insertBefore('div.'+this.className+' p.add-another')
			.find('input, select')
			.attr('disabled', false)
			.each(function () {
				this.name = this.name.replace(/\!ID\!/, fieldId);
			});
		

		$inputs.get(0).focus();

		if ($('span.'+this.className).size() > 0)
		{
			$('div.'+this.className+' p.add-another').show();
		}

		fieldId++;
	});

	// Remove a phone number
	$('a.remove-number').click(function (event)
	{
		event.preventDefault();
		$(this).parent().parent().remove();

		if ($('span.add-number-personal').size() == 0)
		{
			$('div.add-number-personal p.add-another').hide();
		}

		if ($('span.add-number-other').size() == 0)
		{
			$('div.add-number-other p.add-another').hide();
		}
	});

	/**
	* My Account
	*/

	// Add funds, confirm
	$('#my.purchase div#mid form.survey').submit(function (event)
	{
		var pur_obj = document.getElementById("p_amount");
		var unlmtd_obj = document.getElementById("u_amount");
		var pur_amt = parseInt(pur_obj.options[pur_obj.selectedIndex].value) + parseInt(unlmtd_obj.options[unlmtd_obj.selectedIndex].value);
		//if (confirm('Add $'+$('#my.purchase div#mid select').attr('value')+' to your account?'))
		if (pur_amt <= 0)
		{
			alert('$0.00, please make a selection');
			return false;
		}
		if (confirm('Add $'+pur_amt+' to your account?'))
		{
			return true;
		}
		event.preventDefault();
	});

	/**
	* Index Rate quote request
	*/
	var pId = document.getElementById("select");

	if( pId )
	{
		// Rates selection.
		$("select").is(".selected")
		{
			var testarray = $('#select').val().split("|");
			var _usf = 1.10;
			var min1 = parseInt(10 / (testarray[1] * _usf));
			var min2 = parseInt(20 / (testarray[1] * _usf));
			var min3 = parseInt(50 / (testarray[1] * _usf));
			var dsp = testarray[1];
			$('#promo2').html(testarray[0]);
			if (dsp < 1)
			{
				//dsp = (testarray[1] * 100);
				len = testarray[1].length;
				if (dsp < .1)
				{
					if (len > 3)
					{
						dsp = testarray[1].substr(2,1) + "." + testarray[1].substr(3);
					}
					else
					{
						dsp = testarray[1].substr(2);
					}
				}
				else
				{
					if (len > 3)
					{
						dsp = testarray[1].substr(1,2) + "." + testarray[1].substr(3);
					}
					else
					{
						dsp = testarray[1].substr(1);
					}
				}
				$('#promo3').html(dsp + '&cent;');
			}
			else
			{
				$('#promo3').html('$' + dsp);
			}
			//$('#promo4').html('500 min 600 min 700 min');
			$('#promo4').html('<p id = "promo4"><center><table><tr><td>USD</td><td>$10</td><td>$20</td><td>$50</td></tr><tr><td>Minutes<a href="/faqs#q02q03" style="text-decoration:none">*</a></td><td>' + min1 + '</td><td>' + min2 + '</td><td>' + min3 + '</td></tr></table><center></p>');
		}
		$('select').change(function (event)
		{
			var len = 0;
			var _usf = 1.10;
			var testarray = $('#select').val().split("|");
			var min1 = parseInt(10 / (testarray[1] * _usf));
			var min2 = parseInt(20 / (testarray[1] * _usf));
			var min3 = parseInt(50 / (testarray[1] * _usf));
			$('#promo2').html(testarray[0]);
			var dsp = testarray[1];
			if (dsp < 1)
			{
				//dsp = (testarray[1] * 100);
				len = testarray[1].length;
				if (dsp < .1)
				{
					if (len > 3)
					{
						dsp = testarray[1].substr(2,1) + "." + testarray[1].substr(3);
					}
					else
					{
						dsp = testarray[1].substr(2);
					}
				}
				else
				{
					if (len > 3)
					{
						dsp = testarray[1].substr(1,2) + "." + testarray[1].substr(3);
					}
					else
					{
						dsp = testarray[1].substr(1);
					}
				}
				$('#promo3').html(dsp + '&cent;');
			}
			else
			{
				$('#promo3').html('$' + dsp);
			}
			//$('#promo4').html('500 min 600 min 700 min');
			//$("td.#calc1").html('1 min');
			$('#promo4').html('<p id = "promo4"><center><table><tr><td>USD</td><td>$10</td><td>$20</td><td>$50</td></tr><tr><td>Minutes<a href="/faqs#q02q03" style="text-decoration:none">*</a></td><td>' + min1 + '</td><td>' + min2 + '</td><td>' + min3 + '</td></tr></table></center></p>');
		});
	}

});

/**
* jQuery pugins.
*/
jQuery.fn.extend(
{
	/**
	* Allows a window to scroll to an element.
	*/
	scrollTo: function (speed, easing, selector)
	{
		if (!selector)
		{
			selector = 'html,body';
		}
		else
		{
			var noOffset = true;
		}

		return this.each(function ()
		{
			var targetOffset = noOffset ? 0 : $(this).offset().top - 20;
			$(selector).animate({scrollTop: targetOffset}, speed, easing);
		});
  	},
  	
  	/**
  	* Checks and notes whether an element has behaviors already.
  	*/
  	bindUnique: function (event, callback)
  	{
  		//this.unbind(event, callback);
  		//return this[event](callback);

  		return this.each(function ()
  		{
  			var key = new String(callback).replace(/[^a]/, '');
  			this.__uniqueEvents = this.__uniqueEvents || [];
  			if (jQuery.inArray(key, this.__uniqueEvents) == -1)
  			{
  				$(this)[event](callback);
  				this.__uniqueEvents[this.__uniqueEvents.length] = key;
  			}
  		});
  	},
  	
  	/**
  	* Apply a method to elements only once
  	*/
  	eachUnique: function (callback)
  	{
  		return this.each(function ()
  		{
  			var key = new String(callback).replace(/[^a]/, '');
  			this.__uniqueCallbacks = this.__uniqueCallbacks || [];
  			if (jQuery.inArray(key, this.__uniqueCallbacks) == -1)
  			{
  				callback.call(this);
  				this.__uniqueCallbacks[this.__uniqueCallbacks.length] = key;
  			}
  		});
  	}
});
