// *********************************************************************************************** //
// Bitefish Library
// © Copyright David Tracz, Bitefish 
// All Rights Reserved, www.bitefish.com 
// *********************************************************************************************** //

var bt_call_count = 0;
var bt_IE = (navigator.userAgent.indexOf('MSIE') >= 0) ? 1 : 0; 
var bt_IE5 = (navigator.appVersion.indexOf("MSIE 5.5")!=-1) ? 1 : 0; 

var bt_timer = null;
var bt_dialog_current = null;
var bt_timer_function_call = null;



function bt_check()
{
	alert("Bitefish Library Available!");
}




function bt_window_open(pUrl,pName)
{
	window.open(pUrl,pName,"",true);
}

function bt_dialog_open(pUrl,pName,pWidth,pHeight)
{
	pSize = "";
	if (pWidth > 0 && pHeight > 0)
	{
		if (bt_IE)
		{
			pWidth += 24;
			pHeight += 20;
		}
		pSize = "width=" + pWidth + ",height=" + pHeight + ",";
	}
	bt_dialog_current = window.open(pUrl,pName,pSize + "resizable=yes,scrollbars=yes,status=no,location=no,toolbar=no,menubar=no",true);
	
	pScreenX = ((screen.width - (pWidth * 1)) / 2);
	pScreenY = ((screen.height - (pHeight * 1)) / 2);
	
	dialog.moveTo(pScreenX,pScreenY);
	dialog.focus();
}




function bt_capture_event(e,pEvent)
{
	var rv = false;
	//onkeypress="CaptureEvent(event,'OnEnter');" 

  var code = "";
  if (e && e.which)
  {
    code = e.which;    
  }
  else if (window.event)
  {
    e = window.event;
    code = e.keyCode;
  }
  
	// OnEnter //
  if (pEvent == "OnEnter" && code == 13)
  	rv = true;
	
	return rv;
}



function bt_goto(pUrl)
{
	window.location.href = pUrl;	
}

function bt_goto_spot(pSpot)
{
	// anchor //
	window.location.hash = pSpot;	
}

function bt_reload(pUrl)
{
	if (pUrl == "")
		pUrl = window.location.href;	
	
	bt_goto(pUrl);
}

function bt_mail(pA,pB,pQuery)
{
	var pC = "@";
	document.location = "mailto:" + pA + pC + pB + pQuery;	
}


function bt_mail_check(pEMail) 
{
	var rv = true;
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(pEMail)) 
		rv = false;	
	return rv;
}

function bt_concat_name(pId,pField1,pField2,pField3)
{
	var rv = "";
	var pField1Value = bt_get(pField1,"value","");
	var pField2Value = bt_get(pField2,"value","");
	var pField3Value = bt_get(pField3,"value","");
	
	rv += pField1Value;
	
	if (pField2Value != "")
	{
		if (rv != "")
			rv += " ";
		rv += pField2Value;	
	}

	if (pField3Value != "")
	{
		if (rv != "")
			rv += " ";
		rv += pField3Value;	
	}
	
	bt_set(pId,"value",rv);
}


function bt_get(pId,pCode,pDefault)
{	
	var rv = pDefault;
	
  try
  { 
		switch (pCode)
		{
			case "value": rv = document.getElementById(pId).value; break;
			case "number": rv = (document.getElementById(pId).value * 1); break;
			case "img": rv = document.getElementById(pId).src; break;
			case "bgcolor": rv = document.getElementById(pId).style.backgroundColor; break;
			case "bgimage": rv = document.getElementById(pId).style.backgroundImage; break;
			case "html": rv = document.getElementById(pId).innerHTML; break;
			case "css": rv = document.getElementById(pId).className; break;
			case "display": rv = document.getElementById(pId).style.display; break;
			case "src": rv = document.getElementById(pId).src; break;
			case "scroll": rv = document.getElementById(pId).scrollTop; break;
			
			case "framehtml": 
				if (bt_IE)
					rv = document.getElementById(pId).innerHTML; 
				else
					rv = document.getElementById(pId).body.innerHTML; 
				break;

			case "oneifempty": 
				rv = 0;
				if (document.getElementById(pId).value == "")
					rv = 1;
				break;

			case "oneifnotempty": 
				rv = 0;
				if (document.getElementById(pId).value != "")
					rv = 1;
				break;

			case "oneifzero": 
				rv = 0;
				if ((document.getElementById(pId).value * 1) == 0)
					rv = 1;
				break;

			case "oneifnotzero": 
				rv = 0;
				if ((document.getElementById(pId).value * 1) != 0)
					rv = 1;
				break;

		}
  } 
  catch(e)
  { 
  }   
	
	return rv;
}


