/*
** Common Javascipt Functions
**
**  1) createRequestObject() - Ajax connection object
**  2) sendData() - JSON sender
**  3) handleResponse() - JSON (server response processor)
**  4) updateLoginDialog() - just what it says
**  5) addLoadEvent(func) - aggregate 'onload' processor
**  6) getQuerystring()
**  7) Set_Cookie() - just what it says
**  8) Get_Cookie() - just what it says
**  9) pLogout - Processor user Logout
** 10) pLogin - Processor user Login
** 11) BrowserDetect - just what it says  functions:  A. BrowserDetect.browser
**                                                    B. BrowserDetect.version
**                                                    C. BrowserDetect.OS
*/

var fieldFlashID;
var fieldFlashField;
var fieldFlashColor;
var fieldFlashDirection;
var fieldFlashCount;
var fieldFlashStep=1; // added because IE8 is VERY SLOW at javascript
var fieldFlashArray =new Array("#F00","#F11","#F22","#F33","#F44","#F55","#F66","#F77","#F88","#F99","#FAA","#FBB","#FCC","#FDD","#FEE","#FFF");

//Gets the browser specific XmlHttpRequest Object
function createRequestObject() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
         http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        alert('Status: Cound not create XmlHttpRequest Object.' +
              'Consider upgrading your browser.');
      }
    }
  }
}

  var http = createRequestObject();

function sendData(jMethod, jURL, jData) {
  if (http.readyState == 4 || http.readyState == 0) {
 //   alert('jMethod='+jMethod+' jURL='+jURL);
    switch (jMethod) {
      case "POST":
        jData = JSON.stringify(jData);
//      alert(jData);
        http.open(jMethod, jURL, true);
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", jData.length);
        http.setRequestHeader("Connection", "close");
    http.onreadystatechange = handleResponse;
        http.send(jData);
// alert('SENT');
        break;
      case "GET":
    http.onreadystatechange = handleResponse;
        http.open(jMethod, jURL);
        http.send(null);
    }
  }
}
/*
function postData(jURL, jData) {
  if (http.readyState == 4 || http.readyState == 0) {
// alert('arrived@postData');
    jData = JSON.stringify(jData);
    http.onreadystatechange = handleResponse;
    http.open('POST', jURL, true);
//    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-type", "application/json");
    http.setRequestHeader("Content-length", (jData).length);
 //   http.setRequestHeader("Connection", "close");
    http.send((jData));
// alert("pContent=" + encodeURI((jData)));

  }
}
*/
function handleResponse() {
// alert('something happenin in handleResponse\nreadyState:'+http.readyState+'\nstatus:'+http.status);
    if(http.readyState == 4){
        if (http.status == 200) {
            var rText = http.responseText;
            if (rText.length != 0 ){
      //          alert('['+rText+']');
                var r = JSON.parse(rText);
//   var r = rText;
// rText =  rText.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                switch (r.fname) {
                    case "modify_field":
                        restoreEditor(r);
                        break;
                    case "edit_user":
                    case "edit_location":
                        editDetails(r);
                        break;
                    case "login":
                        if (r.action=="passed") {
                            updateLoginDialog(r);
                        } else if (r.action=="failed") {
                            alert('login failed');
                        }
                        break;
                    case "register":
                            document.getElementById('registration_processing').style.visibility='hidden';
                        if (r.action=="passed") {
                            alert(r.message);
                            newRegistration(false);
                        } else if (r.action=="failed") {
                            alert(r.message);
                            if(r.focus)focusEditField(r.focus);
                        }
                        break;
                    case "contactus":
                            document.getElementById('contactus_processing').style.visibility='hidden';
                        if (r.action=="passed") {
                            alert(r.message);
                            parent.location='/';
                        } else if (r.action=="failed") {
                            alert(r.message);
                            if(r.focus)focusEditField(r.focus);
                        }
                        break;
                    case "getCountyList":
                        if (r.action=="passed") {
                            updateselect_complete(r.county_list);
                        } else if (r.action=="failed") {
                            alert(r.message);
                        }
                        break;
                    default:
                 //       alert('['+rText+']');

                }
            }
        }
    }
}


function updateLoginDialog(r) {
    var wName = r.firstname + ' ' + r.lastname;
    Set_Cookie( 'PENDING', '', 0,'/', '', '');
    if (wName.length<3) {
        wName = r.username;
    }
    if (!sub) {
        document.getElementById('userWelcome_value').innerHTML = wName;
        document.getElementById('userVisits_value').innerHTML = r.logincount;
        document.getElementById('userLastVisit_value').innerHTML = r.lastlogin;
        document.getElementById('userDateJoined_value').innerHTML = r.membersince.substring(5,10)+'-'+r.membersince.substring(0,4);
        document.getElementById('userStatus_value').innerHTML = r.team;
        document.getElementById('userDistrict_value').innerHTML = r.district;
        document.getElementById('userRegion_value').innerHTML = r.region;
        document.getElementById('userCounty_value').innerHTML = r.county;
        document.getElementById('loginTitle').innerHTML = 'MEMBER';
        document.getElementById('loggedIn').style.display = 'none';
        document.getElementById('loggedOut').style.display = 'block';
    }
    if (r.edit==="true") {
        document.getElementById('editTab').style.display = '';
 //     alert(document.getElementById('admin900').style.display.value);
        document.getElementById('admin1000').style.display = 'block';
    }

}

