﻿
var _ms_XMLHttpRequest_ActiveX = ""; // Holds type of ActiveX to instantiate
var _ajax;                           // Reference to a global XMLHTTPRequest object for some of the samples
var _logger = true;                  // write output to the Activity Log
var _status_area;                    // will point to the area to write status messages to

var BASE_URL = ".";

if (!window.Node || !window.Node.ELEMENT_NODE) {
    var Node = { ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5,
                  ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, 
    		  DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12 };
}

// From prototype.js @ www.conio.net | Returns an object reference to one or more strings
// ignore the fact that there are no arguments to this method -- javascript doesn't care how many you send (not strongly typed)
// The method checks the actual # of arguments -- returns a single object or an array
function $() {
    var elements = new Array();

    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];

        if (typeof element == 'string')
            element = document.getElementById(element);

        if (arguments.length == 1)
            return element;

        elements.push(element);
    }

    return elements;
}

// Method to get text from an XML DOM object
function getTextFromXML( oNode, deep ) {
    var s = "";
    var nodes = oNode.childNodes;

    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];

        if (node.nodeType == Node.TEXT_NODE) {
            s += node.data;
        } else if (deep == true && (node.nodeType == Node.ELEMENT_NODE || node.nodeType == Node.DOCUMENT_NODE
                                       || node.nodeType == Node.DOCUMENT_FRAGMENT_NODE)) {
            s += getTextFromXML(node, true);
        };
    }

    ;
    return s;
}

;

// If you plan on doing anything outside of North America, then you'd better encode the things you pass back and forth
// the escape() method in Javascript is deprecated -- should use encodeURIComponent if available
function encode( uri ) {
    if (encodeURIComponent) {
        return encodeURIComponent(uri);
    }

    if (escape) {
        return escape(uri);
    }
}

function decode( uri ) {
    uri = uri.replace(/\+/g, ' ');

    if (decodeURIComponent) {
        return decodeURIComponent(uri);
    }

    if (unescape) {
        return unescape(uri);
    }

    return uri;
}

// log information to the status area textfield
function logger( text, clear ) {
    if (_logger) {
        if (!_status_area) {
            _status_area = $("status_area");
        }

        if (_status_area) {
            if (clear) {
                _status_area.value = "";
            }

            var old = _status_area.value;
            _status_area.value = text + ((old) ? "\r\n" : "") + old;
        }
    }
}


/*
 * AJAXRequest: An encapsulated AJAX request. To run, call
 * new AJAXRequest( method, url, async, process, data )
 *
 */

function executeReturn( AJAX ) {
    if (AJAX.readyState == 4) {
        if (AJAX.status == 200) {
            logger('AJAXRequest is complete: ' + AJAX.readyState + "/" + AJAX.status + "/" + AJAX.statusText);
	    if ( AJAX.responseText ) {
		    logger(AJAX.responseText);
		    logger("-----------------------------------------------------------");
		    eval(AJAX.responseText);
	    }
	}
    }
}

