var UserNameChars='qwertyuiopasdfghjklzxcvbnm-QWERTYUIOPASDFGHJKLZXCVBNM_0123456789.';
var PasswdChars='qwertyuiopasdfghjklzxcvbnm-QWERTYUIOPASDFGHJKLZXCVBNM+&$!|%^();:0123456789.';
var PasswdSpecialChars='&$!|%^();:'
var ActivationChars='qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
var __domainNameLength = new String ("tellas.gr").length;

function inArray(arr, ele)
{
	var found = false, index = 0;
	while(!found && index < arr.length)
	{
		if(arr[index] == ele)
			found = true;
		else
			index++;
	}
	return found;
}

function posArray(arr, ele)
{
	var found = false, index = 0, ret=0;
	while(!found && index < arr.length)
	{
		if(arr[index] == ele)
		{
			found = true;
			ret=index;
		}
		else
			index++;
	}
	return ret;
}

function AllowedChars(decSep, e, __type, __hintid)
{
	var key = '';
	var strCheck = decSep;
	var _keys1=[0,8,9];
	var _keys2=[0,8,9,16,17,18,35,36,37,38,39,40,46];

	if (__type==1)
		strCheck+=UserNameChars;
	else if (__type==2)
		strCheck=PasswdChars;
	else if (__type==3)
		strCheck=ActivationChars;

	var whichCode = (window.Event) ? e.which : e.keyCode;
	key = String.fromCharCode(whichCode);  // Get key value from key code
	if ((strCheck.indexOf(key) == -1)  && (!inArray(_keys1, whichCode) || !inArray(_keys2, whichCode)) )
	{
		return false;  // Not a valid key
	}
	else
	{
		return true;
	}
}

function CheckUsername(__username, __id){
	if ((__username.length+__domainNameLength>30) || (__username.length<4)){
		alert(unescape(__jsAlertUserLength));
//		eval("document.getElementById('"+__id+"').className='err'");
//		setTimeout(function(){document.getElementById(__id).focus();}, 2);
		//delete __obj;
		return false;
	}
//	else{
//		if (eval("document.getElementById('"+__id+"').className")=='err')
//			eval("document.getElementById('"+__id+"').className=''");
//	}

	if (__username[0]=='.' || __username[0]=='_' || __username[0]=='-'){
		alert(unescape(__jsUsernameValid));
		return false;
	}

	return true;
}

function CheckPassword(__pass, __id){
	var __passTxt=eval("document.getElementById('"+__id+"').value");
	var __runs=parseInt(detectRuns(__pass));

	if (__passTxt.length<6 || __passTxt.length>12){
		alert(unescape(__jsPasswordLength));
		return false;
	}
	else if (__runs<6){
		alert(unescape(__jsPasswordContChars+"\n"+__runs));
		return false;
	}
	else{
		var regex_sc = new RegExp('['+PasswdSpecialChars+']', 'g');
		var lcase_count = __pass.match(/[a-z]/g);
		var ucase_count = __pass.match(/[A-Z]/g);
		var num_count   = __pass.match(/[0-9]/g);
		var schar_count = __pass.match(regex_sc);

		lcase_count = (lcase_count) ? lcase_count.length : 0;
		ucase_count = (ucase_count) ? ucase_count.length : 0;
		num_count   = (num_count) ? num_count.length : 0;
		schar_count = (schar_count) ? schar_count.length : 0;
		if (lcase_count==0){
			alert(unescape(__jsPasswordLowerChars));
            return false;
        }
		if (num_count==0){
			alert(unescape(__jsPasswordNumChars));
            return false;
        }
		if (ucase_count==0){
			alert(unescape(__jsPasswordCapitalChars));
            return false;
        }
		if (schar_count==0){
			alert(unescape(__jsPasswordSpecialChars));
            return false;
        }
	}
	return true;
}

function CheckCsPassword(__pass, __id){
	var __passTxt=eval("document.getElementById('"+__id+"').value");
	var __runs=parseInt(detectRuns(__pass));

	if (__passTxt.length<6 || __passTxt.length>12){
		alert(unescape(__jsCsPasswordLength));
		return false;
	}
	else if (__runs<6){
		alert(unescape(__jsPasswordContChars+"\n"+__runs));
		return false;
	}
	else{
		var regex_sc = new RegExp('['+PasswdSpecialChars+']', 'g');
		var lcase_count = __pass.match(/[a-z]/g);
		var ucase_count = __pass.match(/[A-Z]/g);
		var num_count   = __pass.match(/[0-9]/g);
		var schar_count = __pass.match(regex_sc);

		lcase_count = (lcase_count) ? lcase_count.length : 0;
		ucase_count = (ucase_count) ? ucase_count.length : 0;
		num_count   = (num_count) ? num_count.length : 0;
		schar_count = (schar_count) ? schar_count.length : 0;
		if (lcase_count==0){
			alert(unescape(__jsCsPasswordLowerChars));
            return false;
        }
		if (num_count==0){
			alert(unescape(__jsCsPasswordNumChars));
            return false;
        }
		if (ucase_count==0){
			alert(unescape(__jsCsPasswordCapitalChars));
            return false;
        }
		if (schar_count==0){
			alert(unescape(__jsCsPasswordSpecialChars));
            return false;
        }
	}
	return true;
}

