﻿function SITE() {};
SITE.BUSY=false;
SITE.LOGIN = (new LoginClass()).Login;
SITE.SENDPASSWORD = (new ForgotPasswordClass()).Send;
SITE.CREATEACCOUNT = (new AccountClass()).CreateAccount;
SITE.CHANGELANGUAGE = (new ChangeLanguageClass()).ChangeLanguage;
SITE.SEARCH = (new SiteSearchClass()).Search;
SITE.LIVESEARCH = (new SiteSearchClass()).LiveSearch;
SITE.SUBJECTSEARCH = (new SiteSearchClass()).SubjectSearch;
SITE.ADDSUBJECT = (new SiteSubjectClass()).Add;
SITE.DELETESUBJECT = (new SiteSubjectClass()).Delete;
SITE.CHANGELOCATION = (new AccountClass()).ChangeLocation;
SITE.CHANGELOCATIONBYNAME = (new AccountClass()).ChangeLocationByName;
SITE.SETNOTIFICATION = (new AccountClass()).SetNotifyPreference;
SITE.UPLOADPHOTO = (new AccountClass()).UploadPhoto;
SITE.VERIFYEMAIL = (new AccountClass()).VerifyEmail;

function Book(BookingTypeID)    {
    location.href="/booking.aspx?BookingTypeID="+BookingTypeID;
}
function SimpleSearch() {
    location.href = "/search.aspx?AdvSearch=" + GEID(txtAdvSearch).value;
}
//Subjects
function SiteSubjectClass() {
    this.Add = AddSubject;
    this.Delete = DeleteSubject;
    function AddSubject(SubjectID) {
        if (!SITE.BUSY) {
            SITE.BUSY = true;
            if (!isdefined("TEACHER"))
                Service.SubjectAdd(SubjectID, SubjectChanged);
            else
                Service.SubjectAddToTeacher(SubjectID, SubjectChanged);
        }
    }    
    function DeleteSubject(SubjectID) {
        if (!SITE.BUSY) {
            SITE.BUSY = true;
            Service.SubjectDelete(SubjectID, SubjectChanged);
        }
    }
    function SubjectChanged(o) {
        SITE.BUSY = false;
        if (o[0] == "OK") {
            location.href = "?PageIndex=0&OrderMode=" + OrderMode;
        }
        else {
            if (o[0] == "REDIRECT")
                location.href = o[1];
            else
                alert(o[0]);
        }
    }
}
//Search
function SiteSearchClass() {
    this.Search = DoSearch;
    this.LiveSearch = DoLiveSearch;
    this.SubjectSearch = DoSubjectSearch;
    function DoSearch(btn) {
        if (btn == null)
            btn = GEID("btnSearch");
        if (btn!=null)
            btn.disabled = true;
        var _s = GEID(txtAdvSearch).value;
        location.href = "/search.aspx?advsearch=" + _s;
    }
    var LiveResultsHTML = "";
    var LiveResultsIndex = -1;
    var LiveResultsMax = 0;
    var SubjectResultsIndex = -1;
    var SubjectResultsMax = 0;
    function DoLiveSearch(txtBox, e) {
        switch (e.keyCode) {
            case 13: //select
                if (txtBox.id.indexOf('txtAdvSearch')!=-1)
                    return;
                DoSearch(GEID("btnSearch"));
                break;
            case 38: //up
                LiveResultsIndex--;
                if (LiveResultsIndex < 0)
                    LiveResultsIndex = LiveResultsMax - 1;
                var o = GEID("LR" + LiveResultsIndex);
                if (o != null) {
                    txtBox.value = o.getAttribute("SearchTerm");
                    for (var j = 0; j < LiveResultsMax; j++) { GEID("LR" + j).className = ""; }
                    o.className = "SearchListSelected";
                }
                break;
            case 40: //down
                LiveResultsIndex++;
                if (LiveResultsIndex == LiveResultsMax)
                    LiveResultsIndex = 0;

                var o = GEID("LR" + LiveResultsIndex);
                if (o != null) {
                    txtBox.value = o.getAttribute("SearchTerm");
                    for (var j = 0; j < LiveResultsMax; j++) { GEID("LR" + j).className = ""; }
                    o.className = "SearchListSelected";
                }
                break;
            default:
                var s = txtBox.value;
                Service.Search(s,txtBox.id, RenderLiveResults);
                break;
        }

    }
    function DoSubjectSearch(txtBox, e) {
        switch (e.keyCode) {
            case 13: //select
                var o = GEID("LR" + SubjectResultsIndex);
                if (o != null) {
                    eval(o.getAttribute("onclick"));
                }
                else
                {
                 Service.SubjectIDGet(txtBox.value,AddSubjectWithID);
                }

                break;
            case 38: //up
                SubjectResultsIndex--;
                if (SubjectResultsIndex < 0)
                    SubjectResultsIndex = SubjectResultsMax - 1;
                var o = GEID("LR" + SubjectResultsIndex);
                if (o != null) {
                    txtBox.value = o.getAttribute("SearchTerm");
                    for (var j = 0; j < SubjectResultsMax; j++) { GEID("LR" + j).className = ""; }
                    o.className = "SearchListSelected";
                }
                break;
            case 40: //down
                SubjectResultsIndex++;
                if (SubjectResultsIndex == SubjectResultsMax)
                    SubjectResultsIndex = 0;

                var o = GEID("LR" + SubjectResultsIndex);
                if (o != null) {
                    txtBox.value = o.getAttribute("SearchTerm");
                    for (var j = 0; j < SubjectResultsMax; j++) { GEID("LR" + j).className = ""; }
                    o.className = "SearchListSelected";
                }
                break;
            default:
                var s = txtBox.value;
                Service.SubjectSearch(s, txtBox.id, RenderSubjectResults);
                break;
        }
    }
    function RenderLiveResults(o) {
        if (o[0] == "") {
            hide(GEID("SearchResults"));
            LiveResultsIndex = -1;
            LiveResultsMax = 0;
            toggleSelects('show');
        }
        else {
            show(GEID("SearchResults"));
            LiveResultsHTML = o;
            GEID("SearchResults").innerHTML = o[0];
            LiveResultsMax = parseInt(o[1]);
            toggleSelects('hide');
        }
    }
    function RenderSubjectResults(o) {
        if (o[0] == "") {
            hide(GEID("SubjectResults"));
            SubjectResultsIndex = -1;
            SubjectResultsMax = 0;
            toggleSelects('show');
        }
        else {
            show(GEID("SubjectResults"));
            GEID("SubjectResults").innerHTML=o[0];
            SubjectResultsMax = parseInt(o[1]);
            toggleSelects('hide');
        }
    }
}
function AddSubjectWithID(o) {
    if (o[0]=="OK"){
        if (!isdefined("TEACHER"))
            Service.SubjectAdd(parseInt(o[1]), SubjectChanged2);
        else
            Service.SubjectAddToTeacher(parseInt(o[1]), SubjectChanged2);
    }
    else
        alert(o[0]);
}
function SubjectChanged2(o) {
    SITE.BUSY = false;
    if (o[0] == "OK") {
        location.href = "?PageIndex=0&OrderMode=" + OrderMode;
    }
    else {
        if (o[0] == "REDIRECT")
            location.href = o[1];
        else
            alert(o[0]);
    }
}
//Internationalisation
function ChangeLanguageClass() {
    this.ChangeLanguage = DoChangeLanguage;
    function DoChangeLanguage(CultureCode) {
        if (!SITE.BUSY) {
            SITE.BUSY = true;
            Service.ChangeLanguage(CultureCode, LanguageChanged);
        }
    }
    function LanguageChanged(o) {
        SITE.BUSY = false;
        location.reload();
    }
}

