﻿var uploadInput;

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
//alert("Hi");
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
///
/// Replace the string specified in the from variable with the variable in the 
/// to parameter.
///
function strReplace(src, from, to) 
{
	if (from == "")
		return src;

	return _strReplace(src, from, to);
}

// helper function - don't call directly
function _strReplace(src, from, to)
{
	var i = src.indexOf(from);
	if (i == -1) return src;

	var r = "";
	r += src.substring(0,i) + to;
	if(i + from.length < src.length)
		r += _strReplace(src.substring(i + from.length, src.length), from, to);
	return r;
}



function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}





function ShowMessage(msg)
{
	msg = strReplace(msg, "<br>", "\n");
	alert(msg)
}

function ShowErrorPopup(msg)
{
	ShowMessage(msg);
}


function CloseForm()
{
	window.close();
    return false;
}

function GetElementById(id)
{
	if(typeof(id) == "object")
		return id;
		
	return MM_findObj(id);
}


function GetElementName(el)
{
	var sReturn = '';
	
	if(typeof(el.id)=='string')
		sReturn = el.id;

	if (el.type == "radio"  || (sReturn.length==0 && typeof(el.name)=='string'))
		sReturn = el.name;
    
	return sReturn;
}

/// <summary>
/// </summary>
function GetElementData(el)
{

	if(typeof(el) == "string")
		el = GetElementById(el);

	if(!el)
		return null;
		
	var sReturn = null;
	switch(el.type)
	{
		case 'radio':
			sReturn = '0';
			if(el.checked)
				sReturn = el.value;
			break;

		case 'checkbox':
			sReturn = '0';
			if (el.checked)
			{
				sReturn = '1';
				
				// FIX: Check to see if a value exists for each checkbox.
				// If not 0 or blank, then return the value instead of "1"
				// for items checked.
				if(el.value && el.value != "0" && el.value != "")
					sReturn = el.value;
			}
			break;
			
		case 'text':
		case 'textarea':
		case 'password':
		case 'hidden':
		case 'file':
		case 'select-one':
			sReturn = el.value;
			break;
		case 'select-multiple':
			var aReturn = new Array();
			var elLen = el.length;
			var opt = el.options;
			for (i=0;i<elLen;i++)
			{
				if (opt[i].selected)
				{
					aReturn.push(opt[i].value + ',');
				}
			}
			
			sReturn = aReturn.join('');
			if (sReturn!=null && sReturn.charAt(sReturn.length-1)==',')
				sReturn = sReturn.substr(0, sReturn.length-1);
			break;
	}
	
	if (typeof(sReturn)=='undefined')
		return null;

	return escape(sReturn).replace(/\+/g,'%2B');
}


/**********************************************************************************************************
 <summary>
	GetFormData function returns data so that it can be posted via AJAX. Data posted via AJAX can
	be accessed from the Request.Form object on the server just like you normally would.
 </summary>

 <returns>string formatted call to AJAX API (name=value&name=value)</returns>
*********************************************************************************************************/
function GetFormData(formnum)
{
	var sReturn='';
	var objName='';
	var objValue='';
	var el;
	var i;
	var s;
	
	if(!formnum || typeof(formnum)=="undefined")
		formnum = 0;
		
	var elBase=document.forms[formnum].elements;
	var elLen =elBase.length;	
	var aReturn =new Array();
	 
	try
	{
	aReturn.push('&lt;root&gt;');
		for(i=0;i<elLen;i++)
		{
			el = elBase[i];		
			
			objName = GetElementName(el);	
			objValue = '';
			

			//exclude all .NET native controls, buttons and images
			if (objName.length>0 
					&& objName!='__VIEWSTATE' && objName!='__EVENTTARGET' && objName!='__EVENTARGUMENT' && objName!='\r\n__VIEWSTATE'
					&& el.type!='submit' && el.type!='reset' && el.type!='image' && el.type!='button')
			{
				if(el.type == 'radio' && el.checked == false)
					continue;

				// Exclude disabled controls, to be consistent with standard HTML form posts and to
				// eliminate data for controls that aren't likely needed.
				if (el.isDisabled)  // Note: isDisabled will be true if the control or a parent element is disabled
					continue;

				objValue = GetElementData(el);

                // <v id="idval">asdfasdfasdf</v>
                if(el.type == 'file')
                {
					aReturn.push('&lt;v id="' + objName + '"  type="file" &gt;' + objValue + '&lt;/v&gt;'); 
                }
                else
                {
					aReturn.push('&lt;v id="' + objName + '"&gt;' + objValue + '&lt;/v&gt;'); 
				}
			}
		}
			aReturn.push('&lt;/root&gt;');

	}catch(e){alert('Error Getting Form Data:' + e.message);} 

	sReturn = aReturn.join('');

	if (sReturn.charAt(sReturn.length-1)=='&')
		sReturn = sReturn.substr(0, sReturn.length-1);
	
	return sReturn;
}


