﻿function stopBubble(e)// this script is used to prevent event bubbling
{
	//if (!e) e = window.event;
	//e.cancelBubble = true;
	//if (e.stopPropagation) e.stopPropagation();	
}

 
function JSTest() {
    // hides the Javascript error if user has Javascript enabled.
document.getElementById('JSTest_DIV').style.display = "none";
}

//============================ URL ===================================
//-- on PageLoad Users Biz Link from QS
function setURLfromQS() {
var URLctrl = document.getElementById('URL_txt');
//var URLqs = $get('<% = URLqs_HF.ClientID %>').value;
var URLqs = URLhfVal;
if (URLqs == '' || URLqs == null){
return
}else{
URLctrl.value = URLqs;
checkURLprepare(URLctrl);
}
}
//-- on PageLoad has User ID ?
var hasUID = '0'

function checkHasUID() {
//hasUID = document.getElementById('<% = hasUID_HF.ClientID %>').value;
hasUID = hasUIDhfVal;
if (hasUID == '1')
 {
 //var userEmail = document.getElementById('<% = UserEmail_HF.ClientID %>').value;
 var userEmail = userEMAILhfVal;
 setUserEmail(userEmail); 
 }
}
//-- set User Email if known
function setUserEmail(address) {
var EmailTxt = document.getElementById('Email_txt');
EmailTxt.value = address ;
//EmailTxt.disabled = "disabled";
}
//==== ontype check ====
function checkURLprepare(URLctrl) {
var URL = URLctrl.value;
var URLrx = new RegExp("^[\\w]+\\.[\\w\\.]*");
var URLm = URL.match(URLrx);
if (URLm != null){
checkURL('URL=www.' + URLm ,'');
}
}

function checkURL(input, response)
{
var checkURLDIV = document.getElementById('checkURL_DIV')
checkURLDIV.innerHTML = '<i>Checking URL...</i>'
  if (response != ''){ 
    // Response mode        
    if (response == '1'){ //EXACT match
        checkURLDIV.innerHTML = 'URL already registered!';   
        var fieldset = checkURLDIV.parentNode;
        fieldset.className = "no";    
    }else if (response == '0'){ // success NO matches      
        checkURLDIV.innerHTML = 'URL OK';
    }else if (response != '1' || response != '0'){
        checkURLDIV.innerHTML = '<i>similar URLs found:</i> ' + response;   
    }     
  }else{
    // Input mode
    url = './AJAX/checkURL.aspx?' + input;
    loadXMLDoc(url);
  }
}

//==== URL btn click ====
function URL_btn_onclick(btn) {
var URLfieldset = btn.parentNode.parentNode;

var isValid = validate(URLfieldset);
if (isValid == 1) {

document.getElementById('step2_progress_div').className = 'show';
ret = Spider.SiteDescTitle('www.' + document.getElementById('URL_txt').value, OnComplete, OnTimeOut, OnError);

}
}
function pullIt(text, sCharacter, eCharacter, fillTxtCntrl) 
{   
    var reg = new RegExp(sCharacter + '(.*)' + eCharacter); 
    var s, reText; 
    s = reg.exec(text);       
    reText = s[1];   
   
    if(document.all){
     document.getElementById(fillTxtCntrl).innerText = reText.trimStart();
} else{
    document.getElementById(fillTxtCntrl).textContent = reText.trimStart();
}
    
    return(true);
}
function OnComplete(args) {
pullIt(args, '#:desc:::#', '#:::desc:#', 'CompDescription_txt')
pullIt(args, '#:title:::#', '#:::title:#', 'CompTitle_txt')
//ChangeIndex();
gotoPaneIndex(1);
setFieldsetsClass('CompName_FS');
setFieldsetsClass('CompTitle_FS');
setFieldsetsClass('CompDesc_FS');
cleanUp();
return(true);
}

function OnTimeOut(args) {
alert("No websibe found, please retype URL.");
cleanUp();
return(false);
}