//Login Class
function LoginClass() {
    var Remember = false;
    var Username="";
    var Password = "";
    var CallingButton = null;
    this.Login = DoLogin;
    
    function DoLogin(btn, un, pwd, remember) {
        if (!SITE.BUSY) {
            Remember = remember;
            Username=un;
            Password = pwd;
            CallingButton = btn;
            CallingButton.disabled = true;
            SITE.BUSY = true;
            Service.Login(un, pwd, LoginResult);
        }
    }
    function LoginResult(o) {
        SITE.BUSY = false;
        CallingButton.disabled = false;
        if (o[0] == "OK") {
            //write username
            createCookie("un", Username, 30);
            if (Remember) {
                //write password cookie
                createCookie("pwd", Password, 30);
            }
            HideError();
            if (isdefined("SUCCESSURL"))
                location.href = SUCCESSURL;
            else
                location.href = o[1];
        }
        else
            ShowError(o[0]);
    }
}
function ForgotPasswordClass() {
    var CallingButton = null;
    this.Send = SendPassword;

    function SendPassword(btn, em) {
        if (!SITE.BUSY) {
            CallingButton = btn;
            CallingButton.disabled = true;
            SITE.BUSY = true;
            Service.SendPassword(em, SendResult);
        }
    }
    function SendResult(o) {
        SITE.BUSY = false;
        CallingButton.disabled = false;
        if (o[0] == "OK") {
            alert(o[1]);
            HideError();
        }
        else
            ShowError(o[1]);
    }
}
//Account Creation/ Update
function AccountClass() {
    var CallingButton = null;
    var Username = "";
    this.CreateAccount = DoCreateAccount;
    this.SetNotifyPreference = DoNotifyPref;
    this.ChangeLocation = UpdateLocation;
    this.ChangeLocationByName = UpdateLocationByName;
    this.UploadPhoto = DoUploadPhoto;
    this.VerifyEmail = DoVerifyEmail;

    function DoUploadPhoto(btn) {
        btn.disabled = true;
        document.forms[0].submit();
        SITE.BUSY = true;
    }

    function DoVerifyEmail() {
        SITE.BUSY = true;
        Service.VerifyEmail(EmailVerificationSent);
    }

    function EmailVerificationSent(o) {
        SITE.BUSY = false;
        alert(o);
    }
    
    function UpdateLocation() {
        SITE.BUSY = true;
        Service.SetLocation(SavedLat, SavedLng, LocationUpdateResult);
    }

    function UpdateLocationByName(basedin) {
        SITE.BUSY = true;
        Service.SetLocationByName(basedin, BasedInUpdateResult);
    }
    function DoCreateAccount(btn, un, em, pwd, pwdconfirm, fn, ln, cid, nl, bi, t,mtid) {
        if (!SITE.BUSY) {
            CallingButton = btn;
            CallingButton.disabled = true;
            SITE.BUSY = true;
            Username = un;
            Service.CreateAccount(un, em, pwd, pwdconfirm, fn, ln, cid, nl, bi, t, mtid, CreateResult);
        }
    }
    function CreateResult(o) {
        SITE.BUSY = false;
        CallingButton.disabled = false;
        if (o[0] == "OK") {
            createCookie("un", Username, 30);
            HideError();
            if (isdefined("SUCCESSURL")) {
                location.href = SUCCESSURL;
                return;
            }
            if (isdefined("SUCCESSFUNC")) {
                eval(SUCCESSFUNC);
                return;
            }
            location.href = o[1];
        }
        else
            ShowError(o[1]);
    }
    function DoNotifyPref(rdo, typeid) {
        if (!SITE.BUSY) {
            PrefID = rdo.value;
            SITE.BUSY = true;
            Service.NotificationSet(PrefID, typeid, NotificationSet);
        }
    }
    function NotificationSet(o) {
        SITE.BUSY = false;
        alert(o[0]);
    }
    function LocationUpdateResult(o) {
        SITE.BUSY = false;
        if (o[0] == "OK") {
            MapMarker.openInfoWindow(o[1]);
            if (GEID("TeacherList") != null)
                Page(0);
        }
        else
            alert(o[1]);
    }
    function BasedInUpdateResult(o) {
        SITE.BUSY = false;
        if (o[0] == "OK") {
            document.location.reload();
        }
        else
            alert(o[1]);
    }
}