/* 
    the following 3 blocks of code allow Firefox to support the outerHTML getter and setter
    functions.  
*/

//if (/Mozilla\/5\.0/.test(navigator.userAgent))
//   document.write('<script type="text/javascript" src="mozInnerHTML.js"></sc' + 'ript>');

/*
if (whichBrs() == 'Mozilla') {
    document.write('<script type="text/javascript" src="mozInnerHTML.js"></sc' + 'ript>');
}
*/


// Browser Detection Javascript
// copyright 1 February 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function whichBrs() {
var agt=navigator.userAgent.toLowerCase();
if (agt.indexOf("opera") != -1) return 'Opera';
if (agt.indexOf("staroffice") != -1) return 'Star Office';
if (agt.indexOf("webtv") != -1) return 'WebTV';
if (agt.indexOf("beonex") != -1) return 'Beonex';
if (agt.indexOf("chimera") != -1) return 'Chimera';
if (agt.indexOf("netpositive") != -1) return 'NetPositive';
if (agt.indexOf("phoenix") != -1) return 'Phoenix';
if (agt.indexOf("firefox") != -1) return 'Firefox';
if (agt.indexOf("safari") != -1) return 'Safari';
if (agt.indexOf("skipstone") != -1) return 'SkipStone';
if (agt.indexOf("msie") != -1) return 'Internet Explorer';
if (agt.indexOf("netscape") != -1) return 'Netscape';
if (agt.indexOf("mozilla/5.0") != -1) return 'Mozilla';
if (agt.indexOf('\/') != -1) {
if (agt.substr(0,agt.indexOf('\/')) != 'mozilla') {
return navigator.userAgent.substr(0,agt.indexOf('\/'));}
else return 'Netscape';} else if (agt.indexOf(' ') != -1)
return navigator.userAgent.substr(0,agt.indexOf(' '));
else return navigator.userAgent;
}



function setInnerHTML(obj, str)
{
    try
    {
        if(obj.innerHTML != undefined)
        {
            obj.innerHTML = str;
        }
        else
        {
	        var r = obj.ownerDocument.createRange();
	        r.selectNodeContents(obj);
	        r.deleteContents();
	        var df = r.createContextualFragment(str);
	        obj.appendChild(df);
	    }
    } catch(ex) {return false;}
    	
	return true;
}
  
function setOuterHTML(obj, str) 
{

    try
    {
        if(obj.outerHTML != undefined)
        {
            obj.outerHTML = str;
        }
        else
        {
            var r = obj.ownerDocument.createRange();
            r.setStartBefore(obj);
            var df = r.createContextualFragment(str);
            obj.parentNode.replaceChild(df, obj);
	    }
    } catch(ex) {return false;}
    	
	return true;
}