function CheckRePass(__id, __prev_id){
    var password = document.getElementById(__prev_id).value;
    var passwordConfirm = document.getElementById(__id).value;

    if (password != passwordConfirm || passwordConfirm.length==0){
		alert(unescape(__jsNoMatchingPasswords));
		eval("document.getElementById('"+__id+"').value=''");
		return false;
	}
    
	return true;
}

function CheckFieldNum(__id)
{
	var __formID=eval("document.getElementById('"+__id+"').form.id");
	var __maxlen=eval("document.getElementById('"+__id+"').maxLength");
	var __len=eval("document.getElementById('"+__id+"').value");

	if (__id.length==__maxlen)
	{
		try{
			var __formElems=eval("document.getElementById('"+__formID+"').attributes");
			printDOMTree(eval("document.getElementById('"+__formID+"').attributes"));
		}
		catch (err)
		{
			txt="There was an error on this page.\n\n";
			txt+="Error description: " + err.description + "\n\n";
			txt+="Click OK to continue.\n\n";
			alert(txt);
		}
	}
		
}

function focusNext(form, elemName, evt) {
    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode :
        ((evt.which) ? evt.which : evt.keyCode);
    if (charCode == 13) {
        form.elements[elemName].focus();
        return false;
    }
    return true;
}


function checkActivationCode(){
    var __actID=document.getElementById('actiIDFormElem').value;
    
	//Check Activation ID
	__actID=__actID.toUpperCase(__actID.replace(/^\s*|\s*/g,''));	//Replace White Space
	__actID=__actID.substr(0,9);									//Set it to 9 chars.
	if (__actID==""){
		alert(unescape(__jsActivationID));
        document.getElementById('actiIDFormElem').focus();
        document.getElementById('actiIDFormElem').select();
        document.getElementById('errorStar').className = "errorText visible";

		return false;
	}
    
    return true;
}

function checkStep2Fields(){
    document.getElementById("userNameErrorStar").className="errorText invisible";
    document.getElementById("passwordErrorStar").className="errorText invisible";
    document.getElementById("passwordConfirmErrorStar").className="errorText invisible";

    //CheckUsername --------------------------------------------------------------------------------
	var __username=document.getElementById('adslusername').value;
	var __usernameid="adslusername";

	if (!CheckUsername(__username, __usernameid)){
        __username=__username.toLowerCase(__username.replace(/^\s*|\s*/g,''));
        document.getElementById("adslusername").focus();
        document.getElementById("adslusername").select();
        document.getElementById("userNameErrorStar").className="errorText visible";

        return false;
    }

    //Check Password -------------------------------------------------------------------------------
    var password = document.getElementById('adslpass').value;

	if (!CheckPassword(password, 'adslpass')){
        document.getElementById("adslpass").focus();
//        document.getElementById("adslpass").select();
        document.getElementById("passwordErrorStar").className="errorText visible";
		return false;
    }

    //Check Password Confirmation ------------------------------------------------------------------
    if (!CheckRePass('adslrepass', 'adslpass')){
        document.getElementById("adslrepass").focus();
        document.getElementById("adslrepass").select();                
        document.getElementById("passwordConfirmErrorStar").className="errorText visible";
        return false;
    }

    return true;
}

function checkStep3Fields(){
    document.getElementById("customerServicePasswordErrorStar").className="errorText invisible";
    document.getElementById("securityQuestionErrorStar").className="errorText invisible";
    document.getElementById("securityQuestionAnswerErrorStar").className="errorText invisible";

    //Check Customer Service Password --------------------------------------------------------------
    var password = document.getElementById('csPassword').value;

	if (!CheckCsPassword(password, 'csPassword')){
        document.getElementById("csPassword").focus();
        document.getElementById("customerServicePasswordErrorStar").className="errorText visible";
        document.getElementById('csPassword').value = "";
		return false;
    }

    //Check Customer Password reminder question ----------------------------------------------------
    var reminderQuestion = document.getElementById('cspReminderQuestion').value;
    if (!checkReminderQuestion(reminderQuestion)){
        document.getElementById("cspReminderQuestion").focus();
        document.getElementById("cspReminderQuestion").select();
        document.getElementById("securityQuestionErrorStar").className="errorText visible";
        document.getElementById('csPassword').value = "";
		return false;
    }

    //Check Customer Password reminder question answer ---------------------------------------------
    var reminderQuestionAnswer = document.getElementById('cspReminderAnswer').value;
    if (!checkReminderQuestionAnswer(reminderQuestionAnswer)){
        document.getElementById("cspReminderAnswer").focus();
        document.getElementById("cspReminderAnswer").select();
        document.getElementById("securityQuestionAnswerErrorStar").className="errorText visible";
        document.getElementById('csPassword').value = "";
        return false;
    }

    return true;
    
}