//library functions
function HideLiveResults() {
    window.setTimeout("hide(GEID('SearchResults'));toggleSelects('show');", 200);
}
function HideSubjectResults() {
    window.setTimeout("hide(GEID('SubjectResults'));toggleSelects('show');", 200);
}

function ShowError(e) {
    GEID("EM").innerHTML = e;
    show(GEID("E"));
}
function HideError() {
    hide(GEID("E"));
}
function Wait(id) {
    GEID(id).innerHTML = "<div style=\"padding:4px\"><img s"+"rc=\""+"/img/bigrotation2.gif\"/></div>";
}
function GEID(id) { return document.getElementById(id); }
function RadioValue(groupname) {
    var colRadio = document.getElementsByName(groupname);
    var val = -1;
    for (var i = 0; i < colRadio.length; i++) {
        if (colRadio[i].checked) {
            val = colRadio[i].value;
            break;
        }
    }
    return val;
} 
function checkEnter(e, func) {
    var characterCode;
    if (e && e.which) { e = e; characterCode = e.which; }
    else {
        characterCode = e.keyCode;
    }
    if (characterCode == 13) {
        if (func != null) {
            eval(func);
        }
        e.cancelBubble = true;
        return false;
    }
    else {
        return true;
    }
}
function SelectedValue(id) {
    var o = GEID(id);
    return o.options[o.selectedIndex].value;
}
function hide(o) {
    if (o != null) {
        o.style.visibility = "hidden";
        o.style.display = "none";
    }
}
function show(o) {
    if (o != null) {
        o.style.visibility = "visible";
        o.style.display = "block";
    }
}
function showhide(o) {
    if (o != null) {
        if (o.style.visibility == "hidden" || o.style.visibility == null)
            show(o);
        else
            hide(o);
    }
}
function _scrollTop() {
    if (document.documentElement && document.documentElement.scrollTop)
        return document.documentElement.scrollTop;
    else
        return document.body.scrollTop;
}
function _clientWidth() {
    if (document.documentElement && document.documentElement.clientWidth)
        return document.documentElement.clientWidth;
    else
        return document.body.clientWidth;
}
function checkall(o, tagname) {
    var chk = document.getElementsByName(tagname);
    for (i = 0; i < chk.length; i++)
        chk[i].checked = o.checked;
}
function popmini(ident) {
    window.open("/minipages.aspx?ident=" + ident, "Info", "height=490,width=650,status=no,toolbar=no,resizable=no,scrollbars=yes,location=no,menubar=no");
}
function popwin(url) {
    window.open(url, "External_Link");
}
function ent(s, e) {
    if (e.keyCode == 13)
        eval(s);
    return false;
}
function createCookie(name, value, days) {
    var expires="";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toGMTString();
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}
function readCookie(Name) {
    var re = new RegExp(Name + "=[^;]+", "i"); //construct RE to search for target name/value pair
    if (document.cookie.match(re)) //if cookie found
        return document.cookie.match(re)[0].split("=")[1] //return its value
    return ""
}
function eraseCookie(name) {
    createCookie(name, "", -1);
}
function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent)
        while (1) {
        curleft += obj.offsetLeft;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent)
        while (1) {
        curtop += obj.offsetTop;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}
