/*
 global variables must be declared: 
 id, width, height, btn_myconvert_bad, action, msisdn_empty, chboxes_invalid, range_int_invalid, wrong_wildcards, num_of_wildcards_out, range_invalid, imgcode_empty, regexp
*/

if (document.images) {
  var img = '';
  img = new Image(width, height);
  img.src = "/imgcode.htm?id=" + id;
}

/*
* Function remove white signs such as: spaces, EOF, etc.
*/
function mytrim(s) { // {{{

  // Remove leading spaces and carriage returns
  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r')) {
    s = s.substring(1,s.length);
  }

  // Remove trailing spaces and carriage returns
  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r')) {
    s = s.substring(0,s.length-1);
  }
  
  return s;
} // }}}

var F = document.entryform;
var msisdn = '';

document.onload = init();

/* 
* Function that is always loaded with page reload 
*/
function init() {
  if(F.ifrange.checked == true) {
    //Range
    F.ifrange.disabled = false;
    F.range.style.visibility = 'visible';
    //Golden
    F.golden.checked = false;
    F.golden.disabled = true;
  }
  
  if(F.golden.checked == true) {
    //Golden
    F.golden.disabled = false;
    
    ///Range
    F.ifrange.checked = false;
    F.ifrange.disabled = true;
  }
  
  showButtons();      /* Display buttons */
  toggleGoldenNum();  /* Resolve NumberRange vs GoldNumber  */
  return true;
}

var BtnSubmitted = '';          /* Holds information about what btn was submitted */  
var BtnMyConvertStatus = false; /* Action status after submitting btn = "MyConvert"  */

/* 
* Function checks status of Button "MyConvert" and 
* whether submit action will be allowed or 
* some restriction are set.
*/
function checkBtnMyConvert(){
  
  if( (mytrim(F.msisdn.value).length <6 ) || (F.ifrange.checked == true ) ) {
    
      alert(btn_myconvert_bad);
      BtnSubmitted = 'Convert';
      BtnMyConvertStatus = false;
      return false;
  } else {
  
      BtnSubmitted = 'Convert';
      BtnMyConvertStatus = true;
      return true;
  }
}

/* 
* Function checks status of Button "Search"
* If buttons was submitted set TRUE flag
*/
function setBtnSearch(){
  
 return  BtnSubmitted = 'Search';
}

/**
 * Functions for random number generator
 */
function Random(N) {
    return Math.floor(N * (Math.random() % 1));
}

function Randum(N) {
    return (N * (Math.random() % 1)) | 0;
}

function RanSpan(MinV, MaxV) {
    return MinV + Random(MaxV - MinV + 1);
}

/**
 * Function generate random msisdn for business or consumer
 */
function generateRandomMsisdn(isBussiness, isGolden) {
    if (isGolden) {
        // generate number by standart gold number rules
        var myFirstNum, mySecondNum, myThirdNum;
        var myRetString;        
        myFirstNum = RanSpan(0,9);
        if (!isBussiness) { // remove buss. ranges
            if ((myFirstNum == 4) || (myFirstNum == 7)) {
                myFirstNum++;
            }
        }
        if (RanSpan(0,1) == 0) {        
            myRetString = ''+ myFirstNum.toString() + myFirstNum.toString();
    
            mySecondNum = RanSpan(0,9);
            myRetString += mySecondNum.toString() + mySecondNum.toString();
            
            myThirdNum = RanSpan(0,9);
            myRetString += myThirdNum.toString() + myThirdNum.toString();
        } else {
            myRetString = ''+ myFirstNum.toString() + myFirstNum.toString() + myFirstNum.toString();
            mySecondNum = RanSpan(100,999);
            myRetString += mySecondNum.toString();
        }
        return myRetString;
    } else {
        if (isBussiness) {
            // includes all range
            return RanSpan(0,999999);
        } else {
            // excludes buss. ranges
            var myRandomSwitch;
            myRandomSwitch = RanSpan(0,2);
            switch (myRandomSwitch) {
                case 0:
                    return RanSpan(0,398000);
                    break;
                case 1:
                    return RanSpan(500000,698000);
                    break;
                case 2:
                    return RanSpan(800000,999999);
                    break;                    
            }
        }
    }
    // we shouldn't come here, but to be sure;
    return RanSpan(0,999999);
}