function OnError(args) {
alert("Error calling service method.");
cleanUp();
return(false);
}

//=========== check comp Name ============
function checkCompNamePrepare(txtCtrl){
var compName = txtCtrl.value;
var compRX = new RegExp("^[\\w\\d]{3}");
var compNameM = compName.match(compRX);
if (compNameM != null){
checkCompName('CompName=' + compName ,'');
}
}

function checkCompName(input, response)
{
var checkCompNameDIV = document.getElementById('checkCompName_DIV');
checkCompNameDIV.innerHTML = '<i>Checking Business Name...</i>';
  if (response != ''){ 
    // Response mode        
    if (response != '0'){ // matches found
        checkCompNameDIV.innerHTML = '<i>similar Business Names found:</i> ' + response;             
    }else if (response == '0'){ // success NO match
        checkCompNameDIV.innerHTML = 'Business Name OK';
    }  
         
  }else{
    // Input mode    
    url = './AJAX/checkCompName.aspx?' + input;
    loadXMLDoc(url);    
  }

}

//=====================================================================
function SubmitDesc_btn_click(btn) {
var fieldset = btn.parentNode.parentNode;
var isValid = validate(fieldset);
if (isValid == 1) {
//form is Valid

gotoPaneIndex(2);
}
}

//=====================================================================
function catConfirm_btn_onclick(btn) {
//var ID = document.getElementById('<% = ChosenCatID_lbl.ClientID %>').innerText
var ID = $get(ChosenCatIDlbl).innerText;
//var isValidSS = document.getElementById('<% = CatValid_HF.ClientID %>').value
var isValidSS = $get(CatValidHF).value;

if (isValidSS == '0'){
alert('Please Choose a Sub Category')
return(false)
}else{
var fieldset = btn.parentNode.parentNode;
var isValid = validate(fieldset);

if (isValid == 1 && ID != 0) {
setFieldsetsClass('Postcode_FS');
setFieldsetsClass('Email_FS');
gotoPaneIndex(3);
return;
}
}
var txt = 'You have not chosen a category.\nIf you cannot find an exact match, ' +
'you need to select the one closest, \nand/or suggest a new preferred one.\nPlease Note: \nWe will store your ' +
'suggestion \nand move your business over when we add the category'

if (isValid == 1 && ID == 0){
var answer = alert(txt);
    if(answer){
    setFieldsetsClass('Postcode_FS');
    setFieldsetsClass('Email_FS');
    gotoPaneIndex(3);
    }
}else if (isValid == 0 && ID == 0){
alert(txt);

}
}

//=====================================================================

function ContactConfirm_btn_onclick(btn) 
{
    var fieldset = btn.parentNode.parentNode;
    var isValid = validate(fieldset);
    if (isValid == 1) {
    //form is Valid
    gotoPaneIndex(4);
}
}

//=====================================================================

function cleanUp() 
{
    document.getElementById('step2_progress_div').className = 'hide';
}

function ChangeIndex()
{
    var accHost = $find('Form_AC_AccordionExtender');
    var i = accHost.get_SelectedIndex() + 1;
    accHost.set_SelectedIndex(i);
}

function gotoPaneIndex(index)
{
//var accHost = $find('<%= Form_AC.ClientID %>_AccordionExtender' );
var accHost = $find(FormAC + '_AccordionExtender');
accHost.set_SelectedIndex(index);
prepareInputsForHints();
}

//------------ String Functions ---------------


// ---------------------------------------------
var hintTxt = '';
// ---------------------------------------------