function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6.
{
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])
    if ((version >= 5.5 && version < 7) && (document.body.filters)) {
        for (var i = 0; i < document.images.length; i++) {
            var img = document.images[i];
            var imgName = img.src.toUpperCase();
            if (imgName.substring(imgName.length - 3, imgName.length) == "PNG") {

                var imgID = (img.id) ? "id='" + img.id + "' " : "";
                var imgClass = (img.className) ? "class='" + img.className + "' " : "";
                var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
                var imgStyle = "display:inline-block;" + img.style.cssText;
                if (img.align == "left") imgStyle = "float:left;" + imgStyle;
                if (img.align == "right") imgStyle = "float:right;" + imgStyle;
                if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
                var strNewHTML = "<span " + imgID + imgClass + imgTitle
            + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
            + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
            + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
                img.outerHTML = strNewHTML;
                i = i - 1;
            }
        }
    }
}
var _GTattempts = 0;
var pageTracker=null;
function TrackerInit() {
    if (isdefined('_gat')) {
        pageTracker = _gat._getTracker("UA-1363654-2");
        pageTracker._initData();
        pageTracker._trackPageview();
    }
    else {
        if (_GTattempts < 10) {
            window.setTimeout("TrackerInit()", 1000);
            _GTattempts++;
        }
    }
}
function isdefined(variable) {
    return (typeof (window[variable]) == "undefined") ? false : true;
}
function checkMouseEnter(element, evt) {
    if (element.contains && evt.fromElement) {
        return !element.contains(evt.fromElement);
    }
    else if (evt.relatedTarget) {
        return !containsDOM(element, evt.relatedTarget);
    }
}