function AJAXRequest( method, url, data, process, async, dosend) {
    // self = this; creates a pointer to the current function
    // the pointer will be used to create a "closure". A closure
    // allows a subordinate function to contain an object reference to the
    // calling function. We can't just use "this" because in our anonymous
    // function later, "this" will refer to the object that calls the function 
    // during runtime, not the AJAXRequest function that is declaring the function
    // clear as mud, right?
    // Java this ain't
    
    var self = this;

    // check the dom to see if this is IE or not
    if (window.XMLHttpRequest) {
	// Not IE
        self.AJAX = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
	// Hello IE!
        // Instantiate the latest MS ActiveX Objects
        if (_ms_XMLHttpRequest_ActiveX) {
            self.AJAX = new ActiveXObject(_ms_XMLHttpRequest_ActiveX);
        } else {
	    // loops through the various versions of XMLHTTP to ensure we're using the latest
	    var versions = ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
                        "Microsoft.XMLHTTP"];

            for (var i = 0; i < versions.length ; i++) {
                try {
		    // try to create the object
		    // if it doesn't work, we'll try again
		    // if it does work, we'll save a reference to the proper one to speed up future instantiations
                    self.AJAX = new ActiveXObject(versions[i]);

                    if (self.AJAX) {
                        _ms_XMLHttpRequest_ActiveX = versions[i];
                        break;
                    }
                }
                catch (objException) {
                // trap; try next one
                } ;
            }

            ;
        }
    }
    
    // if no callback process is specified, then assing a default which executes the code returned by the server
    if (typeof process == 'undefined' || process == null) {
        process = executeReturn;
    }

    self.process = process;

    // create an anonymous function to log state changes
    self.AJAX.onreadystatechange = function( ) {
        //logger("AJAXRequest Handler: State =  " + self.AJAX.readyState);
        self.process(self.AJAX);
    }

    // if no method specified, then default to POST
    if (!method) {
        method = "POST";
    }

    method = method.toUpperCase();

    if (typeof async == 'undefined' || async == null) {
        async = true;
    }

    logger("----------------------------------------------------------------------");
    logger("AJAX Request: " + ((async) ? "Async" : "Sync") + " " + method + ": URL: " + url + ", Data: " + data);

    self.AJAX.open(method, url, async);

    if (method == "POST") {
        self.AJAX.setRequestHeader("Connection", "close");
        self.AJAX.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        self.AJAX.setRequestHeader("Method", "POST " + url + "HTTP/1.1");
    }

    // if dosend is true or undefined, send the request
    // only fails is dosend is false
    // you'd do this to set special request headers
    if ( dosend || typeof dosend == 'undefined' ) {
	    if ( !data ) data=""; 
	    self.AJAX.send(data);
    }   
    return self.AJAX;
}





// fieldname, warningname, remainingname, maxchars
function CheckFieldLength(taName,spWarning, wn,rn,mc) {
  var ta = $(taName);
  var len = ta.value.length + 1;
  if((len+100) >= mc){
    $(spWarning).className='DateWarning';//Warning
  }else{$(spWarning).className='Removed';
  }
  if (len > mc) {
    ta.value = ta.value.substring(0,mc-1);
    len = mc;
  }
  $(wn).innerHTML = len;
  $(rn).innerHTML = mc - len;
}
/*
---------------USE-------------------
<textarea name="taMessage" id="taMessage" cols="40" rows="5"
onkeyup="CheckFieldLength(taMessage, 'charcount', 'remaining', 20);"
 onkeydown="CheckFieldLength(taMessage, 'charcount', 'remaining', 20);"
  onmouseout="CheckFieldLength(taMessage, 'charcount', 'remaining', 20);">
  </textarea><br>
<small><span id="charcount">0</span> characters entered.   |   <span id="remaining">20</span> characters remaining.</small><br>

*/



