var rowCounter=3;
var MAX_GROUP_SIZE=40;


/** check if in iframe */
function isInIFrame() {
	return (window.location != window.parent.location);
}

function debugFillForm () {
	alert ("filling form");
	  $("#groupName").val("testgrupp"+Math.floor(Math.random()*1000));
	  $("#creatorName").val("martintest");
	  $("#creatorNumber").val("0706012944");

//	  $("#num1").val("0703878660");
//	  $("#name1").val("samuel");
//	  $("#num2").val("0739839881");
//	  $("#name2").val("robert");
	  alert ("form filled");
}


SMSG_CLASSES = {
  invite_row: "group-invite",
  name: "name",
  phone: "num"
}

// NEW: Add group invitation row to the form.
var invites_count=0;
function addGroupInvitationRow(initForm) {
	
	//abort if wrong page 
	if (!$('#group-invites').exists()) return;
	
	if (invites_count >= MAX_GROUP_SIZE) return;
  	invites_count++;  
	  
	var invite_row_id = SMSG_CLASSES['invite_row'] + "_" + invites_count;
	var name_field_id = SMSG_CLASSES['name'] + invites_count;
	var phone_field_id = SMSG_CLASSES['phone'] + invites_count;
	
	// TODO: jQuery templates...
	var name_field_html = '<div class="span-6 field ' + SMSG_CLASSES['name'] + '"><input id="' + name_field_id + '" name="' + name_field_id + '" class="type-text defaultText validateName valid" size="24" maxlength= "24" title="Namn eller alias" /></div>';
	var phone_field_html = '<div class="span-6 last field ' + SMSG_CLASSES['phone'] + '"><input id="' + phone_field_id + '" name="' + phone_field_id + '" type="text" class="type-text defaultText validateNumber valid" size="16" maxlength= "16" title="t.ex. 070-" /></div>';
	var new_invite_html = '<li class="span-13 last ' + SMSG_CLASSES['invite_row'] + '" id="' + invite_row_id + '">' + phone_field_html + name_field_html + '</li>';
	
	var e = $('#group-invites').append(new_invite_html);
	
	// Initialize field validations, and stuff.
	if (initForm) initFormInteractivity();
	
	if (invites_count >= MAX_GROUP_SIZE) {
	  // Hide the button when maximum reached.
	  $('#add-group-invite').hide();
	}
	
	// Initialize input hints for the new row.
	//    $('#' + name_field_id).hint();
	//$('#' + phone_field_id).hint();
	//$('input[title!=""]').hint();
}

/** insert values retrieved from other interfaces */
function insertNewValues(username, usernumber) {
	$(".defaultText").each(function(i) {if ($(this).val()==$(this)[0].title) $(this).val("");});
	i=1;
	while (true) {
		if (!$("#name"+i).length) {
			addGroupInvitationRow(true);
			$("#name"+i).val("");
			$("#num"+i).val("");
		}
		
		if (($("#name"+i).val().length==0 && $("#num"+i).val().length==0) ||
			 $("#name"+i).val() ==username) {

			
			$("#name"+i).val(username).removeClass("defaultText").addClass("defaultTextActive").blur();
			$("#num"+i).val(usernumber).removeClass("defaultText").addClass("defaultTextActive").blur();
			
			$("#name"+i).removeClass("defaultText");
			$("#num"+i).removeClass("defaultText");
			break;
		}
		i++;
	}
	$(".defaultText").each(function(i){if ($(this).val().length==0) $(this).val($(this)[0].title);});
}


// Set validation class.
function setValidity(origTarget, isValid, hasValue) {
	target = $(origTarget).closest('.field');
	target.removeClass('notValid');
	target.removeClass('valid');
	target.removeClass('loading');
  if (hasValue) {
    if (isValid) {
      target.addClass('valid');
    } else {
      target.addClass('notValid');
    }
  }
}

/* set loading display */
function setLoading(target) {
	target = $(target);
	target = $(target).closest('.field');
	target.removeClass('notValid');
	target.removeClass('valid');
    target.addClass('loading');
}



// Add group invite row to the form.
$(function () {
  $("#add-group-invite").click(function() {
    addGroupInvitationRow(false);
    addGroupInvitationRow(false);
    addGroupInvitationRow(true);
  });
});

/* checks if groupdata is valid */
function isGroupDataValid() {

  if (!$('#groupName').closest('.field').hasClass("valid")) return "Välj ett namn åt din grupp.";
  if (!$('#creatorName').closest('.field').hasClass("valid")) return "Skriv in ditt namn först.";
  if (!($('#creatorNumber').closest('.field').hasClass("valid") || 
		$('#creatorNumber').closest('.field').hasClass("loading"))) return "Skriv in ett korrekt mobilnummer först.";
  //all is ok:
  return null;
}