function checkInput(whatYouTyped, minChars, validStr, invalidChars, useCmn) {
	var fieldset = whatYouTyped.parentNode;	
	var txt = whatYouTyped.value;
	var valRX = new RegExp(validStr);
	//alert(validStr + '\n' + typeof validStr)	
	//if we want to use common invalidChars set useCmn to 'True'
	if (useCmn == 1) {
	invalidChars = '[%\\*\\$\\^\\?\\[\\]£!={}#@;:\\|<>\\\~\\/""]+'
	}
	
	var invalRX = new RegExp(invalidChars);
	
	if (txt.length > minChars && !invalRX.test(txt) && valRX.test(txt)) {
	
	//#### ALL PASS ####
	fieldset.className = "yes";
	fieldset.getElementsByTagName("span")[1].style.display = "none";	
	}
	else if (txt.length > minChars && invalRX.test(txt)) {
	
	//#### PASS: CHAR NUM | FAIL: INVALID CHARS ####
	fieldset.className = "no";
	
	// output the list of invalid characters	
	var re = /^[\/\[]*|[\]\+\/]*$|\\(?!\\)/g;
	var invalidCharsStr = invalRX.toString().replace(re,"");
	var reSpace = /s/g;
	invalidCharsStr = invalidCharsStr.replace(reSpace, "(space)");
    fieldset.getElementsByTagName("span")[1].style.display = "inline";
	fieldset.getElementsByTagName("span")[1].innerHTML = "Do not use the characters: " + invalidCharsStr;
	} else if (minChars == 0) {
	    fieldset.className = "yes";	   
	} else {
		fieldset.className = "no";		
	}	
}
// ==============================================
function validate(fieldset) {

if (fieldset != undefined) {
var fail = 0;
if (fieldset.className == '') 
{ //in a "master" fieldset containing fieldsets with classnames we're to check
    var fieldsetAry = fieldset.getElementsByTagName("fieldset");
    for (var i=0; i<fieldsetAry.length; i++){    
    if (fieldsetAry[i].className == "no")
    fail = 1;
    }
}
if (fieldset.className == "no" || fail == 1) {
alert('Please make sure there are no errors');
return 0;
}else{
return 1;
}
}
}
// ==============================================
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}
// ----------- OnLoad events ------------- //

function prepareInputsForHints() {

  var inputs = document.getElementsByName("needHint");
  var counters = document.getElementsByName("counter");
  
  for (var i=0; i<inputs.length; i++){
    inputs[i].onfocus = function () {
      this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
      this.parentNode.getElementsByTagName("span")[1].style.display = "none"; // invalid chars hint
    }
    inputs[i].onblur = function () {
      this.parentNode.getElementsByTagName("span")[0].style.display = "none";
      this.parentNode.getElementsByTagName("span")[1].style.display = "none"; // invalid chars hint
    }
    var field = inputs[i]
    if (counters[i] != undefined) {
    var maxlimit = counters[i].maxLength
    if (field.value.length > maxlimit){ // if too long...trim it!
    field.value = field.value.substring(0, maxlimit);
    counters[i].value = 0;}
    else {
    counters[i].value = maxlimit - field.value.length;}    
  }
  }
}
addLoadEvent(JSTest);
addLoadEvent(prepareInputsForHints);
addLoadEvent(setURLfromQS);
addLoadEvent(checkHasUID);

//-------------------------------------------//

function setFieldsetsClass(fieldsetID){

var fieldset = document.getElementById(fieldsetID);
var inputs = new Array();
var inputs2 = new Array();
var funcSplit = new Array();
/*
//inputs =  fieldset.getElementsByTagName("input") || fieldset.getElementsByTagName("textarea");
inputs = fieldset.childNodes;
for (var i=0; i<inputs.length; i++)
    {
       if (inputs[i].name == 'needHint') 
       {
            var func = inputs[i].onkeyup;
            var re = /\(.+\)/;
                func = func.toString().match(re);
                func = func.toString().trim();
            var re2 = /^\(|\)$/;
                func = func.toString().replace(re2,'');
//var re3 = /thi[s]+/;
//func = func.toString().replace(re3, 'inputs[i]');
//func = func.toString().replace(re3, '');

                funcSplit = func.split(',');

//alert(func + '\n' + funcSplit[2]);

                var re6 = new RegExp('\\".*\\"'); // match the regex string between quote marks 
                var re7 = new RegExp('"', 'g'); // remove the quote marks
                var re8 = new RegExp('\\\\\\\\', 'g'); // replace the double escape backslashes for single
                var validStr = funcSplit[2].match(re6);

                validStr = validStr.toString().replace(re7, "");
                validStr = validStr.replace(re8, '\\');
//alert(validStr);
                checkInput(inputs[i],funcSplit[1],validStr,funcSplit[3],funcSplit[4]);
//alert(inputs[i] + ',' + funcSplit[1] + ',' + funcSplit[2] + ',' + funcSplit[3] + ',' + funcSplit[4]);

        }
    }
*/
    
}
    //inputs[i].parentNode.className = "no";

