﻿/* See http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/ for credits */
/* parameters:
    oElm = root element to start search from (or document)
    strTagName = tag to search for, or "*" if all tags
    oClassNames = array of class names, or a single string class name. If array is used, returns element 
    only if it matches ALL specified classes. 
   Returns: array of elements
    */
function getElementsByClassName(oElm, strTagName, oClassNames){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var arrRegExpClassNames = new Array();
    if(typeof oClassNames == "object"){
        for(var i=0; i<oClassNames.length; i++){
            arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
        }
    }
    else{
        arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
    }
    var oElement;
    var bMatchesAll;
    for(var j=0; j<arrElements.length; j++){
        oElement = arrElements[j];
        bMatchesAll = true;
        for(var k=0; k<arrRegExpClassNames.length; k++){
            if(!arrRegExpClassNames[k].test(oElement.className)){
                bMatchesAll = false;
                break;                      
            }
        }
        if(bMatchesAll){
            arrReturnElements.push(oElement);
        }
    }
    return (arrReturnElements)
}

var _Yedda_registerBodyOnLoad_list = new Array();
var _Yedda_registerBodyOnLoad_oldOnLoad;
var _Yedda_registerBodyOnLoad_implementOnLoad_called = false;

function _Yedda_registerBodyOnLoad_implementOnLoad() {
    if (_Yedda_registerBodyOnLoad_implementOnLoad_called)
        return;
    _Yedda_registerBodyOnLoad_implementOnLoad_called = true;
    if (!_Yedda_registerBodyOnLoad_list)
        return;
    for (var i = 0; i < _Yedda_registerBodyOnLoad_list.length; i++) {
        eval(_Yedda_registerBodyOnLoad_list[i]);
    }
    if (_Yedda_registerBodyOnLoad_oldOnLoad)
        _Yedda_registerBodyOnLoad_oldOnLoad();
}

function Yedda_registerBodyOnLoad(methodCall) {
    
    if (!_Yedda_registerBodyOnLoad_oldOnLoad) {
        if (document.body.onload != _Yedda_registerBodyOnLoad_implementOnLoad) {
            _Yedda_registerBodyOnLoad_oldOnLoad = window.onload;
            window.onload = _Yedda_registerBodyOnLoad_implementOnLoad;
        }
    }
    _Yedda_registerBodyOnLoad_list.push(methodCall);   
}

function Yedda_Internal_HandleWebServiceTimeout(result) {
    window.alert("Oops. No response from Yedda. Why don't you try again?");
}

function Yedda_Internal_HandleWebServiceError(result) {
    window.alert("Oops. Something went wrong. Why don't you try again?");
}

/*******************
Call this as the first line of a _OnComplete handler for a web service call.
Will return true if the call was succesful. 
Otherwise, will automatically handle not-signed-in or no-permission, and return false.
*******************/
function Yedda_Internal_HandleWebServiceComplete(result) {
    if (typeof(result) == "undefined") {
        Yedda_Internal_HandleWebServiceError(null);
        return false;
    }
    if (!result) {
        Yedda_Internal_HandleWebServiceError(null);
        return false;
    }   
    if (typeof(result.serviceReturnCode) == "undefined")
        Yedda_Internal_HandleWebServiceError(null);
    switch (result.serviceReturnCode) {
        case 0: {   // success
            return true;
        }
        case 1: { // NotSignedIn
            if (typeof(Yedda_Internal_ClientSignHelper_TransferIfNotSignedIn) != "function")
                Yedda_Internal_HandleWebServiceError(result);
            Yedda_Internal_ClientSignHelper_TransferIfNotSignedIn();
            break;
        }
        case 2: { // NoPermissions
            Yedda_Internal_NoPermission();
            break;
        }
    }
    return false;
}

function Yedda_Internal_NoPermission() {
    // todo
}

var _Yedda_Internal_RegisterForPostbackProgressTrigger_list = new Array();