/** checks if form is valid */
function isFormValid(isCreatingGroup) {
  //no need to check groupData if only appending
  if (isCreatingGroup) {
	  groupData=isGroupDataValid();
	  if (groupData!=null) return groupData;
  }
  for (var i=1;i<=invites_count;i++) {
    if ($("#num"+i).exists() && $('#num'+i).parent().hasClass("notValid")) return "Medlemsdata är inte korrekt ifylld.";
  }
  //all is ok
  return null;
}

var serviceNumber;
function submitFormToCreateGroup() {
  //hide default values
  $(".defaultText").each(function(i) {if ($(this).val()==$(this)[0].title) $(this).val("");});
  gotoView(3);
  
  $.ajax({
      url: "/weblogic/create_group.php?step=1",
      data: $(".form1").serialize() + "&" + $(".form2").serialize(), /* ALTERED by Jonas */
      type: "POST",
      dataType: "json",

      error: function(msg) {
          alert("Error: " + msg);
          alert("Tyvärr lyckades vi ej ansluta till servern. Kolla att du är ansluten till internet och försök gärna igen.");
          gotoView(2);
      },
      success: function(data) {
      switch(data.status) {
      case "ok":
        serviceNumber = data.serviceNumber;
        break;
      case "out of servicenumbers":
        alert("Tyvärr kan du inte vara med i fler än 5 grupper.");
        // revert to previous step
        gotoView(2);
        //alert(data.msg);
        break;
      case "not valid":
        alert("Tyvärr var det ett felaktigt telefonnummer eller namn. Försök gärna igen.");
        // revert to previous step
        gotoView(2);
        break;
      }
      }
  });

  //return default values to form fields
  $(".defaultText").each(function(i){if ($(this).val().length==0) $(this).val($(this)[0].title);});
}

function submitFormToAppendToGroup() {
  //hide default values
  $(".defaultText").each(function(i) {if ($(this).val()==$(this)[0].title) $(this).val("");});

	  gotoView(5);
  
  $.ajax({
      url: "/weblogic/add_member_to_group.php",
      data: $(".form2").serialize(),
      type: "POST",
      dataType: "json",

      error: function(msg) {
          alert("Error: " + msg);
          alert("Tyvärr lyckades vi ej ansluta till servern. Kolla att du är ansluten till internet och försök gärna igen.");
          gotoView(2);
      },
      success: function(data) {
      switch(data.status) {
      case "ok":
        //serviceNumber = data.serviceNumber;
    	//alert (data.msg);  
        //window.location = "/grupp/"+$("#publicGroupName").val();
        confirm_ok("Nya medlemmar", data.msg,function () {window.location = "/grupp/"+$("#publicGroupName").val();});
    	break;
      case "out of servicenumbers":
        alert("Tyvärr kan du inte vara med i fler än 10 grupper.");
    	  //alert ("5 grupper är max per person");
        // revert to previous step
        gotoView(2);
        //alert(data.msg);
        break;
      case "not valid", "not in group", "not logged in":
        alert("Du är inte inloggad.");
        // revert to previous step
        gotoView(2);
        break;
      }
      }
  });

  //return default values to form fields
  $(".defaultText").each(function(i){if ($(this).val().length==0) $(this).val($(this)[0].title);});
}


var rd=null;
function getString() {
  if (rd!=null) return rd;
  vowels = 'aoieuy'; cons = 'bfklxdghjmnpqrstvz';
  var str = "";var alt = new Date().getTime() % 2;
  for (i = 0; i < 7; i++) {
    if (alt == 1) {
      str += cons.charAt(Math.random() * (cons.length-1));
      alt = 0;
    } else {
      str += vowels.charAt(Math.random() * (vowels.length-1));
      alt = 1;
    }
  }
  rd = str;
  return str;
}

function validateNumber(targ) {
  //allow only numbers
  $(targ).val($(targ).val().replace(/\D/gi,""));
  if ($(targ).val()=="070") $(targ).val("");
  //check is ok numbers
  if ($(targ).val().substring(0,3)=="467") $(targ).val("07"+$(targ).val().substring(3));
  if ($(targ).val().substring(0,2)!="07") return false;
  return $(targ).val().length==10;
}

function validateName(targ) {
  //trim at ends
  $(targ).val($(targ).val().replace(/^\s+|\s+$/g,""));
  //do not allow too short
  if (!($(targ).val().length >1)) {
    $(targ).val("");
    return false;
  } else
    return true;
}

