
// *********************************************************************** Path Variables

var ImagesPath="../images";
var ScriptsPath=".";

// *********************************************************************** "shortcuts"

$_doc=document;
$id=function(id) { return $_doc.getElementById(id); }
$_attr=function(id,name,value) { 
  if(value != null) { $id(id).setAttribute(name,value); }
  return $id(id).getAttribute(name);
}

// *********************************************************************** Cookies

$_cookie=function(name,value,days) {
  if(value != null) {
    var expiryDate=new Date();
    var today=new Date();
    if(days == null) { days=30; }
    expiryDate.setTime(today.getTime() + 1000*60*60*24*days);
    $_doc.cookie=name+"="+escape(value)+("; expires="+expiryDate.toGMTString());
  } else {
    var search=name+"=";
    var oCookie=$_doc.cookie;
    if(oCookie.length > 0) {
      offset=oCookie.indexOf(search);
      if(offset != -1) {
        offset+=search.length;
        end=oCookie.indexOf(";",offset);
        if(end == -1) { end=oCookie.length; }
        value=unescape(oCookie.substring(offset,end));
      }
    }
  }
  return value;
}

// *********************************************************************** Ajax

$_ajax=function() {
  var Result=null;
  try {
    Result=new XMLHttpRequest();
  } catch (e) {
    try {
      Result=new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      Result=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return Result;
}
ajaxResponses=[
  "<i>Ready...</i>",
  "<i>Initializing request...</i>",
  "<i>Sending request...</i>",
  "<i>Awaiting response...</i>",
  "<i>Response received.</i>"
];

function do_ajax(scriptUrl,hook,div) {
  var ajaxObj=$_ajax();
  if(ajaxObj == null) { alert("Your browser does not support Ajax."); return false; }
  var parameters="";
  if(arguments[3]) {
    if(arguments[3].indexOf("&") != -1)  { 
      parameters=arguments[3];
    } else {
      for(var i=3;i<arguments.length;i+=2) {
        if(i >= 5) { parameters+="&"; }
        parameters+=arguments[i]+"="+arguments[i+1];
      }
    }
  }
  ajaxObj.onreadystatechange=function() { hook(ajaxObj.readyState,ajaxObj.responseText,div); }
  ajaxObj.open('POST',scriptUrl,true);
  ajaxObj.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  ajaxObj.setRequestHeader("Content-length",parameters.length);
  ajaxObj.setRequestHeader("Connection","close");
  ajaxObj.send(parameters);
}

show_ajax=function(aReadyState,aResponseText,div) {
  if(!(div)) { div="Ajax"; }
  if(aReadyState < 4) { $id(div).innerHTML=ajaxResponses[aReadyState]; }
  else { $id(div).innerHTML=aResponseText; }
}

// *********************************************************************** Utility Functions

// *** Forms

function submit_form(todo,name) {
  if(name == null) { name=0; }
  $_doc.forms[name].elements["todo"].value=todo;
  $_doc.forms[name].submit();
}

function confirm_delete(todo,message) {
  if(!(message)) { message="About to delete record!"; }
  if(confirm(message)) { submit_form(todo); } else { return false; }
}

// *** Stylistics

function show_hide(aId) {
  oBut=$id("but"+aId);
  oEle=$id("div"+aId);
  if(oBut.value == "Show") {
    oBut.value="Hide";
    oEle.style.display="block";
  } else {
    oBut.value="Show";
    oEle.style.display="none";
  }
}

function excon_help() {
  if($id("HelpBox").style.display == "none") {
    $id("HelpBox").style.display="block";
    $id("exconHelp").innerHTML="- Help";
    $id("exconHelp").setAttribute("title","Collapse Help");
  } else {
    $id("HelpBox").style.display="none";
    $id("exconHelp").innerHTML="+ Help";
    $id("exconHelp").setAttribute("title","Expand Help");
  }
}

// *********************************************************************** DOM Manipulation

function create_element() {
  var oResult=$_doc.createElement(arguments[0]);
  for(var i=1;i<arguments.length;i++) {
    var AttrVals=arguments[i].split(":=");
    (AttrVals[0] == "class")
     ?oResult.className=AttrVals[1]
     :oResult.setAttribute(AttrVals[0],AttrVals[1]);
  }
  return oResult;
}

function create_auth(aForm,aValue) {
  if(aForm == null) { aForm=0; }
  if(aValue == null) { aValue=$_doc.location.toString(); }
  $_doc.forms[aForm].appendChild(create_element("input",
                                                "name:=auth",
                                                "value:="+aValue,
                                                "type:=hidden"));
}

function remove_children(Id) {
  var oParent=$id(Id);
  while(oParent.hasChildNodes()) { oParent.removeChild(oParent.childNodes[0]); }
}

// *********************************************************************** Form Checking

function check_field(fName,fCheck) {
  var errors="";
  var objInput=$id(fName);
  var fValue=objInput.value;
  fName=fName.replace(/_/g," ");
  if((fCheck == "email")&&(fValue.length > 0)) {
    re=/.+\@.+\..+/;
    OK=re.exec(fValue);
    if(!OK) {
      errors="<li><li>"+fName+": <b>"+fValue+"</b> does not appear to be a valid email address.</li>";
    }
  }
  if(fCheck == "select") {
    if(fValue == "Please select...") {
      errors="<li>Please select a <b>"+fName+"</b>.</li>";
    }
  }
  if((fCheck == "integer")&&(fValue.length > 0)) {
    re=/\d+/;
    OK=re.exec(fValue);
    if((!OK)&&(fValue.length > 0)) {
      errors="<li><b>"+fName+"</b>: <i>"+fValue+"</i> must be an absolute integer.</li>";
    }
  }
  if((fCheck == "phone")&&(fValue.length > 0)) {
    re=/\+?\d+[\+\d \(\)]*/;
    OK=re.exec(fValue);
    if(!OK) {
      errors="<li><b>"+fName+"</b>: <i>"+fValue+"</i> can only contain digits, spaces and parentheses.</li>";
    }
  }
  if(fCheck.substr(0,6) == "length") {
    re=/^(\w+)(=|>|<)(\d+)/;
    re.exec(fCheck);   
    if(RegExp.$2 == '>') {
      if(fValue.length <= parseInt(RegExp.$3)) {
        if(RegExp.$3 == 0) {
          errors="<li>Please fill in <b>"+fName+"</b>, it is a required input.</li>";
        } else {
          errors="<li><b>"+fName+"</b>: <i>"+fValue+"</i> should be more than "+RegExp.$3+" characters long.</li>";
        }
      }
    }
    if(RegExp.$2 == '=') {
      if(fValue.length != parseInt(RegExp.$3)) {
        errors="<li><b>"+fName+"</b>: <i>"+fValue+"</i> should be "+RegExp.$3+" characters long.</li>";
      }
    }
    if(RegExp.$2 == '<') {
      if(fValue.length >= parseInt(RegExp.$3)) {
        errors="<li><b>"+fName+"</b>: should be less than "+RegExp.$3+" characters long.</li>";
      }
    }
  }
  if(fCheck == 'HTML') {
    re=/[><]/;
    OK=re.exec(fValue);
    if(OK) {
      errors="<li><b>"+fName+"</b>: may not contain HTML braces (> or <).</li>";
    }
  }
  if(errors.length > 0) {
    objInput.style.borderColor="#c00000";
    objInput.focus();
  }
  return errors;
}

function check_box(aId) {
  $id(aId).click();
}

function neaten_url(eId) {
  var objURL=document.getElementById(eId);
  if(objURL.value.indexOf("://") < 0) {
    objURL.value="http://"+objURL.value;
  }
  return /:\/\/.+\..+$/.exec(objURL.value);
}

// ******************************************************************* Banners and Text Ads 

var timer;
var timeCounter=0;
var bannerObjs=[];
var bannerIndex=0;

function scroll_ads() {
  var oTextAds=$id("TextAds");
  var leftPos=oTextAds.offsetLeft;
  leftPos--;
  if(-leftPos >= oTextAds.offsetWidth) {
    leftPos=document.getElementById("TextWrap").offsetWidth;
  }
  oTextAds.style.left=leftPos+"px";
  timeCounter+=10;
  if((bannerObjs.length > 0)&&(timeCounter%10000 == 0)) { 
    bannerIndex++;
    if(bannerIndex >= banners.length) { bannerIndex=0; }
    remove_children("Banner");
    $id("Banner").appendChild(bannerObjs[bannerIndex]);
  }
}

function start_ads() {
  if(timer) { window.clearInterval(timer); }
  timer=window.setInterval("scroll_ads()",10);
}

function stop_ads() {
  if(timer) { window.clearInterval(timer); }
}

function load_ads() {
  // Load Text Ads
  for(var i=0;i<texts.length;i++) {
    var aColor=(i % 2 == 0)?"0000ff":"ff0000";
    var objAd=create_element("a",
                             "style:=margin-right:2em;color:#"+aColor,
                             "href:="+texts[i]["href"],
                             "title:="+texts[i]["title"],
                             "target:=_blank");
    objAd.appendChild(document.createTextNode(texts[i]["text"]));
    $id("TextAds").appendChild(objAd);
  }
  // Load Banners
  for(var i=0;i<banners.length;i++) {
    var objAd=create_element("a",
                             "href:="+banners[i]["href"],
                             "target:=_blank");
    objAd.appendChild(create_element("img",
                                     "src:=../banners/"+banners[i]["image"],
                                     "border:=0",
                                     "alt:="+banners[i]["alt"],
                                     "title:="+banners[i]["alt"]));
    bannerObjs.push(objAd);
  }
  if(bannerObjs.length > 0) {
    $id("Banner").appendChild(bannerObjs[0]);
  }
  if(bannerObjs.length > 0) {
    $id("Banner").appendChild(bannerObjs[0]);
  }
  start_ads();
}

// *********************************************************************** Login

function check_key(e) {
  if(window.event) {
    if(e.keyCode == 13) { do_login("Login"); }
  } else if(e.which) {
    if(e.which == 13) { do_login("Login"); }
  }
}

function check_key_admin(e) {
  if(window.event) {
    if(e.keyCode == 13) { do_login("show_Profile","Admin"); }
  } else if(e.which) {
    if(e.which == 13) { do_login("show_Profile","Admin"); }
  }
}

check_username_response=function(aReadyState,aResponseText,aDiv) {
  if(aReadyState < 4) { $id(aDiv).innerHTML=ajaxResponses[aReadyState]; }
  else {
    var UserIndex=aResponseText;
    var loginButton=$id('butLogin');
    var oResp=$id(aDiv);
    if(UserIndex > 0) {
      $id("UserIndex").value=UserIndex;
      oResp.innerHTML="<i>"+$id("Username").value+"</i> is a member,<br>";
      oResp.innerHTML+="please enter your password...<br>";
      oResp.innerHTML+="<a href='javascript:do_login(\"emailPassword\",\""+
                       $id("aUserType").value+"\")'>Email password to <i>"+$id("Username").value+"</i>...</a>";
      loginButton.disabled=false;
      loginButton.className="cbutton";
      $id("Password").focus();
    } else {
      oResp.innerHTML="<b>"+$id("Username").value+"</b> is not a member.<br><i>Waiting to check username...</i>";
      loginButton.disabled=true;
      loginButton.className="cdisabled";
    }
  }
}

function check_username(aUserType) {
  if(!(aUserType)) { aUserType="Member"; }
  var aUsername=$id("Username").value;
  var OK=/.+@.+\..+/.exec(aUsername);
  if(OK) {
    $id("aUserType").value=aUserType;
    do_ajax("username.pl",check_username_response,"UsernameCheck",
            "action","Login",
            "Username",aUsername,
            "UserType",aUserType);
  } else {
    $id("UsernameCheck").innerHTML="<b>"+aUsername+
                                   "</b> is not a valid email address.<br><i>Waiting to check username...</i>";
  }
}

login_response=function(aReadyState,aResponseText,aDiv) {
  if(aReadyState < 4) { $id(aDiv).innerHTML=ajaxResponses[aReadyState]; }
  else {
    $id(aDiv).innerHTML=aResponseText;
    if(aResponseText.indexOf("Authenticated.") > 0) {
      if($id("Active").value == 0) { $id("LoginForm").action="primary.pl"; }
      if($id("UserType").value != "Member") { $id("LoginForm").action="Admin_main.pl"; }
      
      $id("LoginForm").submit();
    }
  }
}

function do_login(anAction,aUserType) {
  if(($id("Password").value == "")&&(anAction == "Login")) {
    alert("Please enter your password.");
    $id("Password").focus();
    return;
  }
  if(!(aUserType)) { aUserType="Member"; }
  var Abort=false;
  if($id("UserIndex")) {
    if((isNaN($id("UserIndex").value))||
       ($id("UserIndex").value < 0)||
       ($id("UserIndex").value == "")) { Abort=true; }
  } else { Abort=true; }
  if(Abort) {
    $id("butLogin").disabled=true;
    $id("butLogin").className="cdisabled";
    $id("Username").focus();
    alert("Username not verified!");
    return false;
  }
  do_ajax("do_login.pl",login_response,"PasswordCheck",
          "action",anAction,
          "Username",$id("Username").value,
          "UserType",aUserType,
          "UserIndex",$id("UserIndex").value,
          "Password",$id("Password").value);
}



// *************************************************************** Site Functions

function do_logout() {
  $_cookie("login",-1,0);
  window.location="login.pl";
}

function navigate_to(aPage) {
  if($id("SessionID")) {
    oForm=$id("MainForm");
    for(var i=1;i<arguments.length;i++) {
      var nameValue=arguments[i].split(":=");
      oForm.appendChild(create_element("input",
                                       "name:="+nameValue[0],
                                       "value:="+nameValue[1],
                                       "type:=hidden"));
    }
    oForm.action=aPage;
    oForm.submit();
  } else {
    $_doc.location=aPage;
  }
}

function iterate_page() {
  load_ads();
  if($id("SessionID")&&($id("UserIndex"))) { $_cookie("login",$id("UserIndex").value); }
}

function list_all(aSubmission) {
  $id("Find").value="*";
  submit_form(aSubmission);
}