function bt_set(pId,pCode,pValue)
{	
  try
  { 
		switch (pCode)
		{
			case "value": document.getElementById(pId).value = pValue; break;
			case "img": document.getElementById(pId).src = pValue; break;
			case "bgcolor": document.getElementById(pId).style.backgroundColor = pValue; break;
			case "bgimage": document.getElementById(pId).style.backgroundImage = "url(" + pValue + ")"; break;
			case "html": document.getElementById(pId).innerHTML = pValue; break;
			case "css": document.getElementById(pId).className = pValue; break;
			case "display": document.getElementById(pId).style.display = pValue; break;
			case "src": document.getElementById(pId).src = pValue; break;
			case "scroll": document.getElementById(pId).scrollTop = pValue; break;
			
			case "focus": document.getElementById(pId).focus(); break;

			case "framehtml": 
				if (bt_IE)
					document.getElementById(pId).innerHTML = pValue; 
				else
					document.getElementById(pId).body.innerHTML = pValue; 
				break;	
				
			case "execute":
				switch (pValue)
				{
					case "bold":
					case "italic":
					case "underline":
					case "superscript":
					case "justifyleft":
					case "justifycenter":
					case "justifyright":
					case "insertunorderedlist":
						if (bt_IE)
							document.getElementById(pId).execCommand(pValue,false,"null");
						else
							document.getElementById(pId).contentDocument.execCommand(pValue,false,"null");				
						break;	
						
					case "h1":
					case "h2":
					case "h3":
						if (bt_IE)
							document.getElementById(pId).execCommand("formatblock",false,"<" + pValue + ">");
						else
							document.getElementById(pId).contentDocument.execCommand("formatblock",false,"<" + pValue + ">");
						break;
				}
					
				break;		
				
			case "defaultvalue": 
				if (document.getElementById(pId).value == "")
					document.getElementById(pId).value = pValue; 
				break;
				
			case "select": document.getElementById(pId).select(); break;
			
			case "addvalueonce":
				var vb = document.getElementById(pId).value; 
				
	    	if (vb.indexOf(pValue) >= 0)
				{
				}
				else
					vb += " " + pValue;
					
				document.getElementById(pId).value = vb;				
				break;

			case "removevalue":
				var vb = document.getElementById(pId).value; 
				
	    	if (vb.indexOf(pValue) >= 0)
				{
					vb = vb.replace(pValue,"");
				}
					
				document.getElementById(pId).value = vb;				
				break;
				
				
			case "loader": document.getElementById(pId + "_loader").innerHTML = pValue; break;
				
				
		}
  } 
  catch(e)
  { 
  	//alert(e);
  }   		
}





function bt_server_call(pMode,pCalling,pContainer,pDisplayLoading,pParameters,pTimeOut,pIdParametersContainer)
{	
  bt_call_count++;
	var objXmlHttp = null;
		
	
	if (pIdParametersContainer != "")
		pParameters = bt_get(pIdParametersContainer,"value",pParameters);
	

  if (bt_IE)
  {       
    var strObjName = "";    
    if (bt_IE5)
      strObjName = "Microsoft.XMLHTTP";
    else
      strObjName = "Msxml2.XMLHTTP";
           
    try
    { 
      objXmlHttp = new ActiveXObject(strObjName); 
      
      if (objXmlHttp.overrideMimeType)
        objXmlHttp.overrideMimeType('text/html');
      
      
      objXmlHttp.onreadystatechange = function()
      {
        if (objXmlHttp.readyState == 4 || objXmlHttp.readyState == "complete") 
        	bt_server_call_response(pMode,pContainer,pParameters,objXmlHttp.responseText,pTimeOut);
        else
        	bt_server_call_loading(pMode,pContainer,pDisplayLoading);
      }
      
      switch (pMode)
      {
      	case "Post":
  				pParameters = bt_parameter_collection(pParameters,false);      		
      	
	        objXmlHttp.open('POST', pCalling, true); 
//	        objXmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	        objXmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	        objXmlHttp.setRequestHeader("Content-length", pParameters.length);
	        objXmlHttp.setRequestHeader("Connection", "close");
	        objXmlHttp.send(pParameters);
      		break;
      		
				default:      		      
      		objXmlHttp.open('GET', pCalling, true); 
      		objXmlHttp.send(null); 		 
      		break;
      }
    } 
    catch(e)
    { 
      return; 
    }    
  }
  else
  { 
    objXmlHttp = new XMLHttpRequest(); 
    
    if (objXmlHttp.overrideMimeType)
      objXmlHttp.overrideMimeType('text/html');
    
    objXmlHttp.onload = function()
    {
      if (objXmlHttp.readyState == 4 || objXmlHttp.readyState == "complete") 
      	bt_server_call_response(pMode,pContainer,pParameters,objXmlHttp.responseText,pTimeOut);
      else
      	bt_server_call_loading(pMode,pContainer,pDisplayLoading);
      	
    }
    
    objXmlHttp.onerror = function()
    {
    }

    switch (pMode)
    {
     	case "Post":
 				pParameters = bt_parameter_collection(pParameters,false);      		

	      objXmlHttp.open('POST', pCalling, true); 
//	        objXmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        objXmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	      objXmlHttp.setRequestHeader("Content-length", pParameters.length);
	      objXmlHttp.setRequestHeader("Connection", "close");
	      objXmlHttp.send(pParameters);
     		break;
     		
			default:      		      
		    objXmlHttp.open('GET', pCalling, true); 
		    objXmlHttp.send(null); 		 
     		break;
    }
                    
  }        
}