//-------------------------------------------//

function textCounter(field, countfield) 
{
var maxlimit = document.getElementById(countfield).maxLength;
if (maxlimit != '' || maxlimit != 0) {
if (field.value.length > maxlimit){ // if too long...trim it!
field.value = field.value.substring(0, maxlimit);
}else{
document.getElementById(countfield).value = parseInt(maxlimit) - (parseInt(field.value.length));
}
}
}

//-------------------------------------------//
function keyListen(e, elFunction, nextField)
{
var characterCode;
  if(e && e.which) // NN4 specific code
  {           
    e = e;
    characterCode = e.which;
  }
  else if(navigator.appName == "Microsoft Internet Explorer" ) 
  {  
    e = event;
    characterCode = e.keyCode; // IE specific code
  }  
  if (characterCode == 13) // Enter key is 13
  {   
    if (elFunction != '')
    {
    var el = document.getElementById(elFunction);
    var func = el.onclick;
    func = func.toString().replace("function anonymous()","");
    var re = /[{};]+/g; 
    func = func.toString().replace(re,'');
    func = func.toString().replace("this","el");
    func = func.toString().trim();
    eval(func);
    }
    if (nextField != '')
    {    
    var field = document.getElementById(nextField);
    field.focus();        
    }
    //alert(characterCode);
  }else{
  return false
  }
}
//-------------------------------------------//

onerror=handleErr
var txt="";
function handleErr(msg,url,l)
{
txt="There was an error on this page.\n\n";
txt+="Error: " + msg + "\n";
txt+="URL: " + url + "\n";
txt+="Line: " + l + "\n\n";
txt+="Click OK to continue.\n\n";
alert(txt); // - can remove on publishing
return true // - will suppress all errors
}

function removeChildNodes(ctrl){  
while (ctrl.childNodes[0])  {    
ctrl.removeChild(ctrl.childNodes[0]);  
}}

// ===================== check PCode ====================
var pcode = "";

function getCityPrepare(pcodeCtl) {
pcode = pcodeCtl.value;

var pcodeCityRXm = new RegExp("^[\\w]+");
var pcodeCityRXr = new RegExp("\\d+\\w*\\s*$", "g");
var pcodeCity = pcode.match(pcodeCityRXm);
if (pcodeCity != null){
pcodeCity = pcodeCity.toString().replace(pcodeCityRXr, "");
getCity('pcodeC=' + pcodeCity ,'');

}
}

//=== city ===

function getCity(input, response)
{
var CityDIV = document.getElementById('City_DIV')
CityDIV.innerHTML = '<i>Finding City...</i>';
  if (response != ''){ 
    // Response mode       
    if (response == '0'){
      CityDIV.innerHTML = '<i>No City found</i>'  ;    
    }else{
      //success
      CityDIV.innerHTML = response; 
      // -- get Towns --
        var pcodeTownRXm = new RegExp("^\\w+\\d+\\w*"); 
       //var pcodeTown = pcode.match(pcodeTownRXm);
        var pcodeTown = pcodeTownRXm.exec(pcode);
        if (pcodeTown != null){
        getTowns('pcodeT=' + pcodeTown,'');
        }      
    }     
  }else{
    // Input mode    
    url = './AJAX/getCityByPostcode.aspx?' + input;
    loadXMLDoc(url);    
  }

}