function checkMouseLeave(element, evt) {
    if (element.contains && evt.toElement) {
        return !element.contains(evt.toElement);
    }
    else if (evt.relatedTarget) {
        return !containsDOM(element, evt.relatedTarget);
    }
}
function containsDOM(container, containee) {
    var isParent = false;
    do {
        if ((isParent = container == containee))
            break;
        containee = containee.parentNode;
    }
    while (containee != null);
    return isParent;
}

function removeOptionSelected(id) {
    var elSel = GEID(id);
    var i;
    for (i = elSel.length - 1; i >= 0; i--) {
        if (elSel.options[i].selected) {
            elSel.remove(i);
        }
    }
}

function appendOptionLast(id, txt, val) {
    var elOptNew = document.createElement('option');
    elOptNew.text = txt;
    elOptNew.value = val;
    var elSel = GEID(id);

    try {
        elSel.add(elOptNew, null);
    }
    catch (ex) {
        elSel.add(elOptNew);
    }
}

function toggleSelects(action) {
    var isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;
    if (!isIE6)
        return;
    var selects = document.getElementsByTagName('select');
    if (action == 'hide') {
        for (i = 0; i < selects.length; i++) {
            selects[i].style.display = 'none';
        }
    } else if (action == 'show') {
        for (i = 0; i < selects.length; i++) {
            selects[i].style.display = '';
        }
    }
}