var iDontDoTwice=0;
// handle some key press events
function handleKeyUp( e ) {
    e = (!e) ? window.event : e;
    target = (!e.target) ? e.srcElement : e.target;
    if (e.type == "keyup" || e.type == "keypress"  || e.type == "keydown" ) {
       if (e.keyCode == 13) {
            iDontDoTwice = iDontDoTwice + 1;
            CheckTopTeamExists();
            return false;
       //alert(e.type + ' ' + iDontDoTwice);
        }
    }
    if (e.type == "keyup"){// || e.type == "keypress"  || e.type == "keydown" ) {
        // skip shift, alt, control keys
        if (e.keyCode == 16 || e.keyCode == 17 || e.keyCode == 18) {
        // do nothing
        }
        else {
            if (target.name == "state1" && !$('state1').value) {
                clearCustomersByState();
            } else if (target.name == "state2" && !$('state2').value) {
                clearCustomersByStateXML();
            } else if (target.id == "txtOpponentName") {
                 if (target.value=='') {
                    $('divOpponentList').innerHTML = '';//Loading...<br /><img src="images/progress.gif" />';
                } else {
                    getTeamList(target.value);
                }
             } else if (target.id == "txtFindSchoolName") {
                 if (target.value) {
                    getSchoolListByName(target.value);
                } else {
                    $('divSchoolList').innerHTML = '';//Loading...<br /><img src="images/progress.gif" />';
                }
             } else if (target.id == "txtFindByOrganizationName") {
                 if (target.value) {
                    getOrganizationListByName(target.value);
                } else {
                    $('divSchoolList').innerHTML = '';//Loading...<br /><img src="images/progress.gif" />';
                }
             } else if (target.id == "txtOrgRosterFirst" || target.id == "txtOrgRosterLast") {
                 if ($('txtOrgRosterLast').value) {
                    getSchoolOrganizationRosterSearch();
                } else {
                    $('divOrgSchoolSearchRoster').innerHTML = '';//Loading...<br /><img src="images/progress.gif" />';
                }
             } else if (target.id == "txtSchRosterFirst" || target.id == "txtSchRosterLast") {
                 if ($('txtSchRosterLast').value) {
                    getSchoolRosterSearch();
                } else {
                    $('divSchoolSearchRoster').innerHTML = '';//Loading...<br /><img src="images/progress.gif" />';
                }
             } else if (target.id == "txtFullSchRosterFirst" || target.id == "txtFullSchRosterLast") {
                 if ($('txtFullSchRosterLast').value) {
                    getFullRosterSearch();
                } else {
                    $('divFullSchoolSearchRoster').innerHTML = '';//Loading...<br /><img src="images/progress.gif" />';
                }
             } else if (target.id == "txtFindAvailableOfficialFN" || target.id == "txtFindAvailableOfficialLN") {
                 if ($('txtFindAvailableOfficialLN').value) {
                    getGameOfficialListSearch();
                } else {
                    $('divAvailableOfficialsForGame').innerHTML = '';//Loading...<br /><img src="images/progress.gif" />';
                }
                
            }
        }
    }
}

 var eLastUpdated;
 var eLastUpdatedTR=0; 
 function UFI_CallBack(response)
 {
    if(eLastUpdatedTR > 0){
        $('trEvent'+eLastUpdatedTR).className='ChangeError';
        eLastUpdatedTR=0;
        alert('This Game has been deleted.  The game disappear with the next refresh of the schedule.');

    }
    else{
     switch(response.value)
     {
     case 'Success':
       eLastUpdated.className='ChangeSuccess';
     break;
     case 'Error':
       eLastUpdated.className='ChangeError';
     break;
     case 'Ready':
       eLastUpdated.className='';
     break;
     case 'Delete':
        alert('This Game has been deleted.  Click on Get schedule to have the game disappear');
       eLastUpdated.parent.parent.className='ChangeError';
     break;
     }
     var s=eLastUpdated.value;
     if(s.length > 10){s=s.substring(0,10)+'...';}
     var sText=eLastUpdated.FDesc+' attempt to be changed to '+s+' resulted in '+response.value;
     //$('divLastUpdate').innerHTML=sText;
     window.status=sText;
    }
 }