// === towns ===

function getTowns(input, response)
{
var TownsDIV = document.getElementById('Towns_DIV')
removeChildNodes(TownsDIV); // clear all child nodes
var findTxt = document.createTextNode('Finding Towns...'); // make searching txt
var font = document.createElement("font");
font.style.fontStyle = 'italic';
font.appendChild(findTxt);
TownsDIV.appendChild(font);

  if (response != ''){
   // Response mode       
    if (response == '0'){   
      //CityDIV.innerHTML = '<i>No Towns found</i>'
      var noTxt = document.createTextNode('No Towns found'); // make no result txt
        font.removeChild(findTxt);
        font.appendChild(noTxt);
    }else{
      //success
TownsDIV.removeChild(font); 
   
   var TownsAry = new Array();
   // create Towns DDL    
   var DDL = document.createElement("select");
   DDL.setAttribute("name","Towns_DDL");
   DDL.setAttribute("id","Towns_DDL");      
   DDL.options[0] = new Option('>> Click here to choose','',true); 
   
   //DDL.setAttribute("tabindex","8");   
   TownsDIV.appendChild(DDL);
   TownsDIV.appendChild(document.createElement("<br />"));
   // ----------------
   TownsAry = response.split("::");
   for (var i=0; i<TownsAry.length - 1; i++){ // towns loop
   //var el; 
   //el = document.createElement("input");
   //el.setAttribute("type", "checkbox");
   //el.setAttribute("name", TownsAry[i]);   
   //TownsDIV.appendChild(el);
   var townsText = document.createTextNode(TownsAry[i] + ", ");
   var townsFont = document.createElement("font");
   townsFont.style.fontSize = "8pt";
   townsFont.style.color = "gray";
   townsFont.appendChild(townsText);
   TownsDIV.appendChild(townsFont);
   
     DDL.options[i + 1] = new Option(TownsAry[i],TownsAry[i],false);     
     } // end of towns loop
     DDL.options[TownsAry.length] = new Option("[ my Town's not listed / no Town ]","",false);     
    } 
  }else{
    // Input mode    
    url = './AJAX/getTownsByPostcode.aspx?' + input;
    loadXMLDoc(url);
  }

}