function validateGroup(targ) {
	$(targ).val($(targ).val().replace(/^\s+|\s+$/g,""));

//allow no spaces: deprecated
//	$(targ).val($(targ).val().replace(/ /gi,""));
	 
    //do not allow too short
  if (!($(targ).val().length>1)) {
     $(targ).val("");
    return false;
  } else
    return true;
}

function validatePassword(targ) {
  if (!($(targ).val().length>=5)) {
    return false;
  } else
    return true;
}

/** check if has value, and value is not equal to default value */
function hasValue(targ) {
  if (targ != null) {
    return $(targ).val().length > 0 && $(targ).val() != $(targ)[0].title;
  }
  return false;
}

jQuery.fn.exists = function() { return jQuery(this).length > 0; };

$(document).ready(function() {
    addGroupInvitationRow(false);
    addGroupInvitationRow(false);
    addGroupInvitationRow(false);

    
	$("#submit-member-entry").click(function(){
		isCreatingGroup= !$("#groupId").exists(); 

		errorMessage = isFormValid(isCreatingGroup);
      if (errorMessage==null) {
    	  //select submit function depending on whether we want to add new
    	  //members to an existing group or create a new group
    	  if (isCreatingGroup)
    		  submitFormToCreateGroup();
    	  else
    		  submitFormToAppendToGroup();
      } else {
        //å =  , ä =
        alert (errorMessage);
      }
      return false;
  });

	
  //capture enter on front page
	keypressHandler = function (e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code == 13) {
    	targ = "";
    	if ($(this).attr("id")=="creatorName")
    		targ = "#creatorNumber";
    	else if ($(this).attr("id")=="groupName" && $("#creatorName").attr("type")!="hidden")
    		targ = "#creatorName";

    	if (targ !="") {
    		$(this).blur();
    		$(targ).focus();
    		$(targ).select();
    		e.preventDefault();
    		return false;
    	}
    }
  };
    
	if ($.browser.mozilla) { 
		$(".enterCapture").keypress(keypressHandler);	
	} else 	{
		$(".enterCapture").keydown(keypressHandler);
	} 

  $("#submit-group-entry").click(function(){
	  $("#groupName").blur();
	  $("#creatorNumber").blur();
	
		errorMessage = isGroupDataValid();
	    if (errorMessage==null) {
	    	
	    	gotoView(2);
	      /* FIXME: facebook not connected in this step.
	       $("a#connect-link-facebook").attr('href', 'http://multisms.se/facebook_group_connect.php?phone_nr=' + $('#creatorNumber').val());
	       $("a#connect-link-twitter").attr('href', 'http://multisms.se/comm/twitter/redirect.php?phone_nr=' + $('#creatorNumber').val());
	      // add the phonenumber to a session, to make facebook_addition valid.
	      $.ajax({
	        url: "/weblogic/add_phone_nr_session.php?phone_nr="+$('#creatorNumber').val(),
	        data: "",
	        type: "GET",
	        dataType: "json",
	        error: function(msg) {
	           alert("Failed to setup number, facebook integration might be erroneous");
	        },
	        success: function(data) {
	          switch(data.status) {
	          case "ok":
	            break;
	          case "not valid":
	            alert("Failed to setup number, facebook integration might be erroneous");
	            break;
	          }
	        }
	      });*/
	    } else {
	      alert (errorMessage);
	    }
	    
	    
	return false;
  });

  

  // resend_message
  $("#sendagain").click(function(){
    $("#onSendError").hide();
    pollingCounter = 0;
    $.ajax({
        url: "/weblogic/resend_sms.php",
        data: $("#form1").serialize(),
        type: "POST",
        dataType: "json",
        error: function(msg) {
           alert("Du verkar ha anslutningsproblem, försök igen.");
        },
        success: function(data) {
          switch(data.status) {
          case "ok":
            break;
          case "not valid":
            alert("Misslyckades att skicka nytt sms.");
            break;
          }
        }
      });
    return false;
  });
  
//set focus on first field
//  alert ("fokus");

 // alert ("fokus2");

  //start interactivity:
  initFormInteractivity();
  
  //init first field (has to be in right order)
  $("#groupName").focus().val("").attr("title", "team happy");
  
});