function DeleteID(EventOrgID, GameID){
	eLastUpdatedTR=EventOrgID;
    if(confirm('This will completely delete this event?  It cannot be undone.')){
	clsAjaxUpdates.DeleteGame(EventOrgID, GameID, UFI_CallBack)
	}//getEventObject(event);
}
function CreateIDFrom2Key(ev){
    eLastUpdated = getEventObject(ev);
    e=eLastUpdated;
    //alert(e.type);
    var s = e.value;
    switch(e.type){
    case 'text':
        break;
    case 'select-one':
    case 'select':
       s = eLastUpdated.options[e.selectedIndex].value;
        break;
    case 'checkbox':
       s = 0;
       if(eLastUpdated.checked){s=1;}
        break;
   }
  //if(e.fname.substring(0,3)=='dec'||e.fname.substring(0,3)=='int'||e.fname.substring(0,1)=='n'||e.fname.substring(0,2)=='fk'||e.fname.substring(0,2)=='pk'){s = " "+s+" ";}else{s = " '"+s+"'";}
	clsAjax.UFINoValueCertain($("UID"), $("ULID"), eLastUpdated.tb, eLastUpdated.fname1, eLastUpdated.pkID1, eLastUpdated.fname2, eLastUpdated.pkID2, s,eLastUpdated.field, UFI_CallBack);
	
}
function getEventObject(ev){
  //IE
  if(window.event) {
    return ev.srcElement;
  }
  //MOZ
  else {
    return ev.target;
  }
}
function SetClass(ID, Class){
    $(ID).className=Class;
}
var LastExpandedBox=null;
function ExpandEditBox(event){
	if(!bInit){return};
	var e=getEventObject2(event);
	var o=getEventSourceElement(e);
    var bShowWindow=false;
	//cacheReferences();

	var bDoAction;
	var bAltKey=e.altKey;
	var bShiftKey=e.shiftKey;
	var bControlKey=e.ctrlKey;
	var nKeyCode=e.keyCode;
	bShiftHeldDown=false;
	var bDiscontiguousKey=(bIsMacIE?bAltKey:bControlKey);

	if(!bIsEnabled){return};
	if(!(bControlKey&&bShiftKey)){return};
	switch(nKeyCode){
		//we need to allow for quick changes between tabs
		case 19:
			var sTagName=o.tagName.toUpperCase();
			switch (sTagName){
				case 'TEXTAREA':
					//always allow the backspace in TEXTAREAs
					bShowWindow=true;
					break;
				case 'INPUT':
					var sType=o.type.toUpperCase();
					if((sType=='TEXT' || sType=='PASSWORD') && !o.readOnly){;
						//allow the backspace in editable TEXT and PASSWORD fields
					    bShowWindow=true;
					} else {
						e.returnValue=false;
					}
					break;
				default:
					break;
			}
			break;		
    }

    if(bShowWindow){
        eLastUpdated = getEventObject(event);//window.event.srcElement;
        var s = eLastUpdated.value;

	        var Rows=30;//10
	        var Columns=72;//100
	        var MaxLength=eLastUpdated.getAttribute("maxLength");
            LastExpandedBox=eLastUpdated;


        switch(eLastUpdated.type){
        case 'textarea':
        case 'input':
        case 'text':
            clsAjax.CreateExpandEditTextArea(eLastUpdated.getAttribute("fname"), eLastUpdated.getAttribute("pkID"), MaxLength, s, Columns, Rows, eLastUpdated.getAttribute("tb"), ExpandEditBox_CB);
            break;
        case 'select-one':
        case 'select':
           //s = eLastUpdated.options[eLastUpdated.selectedIndex].value;
            break;
        case 'checkbox':
           s = 0;
           //if(eLastUpdated.checked){s=1;}
            break;
       }
       //if(eLastUpdated.getAttribute("ov")!=s){
      //if(e.fname.substring(0,3)=='dec'||e.fname.substring(0,3)=='int'||e.fname.substring(0,1)=='n'||e.fname.substring(0,2)=='fk'||e.fname.substring(0,2)=='pk'){s = " "+s+" ";}else{s = " '"+s+"'";}
	        //clsAjax.UFI($("UID").value, $("ULID").value, , , s,, UFI_CallBack);
	    //}
    }
}
function ExpandEditBox_CB(response){
    CreateDropdownWindow('Expanded Edit Area', 550, true, response.value, 'divExpandedPopup');
    //$('txtAreaExpanded').focus();
    ShowNiceEditArea();
    //$('myPopupEditArea1').focus();
}
function CreateExpandByIcon(InputName){
        eLastUpdated = $(InputName);//window.event.srcElement;
        var s = eLastUpdated.value;

	        var Rows=30;//10
	        var Columns=72;//100
	        var MaxLength=eLastUpdated.getAttribute("maxLength");
            LastExpandedBox=eLastUpdated;

            clsAjax.CreateExpandEditTextArea(eLastUpdated.getAttribute("fname"), eLastUpdated.getAttribute("pkID"), MaxLength, s, Columns, Rows, eLastUpdated.getAttribute("tb"), ExpandEditBox_CB);
}
function SetID(ev){
    eLastUpdated = getEventObject(ev);//window.event.srcElement;
    var s = eLastUpdated.value;
    var bEdit=true;
    switch(eLastUpdated.type){
    case 'text':
        break;
    case 'hidden':
        break;
    case 'select-one':
    case 'select':
       s = eLastUpdated.options[eLastUpdated.selectedIndex].value;
       bEdit=false;
        break;
    case 'checkbox':
       s = 0;
       bEdit=false;
       if(eLastUpdated.checked){s=1;}
        break;
   }

          var q = eLastUpdated.getAttribute("ov")
          if(bEdit){
                try {
                  s=s.replace(/</g, '~`~');
                  s=s.replace(/>/g, '``~');
                  s=s.replace(/"/g, '-`~');
                  
                  q=q.replace(/</g, '~`~');
                  q=q.replace(/>/g, '``~');
                  q=q.replace(/"/g, '-`~');
                }
                catch (objException) {
                // trap; try next one
                } ;
          }

   if(q!=s){
  //if(e.fname.substring(0,3)=='dec'||e.fname.substring(0,3)=='int'||e.fname.substring(0,1)=='n'||e.fname.substring(0,2)=='fk'||e.fname.substring(0,2)=='pk'){s = " "+s+" ";}else{s = " '"+s+"'";}
	    eLastUpdated.getAttribute("ov").value=s;
	    clsAjax.UFI($("UID").value, $("ULID").value, eLastUpdated.getAttribute("tb"), eLastUpdated.getAttribute("fname"), s,eLastUpdated.getAttribute("pkID"), UFI_CallBack);
	}
}
function ShowUpdates(ev){
    eLastUpdated = getEventObject(ev);//window.event.srcElement;
    var s = eLastUpdated.value;
    switch(eLastUpdated.type){
    case 'text':
        break;
    case 'select-one':
    case 'select':
       s = eLastUpdated.options[eLastUpdated.selectedIndex].value;
        break;
    case 'checkbox':
       s = 0;
       if(eLastUpdated.checked){s=1;}
        break;
   }
	clsAjax.ShowFieldInfo($("UID").value, $("ULID").value, eLastUpdated.getAttribute("tb"), eLastUpdated.getAttribute("fname"), s,eLastUpdated.getAttribute("pkID"), ShowUpdates_CB);
	
}
function ShowUpdates_CB(response){
    CreateDropdownWindow('Change History Window', 600, true, response.value, 'divChangeHistoryWindow');
    //divUpdates.innerHTML=response.value;
}
function GetUserAccess(){
    $('divUserAccess').innerHTML = 'Loading...<br /><img src="images/progress.gif" />';
    clsAjaxUpdates.GetUserSecurityStatus(1,0,UserAccess_CB);
}


function copyToClipboard(pre){
  if(document.getElementById||(document.all && !(document.getElementById))){
  textarea1.value = pre.innerText;
  var Copied = textarea1.createTextRange();
  Copied.execCommand("Copy");
  alert("Copied to clipboard.");
  

  }
}

//DateChecker
var monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
function getCompareDateFromText(GivenValidDate){
    //this must be a date in the format mm/dd/yyyy
var NewDate=GivenValidDate;
	var month = (NewDate.substring(0,2));
	NewDate=NewDate.substring(3);
	var day = (NewDate.substring(0,2));
	NewDate=NewDate.substring(3);
	var year = (NewDate.substring(0,4));
//alert('@@'+GivenValidDate+'##'+month+'/'+day+'/'+year);
	var dateToCheck = new Date();
	dateToCheck.setYear(year);
	dateToCheck.setMonth(month-1);
	dateToCheck.setDate(day);
	var checkDate = dateToCheck.getTime();

    return checkDate
}
function getCompareDateFromDDLs(name){
	var ddlDay = $(name+"_day");
	var ddlMonth = $(name+"_month");
	var ddlYear = $(name+"_year");


	var day = parseInt(ddlDay.options[ddlDay.selectedIndex].value);
	var month = parseInt(ddlMonth.options[ddlMonth.selectedIndex].value);
	var year = parseInt(ddlYear.options[ddlYear.selectedIndex].value);
//alert('$$'+month+'/'+day+'/'+year);
	var dateToCheck = new Date();
	dateToCheck.setYear(year);
	dateToCheck.setMonth(month-1);
	dateToCheck.setDate(day);
	var checkDate = dateToCheck.getTime();

    return checkDate
}
function getDateStringFromDDLs(name){
	var ddlDay = $(name+"_day");
	var ddlMonth = $(name+"_month");
	var ddlYear = $(name+"_year");

	var day = parseInt(ddlDay.options[ddlDay.selectedIndex].value);
	var month = parseInt(ddlMonth.options[ddlMonth.selectedIndex].value);
	var year = parseInt(ddlYear.options[ddlYear.selectedIndex].value);
	
	return month +'/'+ day +'/'+ year
	
	var dateToCheck = new Date();
	dateToCheck.setYear(year);
	dateToCheck.setMonth(month-1);
	dateToCheck.setDate(day);
	var checkDate = dateToCheck.getTime();

    return dateToCheck.toUTCString();
    return checkDate
}
function checkPastDate(name)
{
	var ddlDay = $(name+"_day");
	var ddlMonth = $(name+"_month");
	var ddlYear = $(name+"_year");
	var day = parseInt(ddlDay.options[ddlDay.selectedIndex].value);
	var month = parseInt(ddlMonth.options[ddlMonth.selectedIndex].value);
	var year = parseInt(ddlYear.options[ddlYear.selectedIndex].value);

	if (!day || !month || !year)
		return false;

	if (year/4 == parseInt(year/4))
		monthLength[1] = 29;

	if (day > monthLength[month-1])
		return false;

	monthLength[1] = 28;

	var now = new Date();
	now = now.getTime(); //NN3

	var dateToCheck = new Date();
	dateToCheck.setYear(year);
	dateToCheck.setMonth(month-1);
	dateToCheck.setDate(day);
	var checkDate = dateToCheck.getTime();

	var futureDate = (now < checkDate);
	var pastDate = (now > checkDate);

	return pastDate;//;
}


function ShowQuick(){
clsAjax.Quick(ShowQuick_CB);
}
function ShowQuick_CB(response){
alert(response.value);
}



//************* This Auot Complete will have to be modified to work wtih what we need ******************//
  //<input type="text" name="anyName" onKeyUp="Complete(this, event)">
var aMail = new Array("albert@mail.com","steve@mail.com","beth@mail.com","harry@mail.com","barry@mail.com", "allen@mail.com", "susan@mail.com", "hal@mail.com");
aMail.sort();

function Complete(obj, evt) {
	 if ((!obj) || (!evt) || (aMail.length == 0)) {
 	 	return;
  }

  if (obj.value.length == 0) {
  		return;
  }

  var elm = (obj.setSelectionRange) ? evt.which : evt.keyCode;

  if ((elm < 32) || (elm >= 33 && elm <= 46) || (elm >= 112 && elm <= 123)) {
  		return;
  }

  var txt = obj.value.replace(/;/gi, ",");
  elm = txt.split(",");
  txt = elm.pop();
  txt = txt.replace(/^\s*/, "");

  if (txt.length == 0) {
  		return;
  }

  if (obj.createTextRange) {
   	var rng = document.selection.createRange();
  		if (rng.parentElement() == obj) {
   			elm = rng.text;
  	 		var ini = obj.value.lastIndexOf(elm);
  		}
  } else if (obj.setSelectionRange) {
  		var ini = obj.selectionStart;
  }

  for (var i = 0; i < aMail.length; i++) {
   	elm = aMail[i].toString();
  		if (elm.toLowerCase().indexOf(txt.toLowerCase()) == 0) {
   			obj.value += elm.substring(txt.length, elm.length);
  	 		break;
  		}
  }

  if (obj.createTextRange) {
  		rng = obj.createTextRange();
  		rng.moveStart("character", ini);
  		rng.moveEnd("character", obj.value.length);
  		rng.select();
  } else if (obj.setSelectionRange) {
  		obj.setSelectionRange(ini, obj.value.length);
  }
}