function processAjaxResponse(xml)	// xml should be a XML Dom object
{
    var _node;
	var _nodes;
	var _rootnodename = 'APAjax/Obj';
	var _name = '';
	var _type = '';
	var _value = '';
	var _obj;
	var _errmsg = '';
	var _infomsg = '';

	_nodes = Ext.DomQuery.select('//APAjax/Obj', xml)

	for(var i = 0; i < _nodes.length; i++)
	{
	    _node = _nodes[i];
	    
		_name = _node.getAttribute('id');
		_value = ''
		
		var l = _node.childNodes.length;
		for(var x=0; x < l; )
		{
		    _value += _node.childNodes[x].nodeValue;
		    ++x;
		}
		    
		switch(_name)
		{
			case "jscall":
				try
				{
					eval(_value);
				}
				catch(e)
				{
					if(_errmsg != "")
						_errmsg += "<br/>";
					_errmsg += 'Error executing script: ' + _value + '\n' + e.message;
				}
				break;


			case "jsfile":
				try
				{
					_obj = document.createElement('script');
					_obj.type = 'text/javascript';
					_obj.src = _value;
					document.body.appendChild(_obj);
				}
				catch(e)
				{
					if(_errmsg != "")
						_errmsg += "<br/>";
					_errmsg += 'Error registering javascript file: ' + _value + '\n' + e.message;
				}
				break;


			case "showerror":
				if(_errmsg != "")
					_errmsg += "<br/>";
				_errmsg += _value;
				break;

			case "showmsg":
				if(_infomsg != "")
					_infomsg += "<br/>";
				_infomsg += _value;
				break;

			case "close":
				try
				{
					if (_infomsg != "")
					{
						ShowMessage(_infomsg);
						_infomsg = "";
					}
					CloseForm();
				}
				catch(e){}

				break;

			default:
				try
				{
					_type = _nodes[i].getAttribute('type');

					_obj = MM_findObj(_name);
					
					if (_obj && _type=='value')
					{
						_obj.value = _value;
					}
					else if (_obj && _type=='obj')
					{
						if (!_value)  _value = '';
						    
					    if(setOuterHTML(_obj, _value) == false)
					    {
							setInnerHTML(_obj, _value);
						}
					}
				}
				catch(e)
				{
					if(_errmsg != "")
						_errmsg += "<br>";
					_errmsg += 'Error setting/replacing: ' + _name + '\nwith: ' + _value + '\n' + e.message;
				}
				break;
		}
	}

	if(_errmsg != "")  ShowErrorPopup(_errmsg);

	if (_infomsg != "")  ShowMessage(_infomsg);
	prepareFileInput();
}
var uploadInputElement;
var hasFile = false;;
function prepareFileInput()
{
	uploadInputElement = $("input[type='file']:first");
	$(document).ready(function() {
		if(uploadInputElement.length > 0)
		{
			uploadInput = new AjaxUpload(uploadInputElement, {
				action: "GenericFormFileUpload.aspx",
				name: "UploadedFile",
				autoSubmit: false,
				onChange: function(file, extension){
					hasFile = true;
				},
				onSubmit: function(file, extension) {
					var strVal = GetFormData();
					uploadInput.setData({'data': strVal});
				},
				onComplete : function(file, response) {
					//alert(file + "\n" + response);
				}	
			});
		}
	});
	
}

function parseBool(str)
{
	if(!str)
		return null;
		
	switch(str)
	{
		case "0":
		case "false":
			return false;
		default:
			return true;
	}
	return true;
}

function SetElementValue(id, val)
{
	var obj, retValue;
	if(typeof(id) == "object")
		obj = id;
	else
		obj = MM_findObj(id);

	if(!obj)
		return false;
		
	if (obj.tagName == 'SPAN')
		obj.innerText = val;
	else if(obj.type == 'radio' || obj.type=="checkbox" )
		obj.checked = parseBool(val);
    else if (obj.length > 0 && obj[0].type == "radio")
    {
        for (var n=0; n< obj.length; n++)
        {
            if (obj[n].value == val)
            {
                obj[n].checked = true;
                break;
            }
        }
    }
	else if (obj.tagName != "SELECT")
		obj.value = val;
	else 
	{
		val = ('' + val).toLowerCase();  // handle numeric values in null along with strings.
		obj.selectedIndex = -1;

		var optLen = obj.options.length; 
		for (var n=0; n < optLen; n++) 
		{ 
			var opt = obj.options[n];
			if (opt.value.toLowerCase()==val || opt.text.toLowerCase()==val)
			{ 
				obj.selectedIndex = n; 
				break;
			}

		}
	}
	return true;
}