function lock_answer(divID) {
    var item = document.getElementById(divID);
    if ((lastAnswer)&&(lastAnswer!=item)) {
        lastAnswer.className='faq_a fullNormal';
        lastAnswer='';
    }
//    alert(item.className);
    if (item) {
        item.className=(item.className==='faq_a fullNormal')?'lock_faq_a fullNormal':'faq_a fullNormal';
    }
//    alert(item.className);
    if (item.className=='lock_faq_a fullNormal') {
        lastAnswer=item;
    }
}

function lock_message(divID) {
    var item = document.getElementById(divID);
    if ((lastMessage)&&(lastMessage!=item)) {
        lastMessage.className='mBody newsMessage';
        lastMessage='';
    }
//    alert(item.className);
    if (item) {
        item.className=(item.className==='mBody newsMessage')?'lock_mBody newsMessage':'mBody newsMessage';
    }
//    alert(item.className);
    if (item.className=='lock_mBody newsMessage') {
        lastMessage=item;
    }
}

function ScrollToElement(theElement){

    var selectedPosX = 0;
    var selectedPosY = 0;

    while(theElement != null){
        selectedPosX += theElement.offsetLeft;
        selectedPosY += theElement.offsetTop;
        theElement = theElement.offsetParent;
    }

    window.scrollTo(selectedPosX,selectedPosY);

}


function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
      window.onload = func;
    } else {
      window.onload = function() {
        if (oldonload) {
          oldonload();
        }
        func();
      }
    }
}

/* addLoadEvent(nameOfSomeFunctionToRunOnPageLoad); */
addLoadEvent(function() {
    if (document.getElementById('editList_main_window')) {
      document.getElementById('editList_main_window').scrollTop=getQuerystring('top',0);
        if(getQuerystring('rowsel',0)) {
      row_selected(getQuerystring('rowsel',0))
      }
    }
});

function newRegistration(vis) {
    if(vis) {
        if (typeof window.innerWidth != 'undefined') {
            var pageWidth = window.innerWidth;
            var pageHeight = window.innerHeight;
        } else if( document.body && ( document.body.scrollWidth || document.body.scrollHeight ) ) {
            var pageWidth = document.body.scrollWidth;
            var pageHeight = document.body.scrollHeight;
        } else if( document.body.offsetWidth ) {
            var pageWidth = document.body.offsetWidth;
            var pageHeight = document.body.offsetHeight;
        }
        if(pageHeight<=400)pageHeight=720;
     //   document.getElementById('registration_container').style.display='block';
        var dialogWidth = document.getElementById('registration_container').offsetWidth;
        var dialogHeight = document.getElementById('registration_container').offsetHeight;
        document.getElementById('registration_container').style.top=((pageHeight/2)-(dialogHeight/2))+'px';
        document.getElementById('registration_container').style.left=((pageWidth/2)-(dialogWidth/2))+'px';
        grayOut(true);
        document.getElementById('username_value').focus();
    } else {
        document.getElementById('registerUser').reset();
        document.getElementById('registration_container').style.left='-800px';
        grayOut(false);
    }
}



function getQuerystring(key, default_)
{
    if (default_==null) default_="";
    key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
    var qs = regex.exec(window.location.href);
    if(qs == null)
      return default_;
    else
      return qs[1];
}

function Set_Cookie(name, value, expires, path, domain, secure)
{
    // set time, it's in milliseconds
    var today = new Date();
    today.setTime( today.getTime() );

    /*
    if the expires variable is set, make the correct
    expires time, the current script below will set
    it for x number of days, to make it for hours,
    delete * 24, for minutes, delete * 60 * 24
    */
    if ( expires )
    {
    expires = expires * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date( today.getTime() + (expires) );

    document.cookie = name + "=" +escape( value ) +
    ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
    ( ( path ) ? ";path=" + path : "" ) +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}

function Get_Cookie(check_name) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
    //  alert('cookie[' + i + ']=' + a_all_cookies[i]);
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}

