﻿/// <reference name="MicrosoftAjax.js"/>

history.forward();

var agt = navigator.userAgent.toLowerCase();
var safari = (agt.indexOf('safari') != -1) ? true:false;
var opera = (window.opera) ? true:false;
var ie = (document.all && !safari && !opera) ? true:false;
var moz = (document.getElementById && !safari && !opera && !ie) ? true:false;

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.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

function CheckBrowser()
{
    var validDisplay = ['Internet Explorer', 'Firefox', 'Safari', 'Opera', 'Google Chrome'];
    var validBrowsers = ['Explorer', 'Firefox', 'Safari', 'Opera', 'Chrome'];
    var validVersions = ['8.0', '3.5', '5.0', '10.0', '5.0'];
    BrowserDetect.init();
    var browserIDX = validBrowsers.indexOf(BrowserDetect.browser);
    var compat = (browserIDX != -1 && BrowserDetect.version >= (validVersions[browserIDX] * 1.0));
    if (!compat && $('divIncompat'))
    {
        var jStr;
        var cr = '\n';
        if (browserIDX != -1)
        {
            jStr = 'It appears as though you are currently using ' + 
                validDisplay[browserIDX] + ' v' + (BrowserDetect.version * 1.0).toFixed(1) + 
                ', which is NOT 100% compatible with the QC Conveyor Configurator.' + cr;
            jStr += 'Try upgrading to the latest version of ' + validDisplay[browserIDX] + ', ';
            jStr += 'or suggest ' + validDisplay[browserIDX] + ' v' + validVersions[browserIDX] + 
                ' to your local IT department.' + cr;
            jStr += cr + 'You can also use any of the following supported browsers for full compatibility:' + cr;
        }
        else
        {
            jStr += 'You are currently using an Uknown Browser' + 
                ', which is NOT 100% compatible with the QC Conveyor Configurator.';
            jStr += cr + 'Use any of the following supported browsers for full compatibility:' + cr;
        }
        for (i = 0; i < validBrowsers.length; i++)
        {
            if (browserIDX != i)
            {
                jStr += validDisplay[i] + ' v' + validVersions[i] + cr;
            }
        }
        alert(jStr);
    }
}

var kaTimer;
var kaInterval = -1; // miliseconds
var mainTimer;
var mainTimerInterval = 1000; // miliseconds

var requestQueue = [];

var strPHID = 'ctl00_MDI_';

var prm;
var postBackElement;
var executingElement;
var requestQueue = new Array();

if (Sys)
{
	Sys.Application.add_init(appInit);
	if (typeof(Sys.Browser.WebKit) == "undefined")
	{
        Sys.Browser.WebKit = {};
    }
    if (navigator.userAgent.indexOf("WebKit/") > -1 )
    {
        Sys.Browser.agent = Sys.Browser.WebKit;
        Sys.Browser.version =
            parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
        Sys.Browser.name = "WebKit";
    }
}
else
{
	throw "Sys is not defined, please verify you have a script manager on the page " +
        "and that this object js file is included in its script collection.";
}

function appInit()
{
	prm = Sys.WebForms.PageRequestManager.getInstance();
	prm.add_initializeRequest(initializeRequestHandler);
	prm.add_beginRequest(beginRequestHandler);
	// prm.add_pageLoading(pageLoadingHandler);
	prm.add_endRequest(endRequestHandler);
	QCInitialize();
}

function focusControl(c)
{
    // Focus on Control if possible
    try
    {
        c.focus();
    }
    catch (err)
    {
    }
}

function beginRequestHandler(sender, args)
{
	// Store Remembered Scrolls
	GetScroll();
}

function initializeRequestHandler(sender, args)
{
	$('divWholePage').style['cursor'] = "wait";
		
	// Get Current Reference to Page Request Manager
	prm = Sys.WebForms.PageRequestManager.getInstance();
	
	// Get Post Back Element
	postBackElement = args.get_postBackElement();
	
	// Check if Element is not Current Executing Element
	if (postBackElement)
	{
        if (prm.get_isInAsyncPostBack() == false)
        {
            // Proceed Normally
            currentFocusedControlId = postBackElement.id;
            
            // Mark current executing element
	        executingElement = postBackElement;
        }
        else if (executingElement != postBackElement)
        {
            // Queue the Post Back
            if (postBackElement.type == 'select-one')
            {
                // dropdown boxes
                var retArgs = postBackElement.selectedIndex + '^' + postBackElement[postBackElement.selectedIndex].value;
                Array.enqueue(requestQueue, new Array(postBackElement, retArgs));
            }
            else
            {
                // other controls
                Array.enqueue(requestQueue, new Array(postBackElement, $("__EVENTARGUMENT").value));
    	    }
    	    
            // Cancel this postback
            args.set_cancel(true);
        }
        
        // Disable the Element
        postBackElement.disabled = true;
        
        // Disable all text-boxes and drop-down-boxes
        $$('INPUT[type="text"]').each(function(element) {
            element.disabled = true;
        });
        $$('SELECT').each(function(element) {
            element.disabled = true;
        });
    }
}