function bt_server_call_response(pMode,pContainer,pParameters,pResponseText,pTimeOut)
{	
	var pOutput = true;
	var iv = "";
		
	switch (pMode)
	{
		case "Load":
		case "Post":
			
    	if (pResponseText.indexOf('[CallFunction]') >= 0)
    	{
				clearTimeout(bt_timer_function_call);
				bt_timer_function_call = setTimeout(pResponseText,100);
				pOutput = false;
			}

    	if (pResponseText.indexOf('[ReDirect]') >= 0)
    	{
				pResponseText = pResponseText.replace("[ReDirect]","");
				bt_reload("");
				pOutput = false;
			}

    	if (pResponseText.indexOf('[ReDirectTo]') >= 0)
    	{
				pResponseText = pResponseText.replace("[ReDirectTo]","");
				bt_goto(pResponseText);
				pOutput = false;
			}

    	if (pResponseText.indexOf('[GoToBaseUrlAddQuery]') >= 0)
    	{
    		var pSet = pResponseText.split("|");
    		if (pSet.length > 1)
    		{   
    			//alert(bt_get(pSet[1],'value','') + pSet[2]); 		
					bt_goto(bt_get(pSet[1],'value','') + pSet[2]);
					pOutput = false;
				}
			}

    	if (pResponseText.indexOf('[Completed]') >= 0)
    	{
				pResponseText = pResponseText.replace("[Completed]","");
				pOutput = true;
			}

    	if (pResponseText.indexOf('[Failed]') >= 0)
    	{
				pResponseText = pResponseText.replace("[Failed]","");
				pOutput = true;
			}
		
			if (pOutput)
				bt_set(pContainer,"html",pResponseText);

			if (pTimeOut > 0)
			{
				clearTimeout(bt_timer);
				bt_timer = setTimeout((function(){bt_set(pContainer,"html",'');}),pTimeOut);
			}
			break;	
			
	}
}

function bt_server_call_loading(pMode,pContainer,pDisplayLoading)
{	
	switch (pMode)
	{
		case "Load":
		case "Post":
			bt_set(pContainer,"html","... (loading icon) ...");
			break;	
			
	}
}



function bt_parameter_collection(pFields,pEncodeTransfer)
{
  var rv = "";  
  var pValue = "";
    
  var pFieldsArray = pFields.split(",");
  for (i = 0; i < pFieldsArray.length; i++)
  {
    if (pFieldsArray[i] != "")
    {
    	pValue = bt_get(pFieldsArray[i],"value","");
    	
      if (rv != "")
        rv += "&";

			if (pEncodeTransfer == true)
				pValue = bt_character_transfer_encode(pValue);

      rv += pFieldsArray[i] + "=" + encodeURI(pValue);
    }
  }  
  
  return rv;
}