function pLogout() {
  Set_Cookie( 'USERNAME', '', 0,'/', '', '');
  Set_Cookie( 'PASSWORD', '', 0,'/', '', '');
  document.getElementById('loginTitle').innerHTML = 'LOGIN';
  document.getElementById('loggedIn').style.display = '';
  document.getElementById('loggedOut').style.display = 'none';
  document.getElementById('username_value').value = '';
  document.getElementById('password_value').value = '';
  document.getElementById('editTab').style.display = 'none';
  document.getElementById('admin1000').style.display = 'none';
  return false;
}
function pLogin(jLoad) {
  var jU;
  var jP;
  var jR;
//  alert('jLoad=' + jLoad);
  if (jLoad) {
    jU = Get_Cookie('USERNAME');
    jP = Get_Cookie('PASSWORD');
    jR = Get_Cookie('REMEMBERME');
  } else {
    jU = document.getElementById('username_login_value').value+"";
    jP = document.getElementById('password_login_value').value+"";
    jR = document.getElementById('rememberMe_login_value').value+"";
    document.getElementById('password_login_value').value="";
  }
  var jURL = 'auth/loginuser.php'
  var jData = {"username" : jU,
               "password" : jP,
               "rememberMe" : jR};
//               alert('jData=' + jData);
  sendData('POST', jURL, jData);
}
function rUser() {
    var jURL = 'auth/registerUser.php'
    // NOTE IE8 evaluates empty input/select boxes as "null" when converting to JSON
    //          the +"" (adding empty quotes) is a workaround to address the BUG.
    var jData = {"username" : document.getElementById('username_value').value+"",
                 "password" : document.getElementById('password_value').value+"",
                 "email" : document.getElementById('email_value').value+"",
                 "firstname" : document.getElementById('firstname_value').value+"",
                 "lastname" : document.getElementById('lastname_value').value+"",
                 "address1" : document.getElementById('address1_value').value+"",
                 "address2" : document.getElementById('address2_value').value+"",
                 "city" : document.getElementById('city_value').value+"",
                 "state_id" : document.getElementById('state_value').value+"",
           //      "state" : document.getElementById('state_value').selectedIndex.text,
                 "county_id" : document.getElementById('county_value').value+"",
           //      "county" : document.getElementById('county_value').selectedIndex.text,
                 "zip" : document.getElementById('zip_value').value+"",
                 "phone1" : document.getElementById('phone1_value').value+"",
                 "phone2" : document.getElementById('phone2_value').value+"",
                 "var1" : "",
                 "var2" : "",
                 "var3" : "",
                 "var4" : "",
                 "var5" : "",
                 "var6" : "",
                 "bin1" : "0",
                 "bin2" : "0",
                 "bin3" : "0",
                 "bin4" : "0",
                 "bin5" : "0",
                 "bin6" : "0",
                 "gender" : document.getElementById('gender_value').value+""};
//  alert(document.getElementById('address2_value').value.length);
    document.getElementById('registration_processing').style.visibility='visible';
    sendData('POST', jURL, jData);
}

function mSend() {
    var jURL = 'auth/messageSend.php'
    // NOTE IE8 evaluates empty input/select boxes as "null" when converting to JSON
    //          the +"" (adding empty quotes) is a workaround to address the BUG.
    // NOTE to the NOTE ... by "null" I mean the four character string ("null") ...
    //                      not the value NULL.
    var jData = {"email" : document.getElementById('email_value').value+"",
                 "firstname" : document.getElementById('firstname_value').value+"",
                 "lastname" : document.getElementById('lastname_value').value+"",
                 "state_id" : document.getElementById('state_value').value+"",
           //      "state" : document.getElementById('state_value').selectedIndex.text,
                 "county_id" : document.getElementById('county_value').value+"",
           //      "county" : document.getElementById('county_value').selectedIndex.text,
                 "zip" : document.getElementById('zip_value').value+"",
                 "phone1" : document.getElementById('phone1_value').value+"",
                 "subject" : document.getElementById('subject_value').value+"",
                 "message" : document.getElementById('message_value').value+"",
                 "gender" : document.getElementById('gender_value').value+"",
                 "meet_id" : document.getElementById('meet_value').value+"",
                 "browser" : BrowserDetect.browser,
                 "version" : BrowserDetect.version,
                 "os" : BrowserDetect.OS};
//  alert(document.getElementById('address2_value').value.length);
    document.getElementById('contactus_processing').style.visibility='visible';
    sendData('POST', jURL, jData);
}

function focusEditField(focus) {
    document.getElementById(focus+'_value').focus();
    document.getElementById(focus+'_value').style.backgroundColor = "#FFF";
    fieldFlashField = document.getElementById(focus+'_value').style;
    fieldFlashColor=15;
    fieldFlashDirection=1;
    fieldFlashCount=2;
    fieldFlashID = setInterval(fieldFlasher,10);
    // flashing text box is VERY SLOW in IE8 due to there EXCELLENT javascript implementation.
    // so we need to skip to every eighth step.
    if((BrowserDetect.version=="8"&&BrowserDetect.browser=="Explorer")) {
        fieldFlashStep=7;  // faster
        fieldFlashCount=1;    // and shorter
    }
}

function fieldFlasher() {
    (fieldFlashDirection)?fieldFlashColor-=fieldFlashStep:fieldFlashColor+=fieldFlashStep;
    fieldFlashField.backgroundColor = fieldFlashArray[fieldFlashColor];
    if(fieldFlashColor==15){
        fieldFlashCount--;
        fieldFlashDirection=!fieldFlashDirection;
        if(fieldFlashCount<=0)clearInterval(fieldFlashID);
    }
    if(fieldFlashColor==1)fieldFlashDirection=!fieldFlashDirection;
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