function isBluebox()
 {
    var str = 0;
    
    try {
    var query = window.location.search.substring(1);
    
    if(query != null && query.toLowerCase().indexOf("gentype=bluebox") >= 0)
        str = 1;    
    } catch(e) { 
        //alert("Error: " + e.message);
    }
    
    return str;
}


function callback(res)  {
    try {
        var x = res.value;
        processAjaxResponse(x);
    } catch(e){alert('error in callback ' + e.message);}
}


function LoadEvent()    {
    try {
        var tmp;
        temp = document.getElementById('formID').innerHTML;
        temp = trim(temp);
        var strVal;
        strVal = '<root><v id="itemID">' + temp + '</v></root>';        
        
        AJAX.API.PorkEvent(isBluebox(), "pageload", strVal, callback);
    } catch(e){alert(e.message);}
}


//function addLoadEvent(func) {
//  var oldonload = window.onload;
//  if (typeof window.onload != 'function') 
//    window.onload = func;
//  else 
//  {
//    window.onload = function() 
//    {
//      if (oldonload) 
//        oldonload();
//      func();
//    }
//  }
//}



function SubmitForm() {
	
    try {
        if (ValidateForm()) {
            
            //var strVal = buildSaveForm();
            var strVal = GetFormData();
            if(hasFile)
            {
				uploadInput.submit();
			}
			else
			{
				AJAX.API.PorkEvent(isBluebox(), "saveform", strVal, callback); 
            }
            document.getElementById('genericFormCopy').style.display = 'none';           
            document.getElementById('genericForm').style.display = 'none';
            //document.getElementById('FormButtons').style.display = 'none';
            document.getElementById('divConfirmation').style.display = 'inline';
        }
    } catch(e){alert(e.message);}
}



function ValidateForm() {
    var submitFlag = true;
    var arrFields = document.getElementById('hidRequiredFields').value.split(",")
    
    for(var i=0; i < arrFields.length; i++)
    {
		var fieldID = arrFields[i];
		var fieldValue = document.getElementById(fieldID).value;
		var selectedIndex = document.getElementById(fieldID).selectedIndex;
		//Check if we have a select box
		if(document.getElementById(fieldID).selectedIndex >= 0)
		{
			var text = document.getElementById(fieldID).options[selectedIndex].text;
			//If there is a blank option box block submit
			//http://jira:8080/browse/PORK-37
			if(fieldValue.length == 0 || text == "" || text == undefined || text == "undefined")
			{
				submitFlag = false;
			}
		}
		else
		{
			if (fieldValue.length == 0)
			{
				submitFlag = false;
			}
        }
    }
    
    if (!submitFlag) {
        alert("Please fill out all fields marked as required.");
    }    
    return submitFlag;
    
}


function buildSaveForm()    {
    var frmData = "<item>" + GetFormData();
    var str = "<xml><form><formItems>";
    var elem = document.getElementById('Form1').elements;
    for (var i=0; i < elem.length; i++) {
        if (elem[i].id.indexOf("txt") >= 0) {
            str += "<" + elem[i].id.substr(3, elem[i].id.length) + ">";
            str += elem[i].value;
            str += "</" + elem[i].id.substr(3, elem[i].id.length) + ">";
        }
    }
    str += "</formItems></form></xml>";
    frmData = frmData + str + "</item>";
    
    return frmData;
    
}



function displayRequiredText(val) {
    if (val > 0) {
        document.getElementById('requiredFieldText').style.display = 'inline';
    }
}





    
    