var lastValidationQuery="";
var callcount=0;
function initFormInteractivity() {

  $(".parentfocus").focus(function(){$(this).parent().addClass("focused");});
  $(".parentfocus").blur(function(){$(this).parent().removeClass("focused");});
  $("#rd").val(getString());
  //validation logic
  $(".validateGroup").blur(function(){
        setValidity (this, validateGroup(this),  hasValue(this));
        // checkNameAvailable(this); //deprecated
  });

  $(".validateName").blur(function(){
	  setValidity (this, validateName(this),  hasValue(this));
  });

  $(".validateNumber").blur(function(){
	  
	  //this function called three times for unknown reason, condition below is to avoid multiple server calls
	  newValidationQuery= $(this).attr("id")+$(this).val();
	  if (hasValue(this) && lastValidationQuery!= newValidationQuery) {
		  lastValidationQuery= newValidationQuery;

		  //set validity
		  setValidity (this, validateNumber(this), hasValue(this));

		  //update name, if necessary: 
		  //1. get sibling (jquery-sibling function doesnt work with new html)
		  if ($(this).attr('id') == "creatorNumber") { 
			  //for view1
			  sibling= $("#creatorName");
		  } else {
			  //or for view2
			  this_index = $(this).attr('id').substring(3);
			  if (this_index !="") sibling =$("#name"+this_index); 
		  }
	      //2. update name for sibling
	      if (sibling!=null && validateNumber(this)) updateName(this,sibling);
	  } else if (!hasValue(this)) {
		  setValidity (this, validateNumber(this), hasValue(this));
	  }
  });

  $(".validatePassword").live("blur", function() {
    setValidity (this, validatePassword(this), hasValue(this));
    if ($(this).attr('id') == "password2") setValidity (this, validatePassword(this) && $("#password1").val()==$("#password2").val(), hasValue(this));
  });


  //activate default input values:
  
  $("input").each(function(i){
	 if (!$(this).hasClass("defaultText") && !$(this).hasClass("defaultTextActive"))
	  $(this).addClass("defaultText");
  });
  
  $(".defaultText").each(function(i){
    if ($(this).val().length==0) $(this).val($(this)[0].title);
  });
  $(".defaultText").focus(function(srcc){
    if ($(this).val() == $(this)[0].title)
    {
    $(this).addClass("defaultTextActive").removeClass("defaultText");
    $(this).val("");
    }
  });
  $(".defaultText").blur(function() {
    if ($(this).val() == "")
    {
    $(this).removeClass("defaultTextActive").addClass("defaultText");
    $(this).val($(this)[0].title);
    }
  });
}

var pollingTimer;
var pollingStarted;

function gotoView(num) {
	//clear timer
	clearTimeout(pollingTimer);
	pollingStarted = 0;
	
	//hide all
	$("#step1-group-entry").hide();
	$("#step2-member-entry, #import-contacts-container").hide();
	$("#step3-confirm-sms").hide();
		//only applicaple for bjudin.php
	$("#waiting-for-data").hide();
	
	//only applicable for embedded signup (relevant to frontpage):
	$("#qoute-roller-on-frontpage").hide();
	$("#home").hide();
	if ($("#qoute-roller-on-frontpage").exists()) {
		quoteCycler.pause();
		//switch format on columns
		$("#content").removeClass("span-11").addClass("span-15");
		$("#sidebar").removeClass("span-10").addClass("span-6");
	}
	
	
	//show selected, start timer etc.
	switch (num) {
	case 1:
		//group name etc
		$("#step1-group-entry").show();
		
		//only applicable for embedded signup (relevant to frontpage):
		$("#home").show();
		$("#qoute-roller-on-frontpage").show();
		if ($("#qoute-roller-on-frontpage").exists()) {
			quoteCycler.restart();
			//switch format on columns
			$("#content").removeClass("span-15").addClass("span-11");
			$("#sidebar").removeClass("span-6").addClass("span-10");

		}
		break;
		 
	case 2:
		// invite members
		$("#member-entry-header").html("Bjud in till '"+$("#groupName").val()+"'");
		$("#step2-member-entry, #import-contacts-container").show();
		$("#num1").focus();
		break;
		
	case 3:
		//waiting for confirmation sms
		$("#step3_creator_number").html($("#creatorNumber").val());
		$("#step3-confirm-sms").show();
		pollingTimer=setTimeout(checkIfAnswered,5000);
		pollingStarted = new Date();
		break;
		
	case 4:
		//group was created..
		$("#step4").show();
		
		//perhaps not the perfect logic to identify embeds, but something
		if ($("#qoute-roller-on-frontpage").exists()) {
			//if embedded, make smaller, to make space for y-scrollbar (and avoid x-scrollbar)
			$(".containerEmbedded").width(850);
		}
		break;
	
	case 5:
		//appending members, waiting for response, just hide:
		$("#waiting-for-data").show();
		break;
	}
		
}