function checkReminderQuestion(rq){
    if (rq.length==0){
        alert(unescape(__jsRqEmpty));
        return false;
    }

    if (rq.length>50){
        alert(unescape(__jsRqLength));
        return false;
    }

    return true;
}

function checkReminderQuestionAnswer(rqa){
    if (rqa.length==0){
        alert(unescape(__jsRqaEmpty));
        return false;
    }

    if (rqa.length>30){
        alert(unescape(__jsRqaLength));
        return false;
    }

    return true;
}

function checkFormStatus()
{

	//Check ActivationID
	var __actID=document.getElementById('actiIDFormElem').value;
	var __username=document.getElementById('adslusername').value;
	var __usernameid="adslusername";
	var __3="";
	var __4="";
	var __5="";
	
	//Check Activation ID
	__actID=__actID.toUpperCase(__actID.replace(/^\s*|\s*/g,''));	//Replace White Space
	__actID=__actID.substr(0,9);									//Set it to 9 chars.
	if (__actID=="")
	{
		alert(unescape(__jsActivationID));
		return false;
	}
	
	//CheckUsername
	
	if (!CheckUsername(__username, __usernameid))
	__username=__username.toLowerCase(__username.replace(/^\s*|\s*/g,''));
	
		return false;

	//Check Password
	if (!CheckUsername(__username, __usernameid))
		return false;


	return false;
}

function traverseDOMTree(targetDocument, currentElement, depth)
{
  if (currentElement)
  {
    var j;
    var tagName=currentElement.tagName;
    // Prints the node tagName, such as <A>, <IMG>, etc
    if (tagName)
      targetDocument.writeln("&lt;"+currentElement.tagName+"&gt;");
    else
      targetDocument.writeln("[unknown tag]");

    // Traverse the tree
    var i=0;
    var currentElementChild=currentElement.childNodes[i];
    while (currentElementChild)
    {
      // Formatting code (indent the tree so it looks nice on the screen)
      targetDocument.write("<BR>\n");
      for (j=0; j<depth; j++)
      {
        // &#166 is just a vertical line
        targetDocument.write("&nbsp;&nbsp;&#166");
      }								
      targetDocument.writeln("<BR>");
      for (j=0; j<depth; j++)
      {
        targetDocument.write("&nbsp;&nbsp;&#166");
      }					
      if (tagName)
        targetDocument.write("--");

      // Recursively traverse the tree structure of the child node
      traverseDOMTree(targetDocument, currentElementChild, depth+1);
      i++;
      currentElementChild=currentElement.childNodes[i];
    }
    // The remaining code is mostly for formatting the tree
    targetDocument.writeln("<BR>");
    for (j=0; j<depth-1; j++)
    {
      targetDocument.write("&nbsp;&nbsp;&#166");
    }			
    targetDocument.writeln("&nbsp;&nbsp;");
    if (tagName)
      targetDocument.writeln("&lt;/"+tagName+"&gt;");
  }
}

////////////////////////////////////////////
// This function accepts a DOM element as parameter and prints
// out the DOM tree structure of the element.
////////////////////////////////////////////
function printDOMTree(domElement, destinationWindow)
{
  // Use destination window to print the tree.  If destinationWIndow is
  //   not specified, create a new window and print the tree into that window
  var outputWindow=destinationWindow;
  if (!outputWindow)
    outputWindow=window.open();

  // make a valid html page
  outputWindow.document.open("text/html", "replace");
  outputWindow.document.write("<HTML><HEAD><TITLE>DOM</TITLE></HEAD><BODY>\n");
  outputWindow.document.write("<CODE>\n");
  traverseDOMTree(outputWindow.document, domElement, 1);
  outputWindow.document.write("</CODE>\n");
  outputWindow.document.write("</BODY></HTML>\n");
  
  // Here we must close the document object, otherwise Mozilla browsers 
  //   might keep showing "loading in progress" state.
  outputWindow.document.close();
}
function HelpMessage(){
	alert(__jsHelpMessage);
}
function detectRuns(__Str)
{
	var parts = __Str.split('');
	var ords = new Array();
	for (i in parts)
	{
		ords[i] = parts[i].charCodeAt(0);
	}
	var accum = 0;
	var lasti = ords.length-1

	for (var i=0; i < lasti; ++i)
		accum += Math.abs(ords[i] - ords[i+1]);

	return accum/lasti;
}