/* 
* Function checks variables/data from FORM 
*/
function check_form() {
  
  // Check button "MyConvert" and its statuses
  if ( (BtnSubmitted == 'Convert') && (BtnMyConvertStatus == false)){
    BtnSubmitted = '';
    return false;
  } else {
       var skipOther = false;
       // empty msisdn  
        if(mytrim(F.msisdn.value) == '') {
          if (BtnSubmitted == 'Search') {
              var isBusiness;
              var myRandomNumber;
              var myRandomStr;
              
              // 1. set prefix to '773'
              for(var i=0; i < F.prefix.options.length; i++) {
                  if (F.prefix.options[i].value == '773') {
                      F.prefix.selectedIndex = i;
                      break;
                  }
              }
              if (action == 'business_search.htm') {
                  isBusiness = true;
              } else {
                  isBusiness = false;
              }
              F.random.value = 1;
              myRandomNumber = generateRandomMsisdn(isBusiness, F.golden.checked);
              myRandomStr = myRandomNumber.toString();
              while (myRandomStr.length < 6) {
                  myRandomStr = '0'+ myRandomStr;
              }
              
              F.msisdn.value = myRandomStr;
              skipOther = true;
              // return true;      // random search
          } else if (F.msisdn.value.length < 3) {
            alert(msisdn_empty);
            F.random.value = 0;
            return false;
          } else {
              F.random.value = 0;
          }
        } else if (F.msisdn.value.length < 3) {
            alert(msisdn_empty);
            F.random.value = 0;
            return false;              
        } 
        
        if (!skipOther) {
            //If GoldenNumbers and NumberRange are checked both = error
            if( (F.ifrange.checked == true) && (F.golden.checked == true) ) {    
                alert(chboxes_invalid);
                return false;
            }
            
            //If Range Number is specified => it must contains ONLY digits
            if( (F.ifrange.checked == true)  && (!IsNumeric(F.msisdn.value)) ){
              alert(range_int_invalid);
              return false;
            }
            
            //If btns ="Search" => number of max WildCards is 3 
            if(BtnSubmitted == 'Search') {
                var msisdn = mytrim(F.msisdn.value);
                var numWildCards = 0;
                
                for (var ii=0; ii<(mytrim(F.msisdn.value).length); ii++) {
                    if (! isChar(msisdn.substr(ii,1), false) && (! isInt(msisdn.substr(ii,1)))) {
                      if (!isChar(msisdn.substr(ii,1), true)) {
                          alert(wrong_wildcards);
                          return false;
                      }
                      numWildCards++;
                    }
                    // alert(numWildCards);
                }
                            
                if (numWildCards>3){
                  alert(num_of_wildcards_out);
                  return false;
                }
            }
            // if range isn't empty check id range is 2-99
            if(mytrim(F.range.value) == '') {
            } else {
              if(mytrim(F.range.value) >= 100 || mytrim(F.range.value) < 2) {
                alert(range_invalid);
                return false;
              }
            }
        } else {
            //F.random.value = 0;
        }
        // non integer number when converting to text
        if(BtnSubmitted == 'Convert') {
            if (countNumbers(F.msisdn.value) != 6) {
                alert(btn_myconvert_bad);
                return false;
            }
        } else {
            if ((countNumbers(F.msisdn.value) < 3) && (countChars(F.msisdn.value) < 3)) {
                alert(msisdn_empty);
                return false;
            }        
        }        
        
        // empty pictogram
        if(mytrim(F.imgcode.value) == '') {
          alert(imgcode_empty);
          return false;
        }
        
        return true;
  }
  
}

function IsNumeric(passedVal) {
    var ValidChars = "0123456789";
    var IsNumber=true;
    var Char;
    if(passedVal == "") {
        return false;
    }
	for (var i = 0; i < passedVal.length && IsNumber == true; i++) {
		Char = passedVal.charAt(i);
		if (ValidChars.indexOf(Char) == -1) {
		  IsNumber = false;
		}
	}
	return IsNumber;
}

/**
 * 
 */  
function isInt (str) {
	var i = parseInt (str);

	if (isNaN (i)) {
		return false;
	} else {
	    return true;
	}
}

function isChar(Data, wildCard) {
    var varChars;
    if (wildCard) {
        varChars = '?*.:';
    } else {
        varChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    }
    var isChar = true;
    var index = 0;
    while ((index < Data.length) && (isChar)) {
        isChar = (varChars.indexOf(Data.charAt(index)) != -1);
        index ++;
    }
    return isChar;
}


/**
 * function return count of numbers in word
 */
function countNumbers(word) {
    var cnt = 0;
    // alert(word.substring(0,1));
    for (var i = 0; i < word.length; i++) {
        if (isInt(word.charAt(i))) {
            cnt++;
        }
    }
    return cnt;
}
/**
 * function return count of Chars in word
 */
function countChars(word) {
    var cnt = 0;
    // alert(word.substring(0,1));
    for (var i = 0; i < word.length; i++) {
        if (isChar(word.charAt(i), false)) {
            cnt++;
        }
    }
    return cnt;
}

function toggleGoldenNum() {
  /* Check CheckBox for Golden number*/
  /*
  var objRegExp = new RegExp(regexp);
  if(objRegExp.test(F.msisdn.value)) {
    F.golden.disabled = false;
  } else {
    F.golden.disabled = true;
    F.golden.checked  = false;
  } 
  */
  
  /** random chose */
  if (F.msisdn.value.length == 0) {
    F.golden.disabled = false;
  } else if (countNumbers(F.msisdn.value) >= 3) {
    F.golden.disabled = false;
  } else {
    F.golden.disabled = true;
    F.golden.checked = false;
  }
  
  
  /* Allow/disallow NumberRange checkbox */ 
  if ((mytrim(F.msisdn.value).length > 5) && (countNumbers(F.msisdn.value) == 6)) {
    F.ifrange.disabled = false;
  } else {
    F.ifrange.disabled = true;
    F.ifrange.checked = false;
  }
  
  if(F.ifrange.checked == true) {
    F.golden.checked = false;
  }else {
    F.range.disabled = true;
    F.range.value = '';
  }
  
  if(F.golden.checked == true) {
    F.ifrange.checked = false;
  }
  
  return true;
}


/*
* Function displays both buttons
*/
function showButtons(){
    var sb = document.getElementById("mysearch");
    sb.style.display = "block";
    var cb = document.getElementById("myconvert");
    cb.style.display = "block";  
}

/*
* Function set value for RangeNumber input box 
*/
function changeRangeStatus() {  
  if (F.ifrange.checked){
    F.range.disabled =false;
    document.entryform.range.value = '2';    
  }else{
    F.range.disabled = true;
    F.range.value = '';
  }
}

/************************************************
DESCRIPTION: Validates that a string contains only
    valid integer number.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
**************************************************/
function validateInteger( strValue ) {

  var objRegExp  = new RegExp("/(^-?\d\d*$)/");
  //check for integer characters
  return objRegExp.test(strValue);
}