function endRequestHandler(sender, args)
{
    // Remove hour-glass
	$('divWholePage').style['cursor'] = "default";
	
    // Focus on Control
	focusControl(executingElement);
	
	// Set Remembered Scrolls
	SetScroll();
	
    // Do Post Back on any Queued Elements
	if (requestQueue.length > 0)
	{
		var elemEntry = Array.dequeue(requestQueue);
		var _element = elemEntry[0];
		var _eventArg = elemEntry[1];
		
		if (_element && _element.id.length > 0)
		{
		    // Enable Element
		    _element.disabled = false;
    		
			if (_element.id.lastIndexOf('_') > -1)
			{
				$('__EVENTARGUMENT').value = _eventArg;
				if (_element.type == 'submit' || _element.type == 'button' ||
				    _element.type == 'checkbox' || _element.type == 'radio')
				{
				    // Cheat for clickable elements
					$(_element.id).click();
				}
				else if (_element.type == 'select-one')
				{
				    // Reselect Select Tags
				    
				    var splt = _eventArg.split("^");
				    _element.selectedIndex = splt[0];
				    _element.value = splt[1];
					__doPostBack(_element.name, '');
				}
				else
				{
				    // For other Controls
					__doPostBack(_element.name, _eventArg);
				}
			}
			else
			{ 
			    // Last Resort
			    prm._doPostBack(_element.name, _eventArg);
			}
		}
	}
	
//    // Enable all text-boxes and drop-down-boxes
//    $$('INPUT[type="text"]').each(function(element) {
//        element.disabled = false;
//    });
//    $$('SELECT').each(function(element) {
//        element.disabled = false;
//    });
}

function QCInitialize()
{
    // Initialize Main Timer
    mainTimer = setInterval('MainTimer();', mainTimerInterval);
}

/// Called Once per Second
function MainTimer()
{
    if (kaInterval == -1)
    {
        // Initialize KeepAlive - every 5 sec until found...
        SetKeepAliveInterval(5000);
    }
}

function AddRequest(request)
{
    requestQueue[requestQueue.length] = request;
}

function KeepAlive()
{
    wsQC.KeepAlive(requestQueue, KeepAlive_CallBack);
}

function KeepAlive_Error()
{
}

function KeepAlive_CallBack(ret)
{
    if (ret.length > 0)
    {
        cmd = ret.split(';');
        for (i = 0; i < cmd.length; i++)
        {
            if (cmd[i].length > 0 && cmd[i].indexOf(',') > -1)
            {
                splt = cmd[i].split(',');
                SystemCommand(splt[0], splt[1]);
            }
        }
    }
}

function SetKeepAliveInterval(interval)
{
    // Set Interval
    kaInterval = interval;
    clearInterval(kaTimer);
    kaTimer = setInterval('KeepAlive();', kaInterval);
}

function SystemCommand(cmd, param)
{
    switch (cmd)
    {
        case "Interval":
            // Set Interval
            SetKeepAliveInterval(param);
            break;
            
        case "SystemMessage":
            // Alert System Message
            if (param)
            {
            }
            break;
            
        default:
            // invalid server response
    }
    // Clear Request Queue
    requestQueue = [];
}

/// SCROLL FUNCTIONS

var scrollDiv = [];
var scrollLeft = [];
var scrollTop = [];

function RememberScroll(id)
{
    // Remember Scroll Position of Elements
    if ($(id) && scrollDiv.indexOf(id) == -1)
    {
        scrollDiv[scrollDiv.length] = id;
        ResetScroll(id);
    }
}

function ResetScroll(id)
{
    // Reset Scroll Position of Elements
    if ($(id) && scrollDiv.indexOf(id) != -1)
    {
        scrollLeft[scrollDiv.indexOf(id)] = 0;
        scrollTop[scrollDiv.indexOf(id)] = 0;
    }
}

function SetScroll()
{
    // Set Scroll Position of Remembered Elements
    for (i=0;i<scrollDiv.length;i++)
    {
        var elem = $(scrollDiv[i]);
        if (elem)
        {
            elem.scrollLeft = scrollLeft[i];
            elem.scrollTop = scrollTop[i];
        }
    }
}

function GetScroll()
{
    // Get Scroll Position of Remembered Elements
    for (i=0;i<scrollDiv.length;i++)
    {
        var elem = $(scrollDiv[i]);
        if (elem)
        {
            scrollLeft[i] = elem.scrollLeft;
            scrollTop[i] = elem.scrollTop;
        }
    }
}

function ScrollToBottomTextArea(ta)
{
    if(ta && ta.createTextRange)
    {
        rng = ta.createTextRange();
        rng.collapse(false);
        rng.select();
    }
}