function bt_character_transfer_encode(pText)
{
  var rv = pText;

  rv = rv.replace(/ß/g,"[specs]");
  rv = rv.replace(/ü/g,"[lcu]");
  rv = rv.replace(/Ü/g,"[ucu]");
  rv = rv.replace(/ö/g,"[lco]");
  rv = rv.replace(/Ö/g,"[uco]");
  rv = rv.replace(/ä/g,"[lca]");
  rv = rv.replace(/Ä/g,"[uca]");

  rv = rv.replace(/&szlig;/g,"[specs]");
  rv = rv.replace(/&uuml;/g,"[lcu]");
  rv = rv.replace(/&Uuml;/g,"[ucu]");
  rv = rv.replace(/&ouml;/g,"[lco]");
  rv = rv.replace(/&Ouml;/g,"[uco]");
  rv = rv.replace(/&auml;/g,"[lca]");
  rv = rv.replace(/&Auml;/g,"[uca]");

  rv = rv.replace(/&#/g,"[sharp]");
  rv = rv.replace(/&amp;/g,"[amp]");
  rv = rv.replace(/&/g,"[amp]");

	rv = rv.replace("+","{plus}");

  return rv;
}

function bt_character_transfer_decode(pText)
{
  var rv = pText;

  rv = rv.replace(/[amp]/g,"&");
  rv = rv.replace(/[sharp]/g,"&#");

  rv = rv.replace(/[specs]/g,"&szlig;");
  rv = rv.replace(/[lcu]/g,"&uuml;");
  rv = rv.replace(/[ucu]/g,"&Uuml;");
  rv = rv.replace(/[lco]/g,"&ouml;");
  rv = rv.replace(/[uco]/g,"&Ouml;");
  rv = rv.replace(/[lca]/g,"&auml;");
  rv = rv.replace(/[uca]/g,"&Auml;");

  rv = rv.replace(/[specs]/g,"ß");
  rv = rv.replace(/[lcu]/g,"ü");
  rv = rv.replace(/[ucu]/g,"Ü");
  rv = rv.replace(/[lco]/g,"ö");
  rv = rv.replace(/[uco]/g,"Ö");
  rv = rv.replace(/[lca]/g,"ä");
  rv = rv.replace(/[uca]/g,"Ä");

  return rv;
}



function bt_toggle_css(pId,pOn,pOff)
{
	if (bt_get(pId,"css","") == pOn)
		bt_set(pId,"css",pOff);
	else
		bt_set(pId,"css",pOn);
}




function bt_toggle_list_css(pIdBase,pSelectedId)
{
	var pList = bt_get(pIdBase + "_list","value","");
	var pCssOn = bt_get(pIdBase + "_css_on","value","");
	var pCssOff = bt_get(pIdBase + "_css_off","value","");
	
  var pListArray = pList.split(",");
  for (i = 0; i < pListArray.length; i++)
  {
    if (pListArray[i] != "")
    {
    	if (pListArray[i] == pSelectedId)
    		bt_set(pListArray[i],"css",pCssOn);
    	else
    		bt_set(pListArray[i],"css",pCssOff);
		}
	}
}



function bt_toggle_value(pId,pValue,pA,pB)
{
	if (bt_get(pId,"value","") == pValue)
		bt_set(pId,"value",pA);
	else
		bt_set(pId,"value",pB);
}

function bt_toggle_list_value(pListId,pValue,pSeparator)
{
	var pList = bt_get(pListId,"value","");
	var pListItem = pSeparator + pValue + pSeparator;
	
	if (pList.indexOf(pListItem) != -1) // Found //
		pList = pList.replace(pListItem,"");
	else
		pList += pListItem;	
		
	bt_set(pListId,"value",pList);
}


function bt_toggle_display(pId)
{
	if (bt_get(pId,"display","") == "block")
		bt_set(pId,"display","none");
	else
		bt_set(pId,"display","block");
}


function bt_toggle_list_display(pIdBase,pSelectedId)
{
	var pList = bt_get(pIdBase + "_list","value","");
  var pListArray = pList.split(",");
  for (i = 0; i < pListArray.length; i++)
  {
    if (pListArray[i] != "")
    {
    	if (pListArray[i] == pSelectedId)
    		bt_set(pListArray[i],"display","block");
    	else
    		bt_set(pListArray[i],"display","none");
		}
	}
}


function bt_toggle_list_display_direct(pList,pSelectedId)
{
  var pListArray = pList.split(",");
  for (i = 0; i < pListArray.length; i++)
  {
    if (pListArray[i] != "")
    {
    	if (pListArray[i] == pSelectedId)
    		bt_set(pListArray[i],"display","block");
    	else
    		bt_set(pListArray[i],"display","none");
		}
	}
}



function bt_toggle_checkbox(pId,pPathAndCheckImageBase,pExtension)
{
	if (bt_get(pId,"value","") == 1)
	{
		bt_set(pId,"value",0);
		bt_set(pId + "_img","img",pPathAndCheckImageBase + "FALSE." + pExtension);
	}
	else
	{
		bt_set(pId,"value",1);
		bt_set(pId + "_img","img",pPathAndCheckImageBase + "TRUE." + pExtension);
	}
}

function bt_math_floor(pSum)
{
	var rv = 0;
	
	if (pSum > 0)
		rv = Math.floor(pSum);	
	
	return rv;
}