// SAVE FORM //
//=====================================================
function saveUserFormPrepare() {
//clear response DIV of any previous error messages
var outputDIV = document.getElementById('output_DIV');
output_DIV.innerHTML = '';

var siteURL = document.getElementById('URL_txt').value;
var compName = document.getElementById('CompName_txt').value;
var compTitle = document.getElementById('CompTitle_txt').value;
var compDesc = document.getElementById('CompDescription_txt').value;
compDesc = compDesc.toString().trim();

//var catID = document.getElementById('<% = ChosenCatID_lbl.ClientID %>').innerText;
var catID = $get(ChosenCatIDlbl).innerText;
//var pCatID = document.getElementById('<% = ChosenPCatID_lbl.ClientID %>').innerText;
var pCatID = $get(ChosenPCatIDlbl).innerText;
var catSugg = document.getElementById('CatSuggest_txt').value;

var pcode = document.getElementById('Postcode_txt').value;
var hidePC = document.getElementById('HidePcode_CB').checked;
var city = document.getElementById('City_DIV').innerHTML;
var townDDLindex = document.getElementById('Towns_DDL').selectedIndex;
var town = document.getElementById('Towns_DDL').options[townDDLindex].value;
var email = document.getElementById('Email_txt').value;
//var reqLinkIDAry = document.getElementById('<% = reqLinkIDAry_HF.ClientID %>').value;
var reqLinkIDAry = $get(reqLinkIDAryHF).value;
//var ref_comp=document.getElementById('<%= referer1.ClientID %>').value;
var ref_compID=$get(referer).value;
var SUfCompID = SignUpFromCompID; // implanted on Sites_DL Load Create-User.aspx 

/*alert('URL={' + siteURL + '}&Name={' + encodeURIComponent(compName) + '}&Title={' + encodeURIComponent(compTitle) 
+ '}&Desc={' + encodeURIComponent(compDesc) + '}&CID=' + catID + '&PCID=' + pCatID + '&CatSg={' + catSugg + '}&PC=' 
+ pcode + '&hPC=' + hidePC + '&City={' + city + '}&Town={' + town + '}&Email={' + email + '}&Links=' + reqLinkIDAry 
+ '&hUID=' + hasUID ,'');*/

saveUserForm('URL={' + siteURL + '}&Name={' + encodeURIComponent(compName) + '}&Title={' + encodeURIComponent(compTitle) 
+ '}&Desc={' + encodeURIComponent(compDesc) + '}&CID=' + catID + '&PCID=' + pCatID + '&CatSg={' + catSugg + '}&PC=' 
+ pcode + '&hPC=' + hidePC + '&City={' + city + '}&Town={' + town + '}&Email={' + email + '}&Links=' + reqLinkIDAry 
+ '&hUID=' + hasUID + '&SUfCompID=' + SUfCompID + '&referer='+ ref_compID ,'');

/*alert('URL={' + siteURL + '}&Name={' + encodeURIComponent(compName) + '}&Title={' + encodeURIComponent(compTitle) 
+ '}&Desc={' + encodeURIComponent(compDesc) + '}&CID=' + catID + '&PCID=' + pCatID + '&CatSg={' + catSugg + '}&PC=' 
+ pcode + '&hPC=' + hidePC + '&City={' + city + '}&Town={' + town + '}&Email={' + email + '}&Links=' + reqLinkIDAry 
+ '&hUID=' + hasUID + '&SUfCompID=' + SUfCompID + '&referer='+ ref_compID ,'');http://links-exchange.uclocal.com/Free-Link-Exchange-User-Details*/


}

function saveUserForm(input, response)
{
var outputDIV = document.getElementById('output_DIV');
outputDIV.innerHTML = '<i>Please wait, Saving your Form Data...</i>';
  if (response != '')
  { 
   outputDIV.innerHTML = ''; // clear DIV
    // Response mode
    if (response == '1'){
      //create user success
      outputDIV.innerHTML = 'Done! You will receive an email shortly to confirm your link exchange details.<br />You may now close this form.';
    }else if (response == '2'){
      //add site success
      var l='http://links-exchange.uclocal.com/Free-Link-Exchange-User-Details'
      output_DIV.innerHTML = 'Site Added! You may now exit this form. (We suggest you now edit the sites 5 linking texts)<br /><a href='+l+'>Click here to go to Business Details</a>';
      link()
    }else {
      outputDIV.innerHTML = response;      
    }   
  }else{
    // Input mode    
    url = './AJAX/saveUserForm.aspx?' + input;
    loadXMLDoc(url);    
  }

}

//-------------------------------------------------------

var req;
function link() {


var theLink = document.createElement('a');
theLink.setAttribute('href', 'http://links-exchange.uclocal.com/Free-Link-Exchange-User-Details');
document.getElementById("output_DIV").appendChild(theLink);



}

function loadXMLDoc(url) 
{
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}
function processReqChange() 
{
    // only if req shows "complete"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            // ...processing statements go here...
            response = req.responseXML.documentElement;
            method = response.getElementsByTagName('method')[0].firstChild.data;
            result = response.getElementsByTagName('result')[0].firstChild.data;
            eval(method + '(\'\', result)');
            } else {
            alert("There was a problem retrieving the XML data:\n" + req.statusText);           
        
        }
    }
}

function stopOpen(eventElement) { // stop the pane from being opened on user click
eventElement = eventElement == null ? window.event : eventElement;
stopBubble(eventElement);
eventElement.cancelBubble =true; 
}