function logInUser(uname, upwd)
{
	$.ajax({
        url: "/weblogic/login_user.php",
        data: {"phone_nr":uname,"pwd":upwd},
        type: "POST",
        dataType: "json",
        error: function(msg, errortype, exception) {
            //alert("Error. Data:" + msg.responseText);
              //   alert("errortype: " + errortype);
               //  alert("exception: " + exception);
        	alert ("Något gick fel. Kanske hjälper det att försöka igen?");
        },
        success: function(data){
        	$('#login-status').html("<div class=\"span-15 last\"><span class=\"logged-in-status\">Inloggad som<b> " + data.name + "</b></span><a href=\"/logout\">Logga ut</a></div>");
        }
    });
}

var pollingCounter=0;
function checkIfAnswered() {
	if(pollingStarted == 0) return;
	
	//check if user answered sms, if so move to next window:
	//add parameter if embedded. 
    $.ajax({
        url: "/weblogic/check_if_answered.php"+(isInIFrame()?"?embedded=true":""),
        data: {"creatorNumber":$("#creatorNumber").val(),"serviceNumber":serviceNumber},
        type: "POST",
        dataType: "json",
        error: function(msg, errortype, exception) {
            alert("Error. Data:" + msg.responseText);
                 alert("errortype: " + errortype);
                 alert("exception: " + exception);
        },
        success: function(data){
          if (data.status=="ok") {
          		// login the user
          		logInUser($("#creatorNumber").val(), data.password);
        	  $("#step4").append(data.html);
        	  gotoView(4);	
          } else {
            pollingTimer=setTimeout(checkIfAnswered,2000);
          }
        }
    });
    
    if (pollingCounter++>150) {
      $("#onSendError").show();
      updateTimer();
    }
}

function updateTimer() {
  var diff = (new Date() - pollingStarted)/1000;
  var newnumber = Math.round(diff*Math.pow(10,1))/Math.pow(10,1);
  //$("#timeSince").text(newnumber);
  //var t2=setTimeOut(updateTimer,1000);
}

/** fetch username from database */
function updateName(target,nameTarget) {
	
	allowSuggestion = !hasValue($(nameTarget));
	setLoading(target);
	$.ajax({
        url: "/weblogic/get_name.php"+(allowSuggestion? "?allow_suggestion=true":""),
        data: {"number":$(target).val()},
        type: "POST",
        dataType: "json",
        error: function(msg, errortype, exception) {
//            alert("Error. Data:" + msg.responseText);
//                 alert("errortype: " + errortype);
//                 alert("exception: " + exception);
        	setValidity (target, true,  true);
        },
        success: function(data){
          if (data.status=="ok") {
        	  	//this is users own specified name, force this
                $(nameTarget).val(data.name);
                $(nameTarget).removeClass("defaultText");
                setValidity (target, true,  true);
                setValidity (nameTarget, validateName(nameTarget),  hasValue(nameTarget));
          } else if(data.status=="suggestion") {
				//do not force suggested name -> suggest it (ie. only enter it in field, if nothing already written) 
				if (!hasValue($(nameTarget))) { 
					$(nameTarget).val(data.name);
					$(nameTarget).removeClass("defaultText");
				}
		        setValidity (target, true,  true);
		        setValidity (nameTarget, validateName(nameTarget),  hasValue(nameTarget));
          } else if(data.status=="not valid") {
      	  		//not valid => means no known name, number may still be valid
        	  	setValidity (target, true,  true);
          } else if(data.status=="out of servicenumbers") {
        	  	setValidity (target, false,  true);
        	  	if ($(target).attr("id")=="creatorNumber") {
        	  		gotoView(1);
        	  		alert("Du kan tyvärr inte vara med i fler smsgrupper.");
        	  	} else {
        	  		alert("Du kan tyvärr inte bjuda in denna person, personen kan inte vara med i fler smsgrupper.");
        	  	}
          }
        }
    });
}

function updatePassword() {
  $.ajax({
      url: "/weblogic/create_group.php?step=pw",
      data: $("#formpw").serialize(),
      type: "POST",
      dataType: "json",
      error: function(msg) {
       //   alert("Error: " + msg);
         alert("Tyvärr lyckades vi ej ansluta till servern. Kolla att du är ansluten till internet och försök gärna igen.");
      },
      success: function(data) {
      switch(data.status) {
      case "ok":
        serviceNumber = data.serviceNumber;
        $("#p_status").html("Du har nu bytt lösen.").removeClass("error");
        break;
      case "not valid":
        $("#p_status").html("F&ouml;r kort eller ej likadana l&ouml;sen.").addClass("error");
        $('#password1').focus();
        break;
      case "not logged in":
        $("#p_status").html("Tyvärr gick det inte att byta. Du är inte inloggad längre.");
        break;
      }
      }
  });
}