/***************************
Register a method to be called before calling the server, to turn on progress indicators.
Provide a string with the name of the method. 
The method must have the following signature:
function methodName(eventTargetServerId) returns array of strings
eventTargetServerId is the server id of the control that initiated the postback
Returns the list of triggers to use for turning on the progress indicators (using ProgressControl_setVisible)
*/
function Yedda_Internal_RegisterForPostbackProgressTrigger(methodName) {
    if (typeof(debug) != 'undefined') {
        if (typeof(debug.assert) != 'undefined') {
            debug.assert(_Yedda_Internal_RegisterForPostbackProgressTrigger_list != null);
        }
    }
    
    if (_Yedda_Internal_RegisterForPostbackProgressTrigger_list != null) {
        _Yedda_Internal_RegisterForPostbackProgressTrigger_list.push(methodName);
    }
}

function _Yedda_Internal_HandleBeforePostback(eventTargetServerId) {
    for (i = 0; i < _Yedda_Internal_RegisterForPostbackProgressTrigger_list.length; i++) {
        var triggers = eval(_Yedda_Internal_RegisterForPostbackProgressTrigger_list[i] + "('" + eventTargetServerId + "')");
        if (triggers) {
            if (triggers.length > 0)
                if (typeof(ProgressControl_setVisible) != "undefined") {
                    ProgressControl_setVisible(triggers, true);
                }
        }
    }
}

function _Yedda_Internal_HandleAfterPostback() {
    // Turn off all progress indicators:
    // hack #2: Setting the style.visibility does not work in the 
    // isPostBack = false event, so we'll postpone it a bit using setTimeout. 
    if (typeof(ProgressControl_setVisible) != "undefined") {
        if (ProgressControl_setVisible) {
            window.setTimeout("ProgressControl_setVisible('', false)", 1);
         }
     }
}

function _Yedda_Internal_HandleAtlasPageRequestManagerPropertyChanged(obj, e) {
    if (!e)
        return;
    if (e.get_propertyName() == "inPostBack") {
        if (obj.get_inPostBack()) {
            debug.assert(obj);
            debug.assert(obj.get_form());
            var form = $get(obj.get_form());
            debug.assert(form);
//             debug.assert(form.__EVENTTARGET);
            var eventTargetServerId = form.__EVENTTARGET.value;
            _Yedda_Internal_HandleBeforePostback(eventTargetServerId);
        } else {
            // the __EVENTTARGET is not reliable in the isPostBack = false stage, we'll have to do without it... 
            _Yedda_Internal_HandleAfterPostback();
            if (typeof(_Yadda_Internal_UnsignedHome_AfterPostback) != "undefined") 
                _Yadda_Internal_UnsignedHome_AfterPostback();
        }
    }
}

function Yedda_Internal_HandleAtlasApplicationLoad(obj, e) {
    if (Sys.WebForms.PageRequestManager)
        Sys.WebForms.PageRequestManager.propertyChanged.add(_Yedda_Internal_HandleAtlasPageRequestManagerPropertyChanged);
}

function writeNoSpamEmail(text, p1, p2) {
    if (text == "")
        text = p1 + "@" + p2;
    document.write("<a href='" + "mail" + "to:" + p1 + "@" + p2 + "'>" + text + "</a>");
}

function Yedda_RegisterDynamicScriptBlock(source) {
	var script = document.createElement('script'); 
	script.type = 'text/javascript'; 
	script.src = source; 
	document.getElementsByTagName('head')[0].appendChild(script);
}

function Yedda_getCookieValue(c_name, k_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            c_c = document.cookie.substring(c_start, c_end);

            if (k_name && k_name != '' && c_c.indexOf("&") > -1) {
                p = c_c.split('&');
                for (var i = 0; i < p.length; i++) {
                    ip = p[i].split('=');
                    if (ip.length > 1) {
                        if (ip[0] == k_name) {
                            return ip[1];
                        }
                    }
                }
            } else {
                return c_c;
            }
        }
    }
    return null;
}

function Yedda_getScrollXY() {
    var x = 0, y = 0;
    if (typeof (window.pageYOffset) == 'number') {
        //Netscape compliant
        y = window.pageYOffset;
        x = window.pageXOffset;
    } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
        //DOM compliant
        y = document.body.scrollTop;
        x = document.body.scrollLeft;
    } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
        //IE6 standards compliant mode
        y = document.documentElement.scrollTop;
        x = document.documentElement.scrollLeft;
    }
    return [x, y];
}