//Drawing Page Functions
// todo: move drawing page functions to drawing.js

function chkAll(chkName, me)
{
    if (!isUndefined(BOMCount))
    {
        for (i=0;i<BOMCount;i++)
        {
            for (j=0;j<ItemCount[i] + 1;j++)
            {
                // todo: make this more generic?
                var strID = strPHID + 'repeatBOM_ctl' + PadNum(i, 2) + '_repeatItem' +  PadNum(i, 2) + '_ctl' +  PadNum(j, 2) + '_' + chkName;
                var ctl = $get(strID);
                if (ctl && !ctl.disabled) ctl.checked = me.checked;
                if (ctl && ctl.disabled) ctl.checked = false;
            }
        }
    }
    resetLink();
}

function unchkAll()
{
    if (!isUndefined(BOMCount))
    {
        for (i=0;i<BOMCount;i++)
        {
            for (j=0;j<ItemCount[i] + 1;j++)
            {
                var strID = strPHID + 'repeatBOM_ctl' + PadNum(i, 2) + '_repeatItem' +  PadNum(i, 2) + '_ctl' +  PadNum(j, 2) + '_chkFormat';
                var ctl = $get(strID);
                if (ctl && !ctl.disabled) ctl.checked = false;
            }
        }
    }
    resetLink();
}

function resetLink()
{
    var divL = $get(strPHID + 'lnkClickHere');
    if (divL)
    {
        divL.disabled = true;
        if ($get('divTOS')) $get('divTOS').style['display'] = 'none'; 
    }
}

/// AYS PANEL

function AYSPop(TitleHTML, ContentHTML, Button, Sender, Width, Height, CustomOKScript, CustomNoScript, defaultParams)
{
    var divAYSHeader = $('ctl00_divAYSHeader');
    var divAYSContent = $('ctl00_divAYSContent');
    var pnlAYS = $('ctl00_pnlAYS');
    var pnlAYSContent = $('ctl00_pnlAYSContent');
    var cmdAYS_Y = $('ctl00_cmdAYS_Yes');
    var cmdAYS_O = $('ctl00_cmdAYS_OK');
    var cmdAYS_N = $('ctl00_cmdAYS_No');
    var cmdAYS_C = $('ctl00_cmdAYS_Cancel');
    
    if (clientVars.AYSParams.length > 0 )
    {
        TitleHTML = clientVars.AYSParams;
    }
    
    if (defaultParams == undefined) defaultParams = '';
    
    divAYSHeader.innerHTML = TitleHTML;
    divAYSContent.innerHTML = ContentHTML;
    pnlAYS.style['width'] = Width * 1;
    pnlAYS.style['height'] = Height * 1;
    pnlAYSContent.style['width'] = (Width * 1) - 10;
    pnlAYSContent.style['height'] = (Height * 1) - 100;
    
    if (CustomOKScript)
    {
        if (cmdAYS_Y.onclick) { cmdAYS_Y.onclick += CustomOKScript; } else { cmdAYS_Y.onclick = CustomOKScript; }
        if (cmdAYS_O.onclick) { cmdAYS_O.onclick += CustomOKScript; } else { cmdAYS_O.onclick = CustomOKScript; }
    }
    
    if (CustomNoScript)
    {
        if (cmdAYS_N.onclick) { cmdAYS_N.onclick += CustomNoScript; } else { cmdAYS_N.onclick = CustomNoScript; }
        if (cmdAYS_C.onclick) { cmdAYS_C.onclick += CustomNoScript; } else { cmdAYS_C.onclick = CustomNoScript; }
    }
    
    cmdAYS_Y.style['display'] = "none";
    cmdAYS_O.style['display'] = "none";
    cmdAYS_N.style['display'] = "none";
    cmdAYS_C.style['display'] = "none";
    
    if (Button == 0)
    {
        $('ctl00_cmdAYS_OK').style['display'] = "inline";
    }
    else if (Button == 1)
    {
        $('ctl00_cmdAYS_OK').style['display'] = "inline";
        $('ctl00_cmdAYS_Cancel').style['display'] = "inline";
    }
    else if (Button == 3)
    {
        $('ctl00_cmdAYS_Yes').style['display'] = "inline";
        $('ctl00_cmdAYS_No').style['display'] = "inline";
        $('ctl00_cmdAYS_Cancel').style['display'] = "inline";
    }
    else if (Button == 4)
    {
        $('ctl00_cmdAYS_Yes').style['display'] = "inline";
        $('ctl00_cmdAYS_No').style['display'] = "inline";
    }
    
    clientVars.AYSParams = "~~~" + Sender + "~" + defaultParams;
    
    ShowModal('mpeAYS');
}

function isRightClick()
{
    if (!e) var e = window.event;
    if (e.which) return (e.which == 3);
    else if (e.button) return (e.button == 2);
    return false;
}

if(typeof(Sys) != 'undefined') Sys.Application.notifyScriptLoaded();