var _creditsanchor=null;
function ShowCreditsTip(c,o)   {
    _creditsanchor=o;
    Service.CreditsPrice(c,RenderTipPrice);
}
function PopCountries(C, id) {
    var o = GEID(id);
    o.options.length = 0;
    var _main = true;
    var _j = 0;
    for (var i = 0; i < C.length; i++) {
        var _s = C[i].split('|');
        if (_main && _s[2] == "0") {
            _main = false;
            var _disopt = new Option("-----------------", "");
            _disopt.setAttribute("disabled", "disabled");
            o.options[o.length] = _disopt;

        }
        o.options[o.length] = new Option(_s[3], _s[0]);
        if (_s[1] == "1")
            _j = i;
    }
    o.selectedIndex = _j;
}
function RenderTipPrice(_html)  {
    GEID("DHTMLPOP").innerHTML=_html;
    GEID("DHTMLPOP").style.left = findPosX(_creditsanchor)+"px";
    GEID("DHTMLPOP").style.top = findPosY(_creditsanchor)+"px";
    show(GEID("DHTMLPOP"));
}
function outtip(evt, o) {
	var relTarg = evt.relatedTarget || evt.toElement;
	if (relTarg!=null && relTarg.parentNode!=null && relTarg.id!="DHTMLPOP" && relTarg.parentNode.id!="DHTMLPOP")
	    hide(GEID("DHTMLPOP"));
}
function setActiveStyleSheet(title) {
    var i, a, main;
    for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
            a.disabled = true;
            if (a.getAttribute("title") == title) a.disabled = false;
        }
    }
    createCookie("au2style", title, 365);
}
function getActiveStyleSheet() {
    var i, a;
    for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
    }
    return null;
}
function getPreferredStyleSheet() {
    var i, a;
    for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("rel").indexOf("alt") == -1 && a.getAttribute("title")) return a.getAttribute("title");
    }
    return 'default';
}
function CustomInit() {
    if (isdefined("CUSTOMFUNC"))
        eval(CUSTOMFUNC);
}
function StyleInit() {
    var cookie = readCookie("au2style");
    var title = cookie ? cookie : getPreferredStyleSheet();
    setActiveStyleSheet(title);
}

//main menu
var _inmainmenu = false;
function InitMainMenu() {
 
    if (!document.addEventListener && document.attachEvent) {
        Object.prototype.addEventListener = function(eventName, func, capture) {
            if (this.attachEvent) {
                if (func!=null)
                    this.attachEvent("on" + eventName.toString(), func);
            }
        }

        var i, l = document.all.length;

        for (i = 0; i < l; i++)
            document.all[i].addEventListener = Object.prototype.addEventListener;

        window.addEventListener = Object.prototype.addEventListener;
        document.addEventListener = Object.prototype.addEventListener;
    }

    var oDiv = document.getElementById('MainMenu');
    oDiv.addEventListener('mouseover', function(e) {
        show(GEID("MainMenuOptions"));
        _inmainmenu = true;
        GEID("MainMenuTitle").className = "Arrows ArrowsOver";
    }, true);
    oDiv.addEventListener('mouseout', function(e) {
        HideMainMenu();
    }, true);

    var oDiv2 = document.getElementById('MainMenuOptions');
    oDiv2.addEventListener('mouseover', function(e) {
        _inmainmenu = true;
    }, true);
    var oDiv2 = document.getElementById('MainMenuOptions');
    oDiv2.addEventListener('mouseout', function(e) {
        HideMainMenu();
    }, true);

    oDiv2.addEventListener('click', function(e) {
        if (!e) {
            e = window.event;
        }
        if (!e.target) { e.target = e.srcElement; }
        location.href = (e.target.getAttribute('target'));
    }, true);
}
function HideMainMenu() {
    _inmainmenu = false;
    window.setTimeout("DoHideMenu()", 2000);
}
function DoHideMenu() {
    if (!_inmainmenu) {
        hide(GEID('MainMenuOptions'));
        GEID("MainMenuTitle").className = "Arrows";
    }
}
function TwitterConnect() {
    Service.TwitterGetAuthenticationLink(GEID('hdnMembershipType').value,GoTwitter);
}
function GoTwitter(url) {
    location.href = url;
}
function RemoveTutorProfile(_tpid) {
    if (!SITE.BUSY) {
        if (confirm(AREYOUSURE)) {
            SITE.BUSY = true;
            Service.RemoveTutorProfile(_tpid, ReloadOnOK);
        }
    }
}
function ReloadOnOK(o) {
    SITE.BUSY = false;
    if (o[0] == "OK") {
        location.href = o[1];
    }
    else
        alert(o[1]);
}

if (typeof (Sys) !== 'undefined') {
    Sys.Application.add_load(correctPNG);
    Sys.Application.add_load(TrackerInit);
    Sys.Application.add_load(StyleInit);
    Sys.Application.add_load(CustomInit);
    Sys.Application.notifyScriptLoaded();
} 