var ParametricStepSearch = Class.create();

ParametricStepSearch.prototype = 
{    
    
	initialize: function(table, ControlID) 
	{
	    // Local variables
		this.table = table;
		this.table_css = '#' + this.table.id + ' ';
		this.sort_key = '';
		this.sort_key_index = -1;
		this.sort_key_criteria = null;
		this.bookmark = '';
		this.comparing = false;        
        this.cid = ControlID;    
		// Loop through the columns and set draggable
		$$(this.table_css + 'div.pss_col_attr').each( function(div) 
		{
			new Draggable(div.id,{revert:true});
			
			Droppables.add(div.id, 
				{
					accept: 'pss_col_attr',
					hoverclass: 'drophover',
					onDrop: this.moveColumn.bind(this)
				}
			);
		}.bind(this));
		
		// Loop though the close images
		$$(this.table_css + 'img.pss_close').each( function(img) 
		{
			Event.observe(img, 'click', this.closeColumn.bindAsEventListener(this));
		}.bind(this));
		
		// Loop through the sort images
		$$(this.table_css + 'img.pss_sort').each( function(img) 
		{
			Event.observe(img, 'click', this.sort.bindAsEventListener(this));
		}.bind(this));
		
		// Loop through the filter images
		$$(this.table_css + 'img.pss_filter').each( function(img) 
		{
			Event.observe(img, 'click', this.popup.bindAsEventListener(this));
		}.bind(this));
		
		// Loop through the popups and hide them
		$$(this.table_css + 'div.pss_popup').each( function(div) 
		{
			Element.hide(div);
		}.bind(this));
		
		// Loop through the filter checkboxes
		$$(this.table_css + 'input.pss_popup_checkbox').each( function(cbx) 
		{
			Event.observe(cbx, 'click', this.reload.bindAsEventListener(this));
		}.bind(this));
		
		// Bind the column and excel buttons
		if ($('pss_bookmark'))
		{
		    Event.observe('pss_bookmark', 'click', this.showBookmarkableUrl.bindAsEventListener(this));
		}
		
		if ($('pss_part_compare' + ControlID))
		{
		    Event.observe('pss_part_compare' + ControlID, 'click', this.compare.bindAsEventListener(this));
		}
		
		if ($('pss_product_table_tips'))
		{
		    Event.observe('pss_product_table_tips', 'click', this.tips.bindAsEventListener(this));
		}
		if ($('pss_obsolete_parts'))
		{
		    Event.observe('pss_obsolete_parts', 'click', this.obsolete.bindAsEventListener(this));
		}
		
		if ($('pss_obsolete_ref_parts'))
		{
		    Event.observe('pss_obsolete_ref_parts', 'click', this.obsoleteRef.bindAsEventListener(this));
		}
		
		if ($('pss_display_columns'))
		{
		    Event.observe('pss_display_columns', 'click', this.displayColumns.bindAsEventListener(this));
		}
		
		if ($('pss_update_columns'))
		{
		    Event.observe('pss_update_columns', 'click', this.updateColumns.bindAsEventListener(this));
		}
		
		if ($('pss_export_excel'))
		{
		    Event.observe('pss_export_excel', 'click', this.exportExcel.bindAsEventListener(this));
        }
        
        if ($('pss_error_no_parts_reset'))
		{
		    Event.observe('pss_error_no_parts_reset', 'click', this.reset.bindAsEventListener(this));
		}
		
		if ($('pss_error_no_columns_select'))
		{
		    Event.observe('pss_error_no_columns_select', 'click', this.displayColumns.bindAsEventListener(this));
		}
		
        var options = getArgs(this.cid);
		
		if (options) 
		{
		    for (var option in options) 
		    {
		        if (option == 'cols' || option == 'cols'+this.cid) 
			    {
			        closeTableColumns = false;
		            // Set all columns to visible
				    for (var i = 1; i < this.table.tHead.rows[0].cells.length; i++) 
				    {
					    Element.show(this.table.tHead.rows[0].cells[i]);
				    }
		            
		            // Position all columns specified in the options
				    var cols = options[option].split(',');
				    var colCount = 0;
				    
				    for (var i = cols.length - 1; i >= 0; i--) 
				    {
					    var col = $('pss_col_' + cols[i]);
						
						if (!col)
						{
							col = $('pss_col_' + cols[i]  + this.cid );
						}
					    if (col) 
					    {
						    var oldIndex = 1;
						    var newIndex = this._getColumnIndex(col);
						
						    for (var j = 0; j < this.table.rows.length; j++) 
						    {
							    this.table.rows[j].insertBefore(this.table.rows[j].cells[newIndex], 
								    this.table.rows[j].cells[oldIndex]);
						    }
							
							colCount++;
					    }
						
				    }

				    // Close the columns not included in the querystring
				    for (var i = 1 + colCount; i < this.table.tHead.rows[0].cells.length; i++) 
				    {
					    Element.hide(this.table.tHead.rows[0].cells[i]);
				    }
				    
			    } 
			    else if (option == 'sort' || option == 'sort'+this.cid) 
			    {
				    var key = eval('options.' + option);
				
				    if (key.indexOf(' DESC') > -1) 
				    {
					    key = key.replace(/ DESC/, '');
					    // Set the div so the sort will be desc
					    this.sort_key = key;
				    }
				    
				    this._sort($('pss_sort_' + key));
			    } 
			    else 
			    {
				    var cbx = this._getComboBox(option);
				    
				    if (cbx) 
				    {
				        var values = eval('options.' + option).split(',');
				    
				        for (var cbxCount = 0; cbxCount < cbx.length; cbxCount++) 
				        {
					        for (var valCount = 0; valCount < values.length; valCount++) 
					        {
						        if (cbx[cbxCount].value == values[valCount]) 
						        {
							        cbx[cbxCount].checked = true;
						        }
					        }
				        }
				    }
			    }
		    }
		}
       
        // Close all columns where the header is hidden
        for (var i = 1; i < this.table.tHead.rows[0].cells.length; i++) 
        {
	        if (!Element.visible(this.table.tHead.rows[0].cells[i])) 
	        {
	            this._closeColumn(i);
	        }
	    }
	    // Reload the table.
		this.reload();
		
		if ($('pss_error_no_compare'))
		{
		    // Don't show the compare error on load.
		    Element.hide('pss_error_no_compare');
		}
		
		if ($('pss_columns'))
		{
		    // Don't show the column list on load
		    Element.hide('pss_columns');
        }
		if ($('pss_tips'))
		{
		    // Show the help on page load.
		    Element.hide('pss_tips');
		}
		//setTimeout(this._openTips.bind(this), 500);
		//setTimeout(this._closeTips.bind(this), 10000);
	},

	reload: function(event) 
	{	    
        // Loop through links and stop observing them
        $$('#pss_selections' + this.cid + ' span.pss_selections_link').each( function(link) 
        {
		    Event.stopObserving(link, 'click', this.removeFilter.bindAsEventListener(this));
	    }.bind(this));
		
	    // Set all the rows to show before we apply the filters
	    for (var bodyCount=0; bodyCount < this.table.tBodies.length; bodyCount++) 
	    {
		    for (var rowCount=0; rowCount < this.table.tBodies[bodyCount].rows.length; rowCount++) 
		    {
			    Element.show(this.table.tBodies[bodyCount].rows[rowCount]);
		    }
	    }

	    // Loop through the columns and filter the table
	    var selections = '';
	    var crit = '';
	    var critSep = '&';
	    var cols = '?cols=';
	    var colSep = '';
	    var colCount = 0;
	    
	    $$(this.table_css + 'div.pss_col_attr').each( function(div) 
	    {
		    var key = this._getKey(div, 'pss_col_attr_');
		    var col = this._getColumn(div);
		    var colIndex = this._getColumnIndex(col);
		
		    if (Element.visible(col)) 
		    {
		        cols += colSep + escape(key);
		        colSep = ',';
		        colCount++;
		    }
		    
		    var cbx = this._getComboBox(key);
		    
		    if (null != cbx) 
		    {
			    var criteria = [];
				var colValueSep;
			
				if ($('hidValueSep'))
				{
					colValueSep = $F('hidValueSep');
				}
				else
				{
					colValueSep ='';
				}
				
			    var selectionsOptions = '';
			    
			    for (var cbxCount = 0; cbxCount < cbx.length; cbxCount++) 
			    {
				    if (cbx[cbxCount].checked) 
				    {
				        criteria.push(cbx[cbxCount].value);			        
				        selectionsOptions += '<li>' + cbx[cbxCount].value + ' <span class="pss_selections_link" id="pss_selections_link_' + key + '|'+cbxCount+'">[remove]</span>';
				    }
				}
				
				if (criteria.length > 0) 
				{
				    var attrName = $('pss_attr_name_' + key).innerHTML;
				    selections += '<li>' + attrName + '<ul>';
				    selections += selectionsOptions;
				    selections += '</ul></li>';
					crit += critSep + escape(key) + '=' + criteria;
				
				    for (var bodyCount=0; bodyCount < this.table.tBodies.length; bodyCount++) 
				    {
					    var tableBody = this.table.tBodies[bodyCount];
					
					    for (var rowCount=0; rowCount < tableBody.rows.length; rowCount++) 
					    {
						    var tableRow = tableBody.rows[rowCount];
						    // loop through rows and hide non-matching
						    var display = false;
						    
						    for (var criteriaCount = 0; criteriaCount < criteria.length; criteriaCount++) 
						    {
							    //klude fix for buy options
								/*if (key =='buy_options')
								{
									if (tableRow.cells[colIndex].innerHTML.indexOf(criteria[criteriaCount]) > 0) 
									{
									    // filter this row!
									    display = true;
								    }
								}
								else
								{
								*/
									//look for the in string of the data as per ISTRK02318966 since it does not support mutie attr.
									//added a hidden colValueSep
									if (tableRow.cells[colIndex].innerHTML.indexOf(colValueSep + criteria[criteriaCount]+colValueSep) > 0) 
									{
									    display = true;
								    }

								//}
						    }

						    if (Element.visible(tableRow)) 
						    {
								if (display)
								{
								    Element.show(tableRow);
								}
								else
								{ 
								    Element.hide(tableRow);
								}
						    }
					    }
				    }
			    }
		    }
	    }.bind(this));
    	
		
		if ($('pss_error_no_columns'))
		{
    	    if (colCount == 0) 
    	    {
		        Element.show('pss_error_no_columns');
		        new Effect.Highlight('pss_error_no_columns', {duration:5});
		    } 
		    else 
		    {
		        Element.hide('pss_error_no_columns');
		    }
		}
		
		var partCount = this._reloadTableRows();
		
		if ($('pss_error_no_parts'))
		{
		    if (partCount > 0) 
		    {
		        Element.hide('pss_error_no_parts');
		    } 
		    else 
		    {
		        Element.show('pss_error_no_parts');
		        new Effect.Highlight('pss_error_no_parts', {duration:5});
		    }
		}
		
		
	    // Update the display with the calculated values
	    if ($('pss_selections_list' + this.cid))
	    {
	    
		    $('pss_selections_list' + this.cid).innerHTML = selections;
		}

		
		if ($('pss_selections' + this.cid))
		{
	        if (selections.length > 0) 
	        {
	            Element.show('pss_selections' + this.cid);
	        
	            // Loop through links and observe them
	            $$('#pss_selections' + this.cid + ' span.pss_selections_link').each( function(link) 
	            {	       
	                     
			        Event.observe(link, 'click', this.removeFilter.bindAsEventListener(this));
		        }.bind(this));
	        } 
	        else 
	        {
	        
	            Element.hide('pss_selections' + this.cid);
	        }
        }
	    this.bookmark = window.location.protocol + '//' + window.location.hostname + window.location.pathname + cols + ((this.sort_key.length > 0)?'&sort='+escape(this.sort_key):'') + crit;
	    
	    createCookie(this.cid,cols.substring(1,cols.length) + ((this.sort_key.length > 0)?'&sort='+escape(this.sort_key):'') + crit);
    },

	_reloadTableRows: function(event) 
	{
	    // Update the row CSS classes
	    var partCount = 0;
	    var rowCss = 'even';
	
	    for (var bodyCount=0; bodyCount < this.table.tBodies.length; bodyCount++) 
	    {
		    var tableBody = this.table.tBodies[bodyCount];
		
		    for (var rowCount=0; rowCount < tableBody.rows.length; rowCount++) 
		    {
			    var tableRow = tableBody.rows[rowCount];
			
			    if (Element.visible(tableRow)) 
			    {
				    tableRow.className = rowCss;
				    rowCss = ((rowCss=='even')?'odd':'even');
				    partCount++
			    }
		    }
	    }
	    return partCount;
    },

	sort: function(event) 
	{
        //s=s_gi('microndev');
        s.linkTrackVars="prop30";
        s.prop30="sort"; 
        s.tl(this,'o','sort');
    	    
        this._sort(Event.element(event));
        this.reload();
    },

	_sort: function(img) 
	{
	    var key = this._getKey(img, 'pss_sort_');
	    var colIndex = this._getColumnIndex(this._getColumn(img));
	    var desc = (this.sort_key == key);
	    this.sort_key = key + ((desc)?' DESC':'')
    	
	    $$(this.table_css + 'img.pss_sort').each( function(i) { i.src='/images/btn_sort.gif'; i.alt='Click to Sort'; });
	 
	    if (desc) 
	    {
		  img.src = '/images/btn_sort_desc.gif';
		} 
		else 
		{
		  img.src = '/images/btn_sort_asc.gif';
		  img.alt='Click to Sort Descending';
		}
		
    	
	    var criteria = new Array;
	    var cbx = this._getComboBox(key);
	    
	    if (null != cbx && cbx.length > 0) 
	    {
		    // Sort the column by the checkbox sort
		    for (var cbxCount = 0; cbxCount < cbx.length; cbxCount++) 
		    {
			    criteria[cbxCount] = cbx[cbxCount].value;
		    }
	    }

	    for (var bodyCount=0; bodyCount < this.table.tBodies.length; bodyCount++) 
	    {
		    var tableBody = this.table.tBodies[bodyCount];

		    var newRows = new Array;
		
		    for (var rowCount=0; rowCount < tableBody.rows.length; rowCount++) 
		    {
			    newRows[rowCount] = tableBody.rows[rowCount];
		    }
    	
		    this.sort_key_index = colIndex;
		    this.sort_key_criteria = (criteria.length > 0)?criteria:null;
		    
		    newRows.sort(this._sortTableRows.bind(this));
    	
		    var fragment = document.createDocumentFragment();
		    
		    if (desc) 
		    {
			    for (var rowCount=newRows.length-1; rowCount >= 0; rowCount--) 
			    {
				    fragment.appendChild(newRows[rowCount]);
			    }
		    } 
		    else 
		    {
			    for (var rowCount=0; rowCount < newRows.length; rowCount++) 
			    {
				    fragment.appendChild(newRows[rowCount]);
			    }
		    }
		    tableBody.appendChild(fragment);
	    }
    },

    _sortTableRows: function(row1, row2) 
    {
	    var sValue1 = row1.cells[this.sort_key_index].innerHTML;
	    var sValue2 = row2.cells[this.sort_key_index].innerHTML;
	    if (sValue1 == sValue2) {
		    // Get the material values and compare.
		    var sValue1 = row1.cells[0].firstChild.value;
		    var sValue2 = row2.cells[0].firstChild.value;
		    if (sValue1 == sValue2)
			    return 0;
		    return (sValue1 < sValue2)?-1:1;
	    }
	    // Get the string values
	    if (this.sort_key_criteria) {
		    var intValue1 = 999;
		    var intValue2 = 999;
		    var colValueSep;
			
			if ($('hidValueSep'))
			{
				colValueSep = $F('hidValueSep');
    			if(sValue1.indexOf(colValueSep)>0)
	    	        sValue1 = sValue1.split("~")[1];
		        if(sValue2.indexOf(colValueSep)>0)
		            sValue2 = sValue2.split("~")[1];
		    }
			else
			{
				colValueSep ='';
			}
		    for (var criteriaCount = 0; criteriaCount < this.sort_key_criteria.length; criteriaCount++) {
			    if (sValue1 == this.sort_key_criteria[criteriaCount])
				    intValue1 = criteriaCount;
			    if (sValue2 == this.sort_key_criteria[criteriaCount])
				    intValue2 = criteriaCount;
		    }
		    if (intValue1 == intValue2) return 0;
		    return (intValue1 < intValue2)?-1:1;
	    } else {
		    if (sValue1 == sValue2) return 0;
		    return (sValue1 < sValue2)?-1:1;
	    }
    },

	popup: function(event) 
	{
        //s=s_gi('microndev');
        s.linkTrackVars="prop30";
        s.prop30="popup"; 
        s.tl(this,'o','popup');
	    var img = Event.element(event);
	    
	    var key = this._getKey(img, 'pss_filter_');
	    var popup = $('pss_popup_'+key);
	    
	    
	    if (popup) 
	    {
		    if (Element.visible(popup)) 
		    {
			    new Effect.BlindUp(popup,{duration:.2});
			    img.src = '/images/btn_filter.gif';
			    img.alt = 'Click to Filter';
		    } 
		    else 
		    {
			    new Effect.BlindDown(popup,{duration:.2});
			    img.src = '/images/btn_filter_close.gif';
			    img.alt = 'Click to Close Filter';
		    }
	    }
    },

	closeColumn: function(event) 
	{
        //s=s_gi('microndev');
        s.linkTrackVars="prop30";
        s.prop30="close column"; 
        s.tl(this,'o','close column');
        
	    var colIndex = this._getColumnIndex(this._getColumn(Event.element(event)));
	    this._closeColumn(colIndex);
	    this.reload();
    },

	_closeColumn: function(colIndex) 
	{
	    for (var i = 0; i < this.table.rows.length; i++) {
		    Element.hide(this.table.rows[i].cells[colIndex]);
	    }
    },

        moveColumn: function(element, source, event) {
        //s=s_gi('microndev');
        s.linkTrackVars="prop30";
        s.prop30="move column"; 
        s.tl(this,'o','move column');
	    var newIndex = this._getColumnIndex(this._getColumn(element));
	    var oldIndex = this._getColumnIndex(this._getColumn(source));
	    
	    if (this.table.insertBefore && newIndex != oldIndex) 
	    {
		    newIndex = Number(newIndex);
		    oldIndex = Number(oldIndex);
		    
		    if (newIndex == oldIndex - 1 || newIndex == oldIndex + 1) 
		    {
			    if (newIndex < oldIndex) 
			    {
				    var tempIndex = newIndex;
				    newIndex = oldIndex;
				    oldIndex = tempIndex;
			    }
		    }
		    
		    for (var i = 0; i < this.table.rows.length; i++) {
			    var row = this.table.rows[i];
			    row.insertBefore(row.cells[newIndex], row.cells[oldIndex]);
		    }
	    }
	    this.reload();
	    return true;
    },
    
	compare: function(event) 
	{
        //s=s_gi('microndev');
        s.linkTrackVars="prop30";
        s.prop30="compare"; 
        s.tl(this,'o','compare');
	    var img = Event.element(event);
	    var parts = document.aspnetForm.parts;
        
        if (this.comparing) 
        {
            /*if (parts) {
		        for (var count = 0; count < parts.length; count++) {
			        parts[count].checked = false;
		        }
	        }*/
	        img.src = '/images/btn_compare.gif';
	        this.comparing = false;
	        this.reload();
        } 
        else 
        {
	        var checkedCount = 0;
	    
	        if (parts) 
	        {
		        for (var count = 0; count < parts.length; count++) 
		        {
			        if (parts[count].checked) checkedCount++;
		        }
	        }
	        if (checkedCount > 1) 
	        {
		        for (var bodyCount=0; bodyCount < this.table.tBodies.length; bodyCount++) {
			        var tableBody = this.table.tBodies[bodyCount];
			        for (var rowCount=0; rowCount < tableBody.rows.length; rowCount++) {
				        // loop through rows and hide non-matching
				        var display = false;
				        if (tableBody.rows[rowCount].cells[0].firstChild.checked) {
					        display = true;
				        }
						if (display) Element.show(tableBody.rows[rowCount]);
						else Element.hide(tableBody.rows[rowCount]);
			        }
		        }
	            img.src = '/images/btn_compare_clear.gif';
	            this.comparing = true;
				this._reloadTableRows();
	        } 
	        else {	        
	            
		        new Effect.BlindDown('pss_error_no_compare');
	            new Effect.Highlight('pss_error_no_compare', {duration:5, afterFinish:function(){ new Effect.BlindUp('pss_error_no_compare'); } });
	        }
        }
    },
    
	tips: function(event) 
	{
        
        s.linkTrackVars="prop30";
    	var tips = $('pss_tips');
		if (Element.visible(tips)) 
		{
            this._closeTips();
            s.prop30="close tips"; 
            s.tl(this,'o','close tips');
        } 
        else 
        {
            this._openTips();
            s.prop30="open tips"; 
            s.tl(this,'o','open tips');
        }
    },
    
    obsolete : function(event) 
    {
        //assumption the Show Response is already defined...since that is how the original page was shown.
		var ajax = new Ajax.Updater('pss_content', '/products/_table.ashx?key=' + escape($F('hid_obs_part_name')), {method: 'get', onComplete: showResponse});
        
        s.linkTrackVars="prop30";
        s.prop30="obsolete"; 
        s.tl(this,'o','obsolete');
    },

    obsoleteRef : function(event) 
    {
        //assumption the Show Response is already defined...since that is how the original page was shown.
		var ajax = new Ajax.Updater('pss_content', '/products/_table.ashx?key=' + escape($F('hid_obsolete_ref_part_name')), {method: 'get', onComplete: showResponse});
        
        s.linkTrackVars="prop30";
        s.prop30="obsolete ref"; 
        s.tl(this,'o','obsolete ref');
    },
    
	removeFilter: function(event) 
	{

        s.linkTrackVars="prop30";
        s.prop30="remove filter"; 
        s.tl(this,'o','remove filter');

		var span = Event.element(event);
	    var val = this._getKey(span, 'pss_selections_link_').split('|');
	    var key = val[0];
	    var index = parseInt(val[1]);
	    var cbx = this._getComboBox(key);
	    
	    if (cbx) 
	    {
	        cbx[index].checked = false;
	    }
	    
	    this.reload();
    },
    
	_openTips: function() 
	{
		new Effect.BlindDown('pss_tips', {afterFinish:function(){ $('pss_product_table_tips').src='/images/btn_product_table_tips_close.gif'; }});
	    new Effect.Highlight('pss_tips', {duration:3});
	 },
    
	_closeTips: function() 
	{
		new Effect.BlindUp('pss_tips', {afterFinish:function(){ $('pss_product_table_tips').src='/images/btn_product_table_tips.gif'; }});
    },

    reset: function(event) 
    {
        s.linkTrackVars="prop30";
        s.prop30="reset"; 
        s.tl(this,'o','reset');
        // Reload the page without arguments in the querystring
        window.location = window.location.protocol + '//' + window.location.hostname + window.location.pathname;
    },

	showBookmarkableUrl: function(event) 
	{
        window.location = this.bookmark;
    },
    
	displayColumns: function(event) 
	{
		Element.hide('pss_columns');
		
        var head = this.table.tHead.rows[0];
        var list = '';
        
        for (var cellCount = 1; cellCount < head.cells.length; cellCount++) 
        {
            var key = this._getColumnKey(head.cells[cellCount]);
        
            if (key) 
            {
                var attrColName = $('pss_attr_name_' + key);
                if(attrColName)
                {
                    var attrName = attrColName.innerHTML;
                    list += '<li><input name="columns" value="' + key + '" type="checkbox"' + ((Element.visible(head.cells[cellCount]))?' checked':'') + '> ' + attrName + '</li>\n';
                }
            }
        }
        
        $('pss_column_list').innerHTML = list;
        Sortable.create('pss_column_list');

		Element.hide('pss_display');
		new Effect.BlindDown('pss_columns');

        s.linkTrackVars="prop30";
        s.prop30="display columns"; 
        s.tl(this,'o','display columns');
    },

	updateColumns: function(event) 
	{
		Element.show('loading');
		new Effect.BlindUp('pss_columns',{duration:0.1, afterFinish:this._updateColumns.bind(this)});

        s.linkTrackVars="prop30";
        s.prop30="update columns"; 
        s.tl(this,'o','update columns');
    },
	
	_updateColumns: function() 
	{
        for (var i = $('pss_column_list').childNodes.length - 1; i >= 0; i--) 
        {
            var cbx = $('pss_column_list').childNodes[i].firstChild;
            var col = $('pss_col_' + cbx.value);
            var oldIndex = 1;
            var newIndex = this._getColumnIndex(col);
        
            for (var j = 0; j < this.table.rows.length; j++) 
            {
		        var row = this.table.rows[j];
	            var cell1 = row.cells[newIndex];
	            var cell2 = row.cells[oldIndex];
	            // Before we move, set the visibility
				if (cbx.checked) Element.show(cell1);
				else Element.hide(cell1);
	            row.insertBefore(cell1, cell2);
            }
        }
        
        this.reload();
		
		Element.hide('loading');
		Element.show('pss_display');
    },

	exportExcel: function(event) 
	{
        //s=s_gi('microndev');
        s.linkTrackVars="prop30";
        s.prop30="export excel"; 
        s.tl(this,'o','export excel');
        
        var table = document.createElement("table");
        var head = document.createElement("thead");
        var row = document.createElement("tr");
        var cell = document.createElement("th");
        cell.innerHTML = 'Part';
        row.appendChild(cell);
        
        for (var cellCount = 1; cellCount < this.table.tHead.rows[0].cells.length; cellCount++) 
        {
            if (Element.visible(this.table.tHead.rows[0].cells[cellCount])) 
            {
                try
                {
                    var colKey = this._getColumnKey(this.table.tHead.rows[0].cells[cellCount]);
                    var cell = document.createElement("th");
                    cell.innerHTML = $('pss_attr_name_' + colKey).innerHTML;
                    row.appendChild(cell);
                }
                catch( err)
                {
                    continue;
                }
            }
        }
        
        head.appendChild(row);
        table.appendChild(head);
        
        
	    for (var bodyCount=0; bodyCount < this.table.tBodies.length; bodyCount++) 
	    {
	        var body = document.createElement("tbody");
		    var tableBody = this.table.tBodies[bodyCount];
		
		    for (var rowCount=0; rowCount < tableBody.rows.length; rowCount++) 
		    {
                if (Element.visible(tableBody.rows[rowCount])) 
                {
                    var row = document.createElement("tr");
                    var cell = document.createElement("td");
                    
					cell.innerHTML = tableBody.rows[rowCount].cells[0].firstChild.value;
                    row.appendChild(cell);
                
                    for (var cellCount = 1; cellCount < tableBody.rows[rowCount].cells.length; cellCount++) 
                    {
	                    if (Element.visible(tableBody.rows[rowCount].cells[cellCount])) 
	                    {
	                        var cell = document.createElement("td");
	                        var innerText = tableBody.rows[rowCount].cells[cellCount].innerHTML;
	                        cell.innerHTML = innerText.substr(innerText.toLowerCase().lastIndexOf("</div>")+6);
	                        row.appendChild(cell);
	                    }
                    }

                    head.appendChild(row);
                }
		    }
            table.appendChild(body);
	    }
        
        document.export_excel.elements[0].value=table.innerHTML;
        document.export_excel.submit();        
    },

    _getColumn: function(element) 
    {
	    while (element.parentNode != null && element.tagName && 
			    (element.tagName.toLowerCase() != 'th' && 
			     element.tagName.toLowerCase() != 'td')) 
	    {
		    element = element.parentNode;
	    }
	    
	    return element;
    },

    _getColumnIndex: function(col) {
	    var cellIndex = col.cellIndex;
	    // Loop through to get the real cell index. (IE bug)
	    var cells = col.parentNode.cells;
	    for (var i = 0; i < cells.length; i++) {
		    if (col == cells[i]) cellIndex = i;
	    }
	    return cellIndex;
    },

    _getColumnKey: function(col) 
    {
	    return this._getKey(col, 'pss_col_');
    },

    _getKey: function(element, startsWith) 
    {
        if (element && element.id && element.id.indexOf(startsWith)==0) 
        {
		    return element.id.substr(startsWith.length);
	    }
	    
	    return null;
    },

    _getComboBox: function(key) 
    {
	    if (key) 
	    {
		    return eval('document.aspnetForm.pss_checkbox_'+key);
	    }
	    
	    return null;
    }
}

function getArgs(cid) 
{
    var args = new Object();
	var query = window.location.search.substring(1);
	var pairs = query.split('&');
    var bArgs = true;

	for (var i = 0; i < pairs.length; i++) 
	{
		var pos = pairs[i].indexOf('=');
		if (pos == -1) continue;
		bArgs=false;
		var key = pairs[i].substring(0, pos);
		if(cid)
		    if(key.indexOf(cid)<0)
		        key=key+cid;
		var value = pairs[i].substring(pos + 1);
		args[key] = unescape(value);
	}
	if(bArgs)
    {
	    var cookie = readCookie(cid);
	    if(cookie)
	    {
    		var pairs = cookie.split('&');

        	for (var i = 0; i < pairs.length; i++) 
	        {
		        var pos = pairs[i].indexOf('=');
        		if (pos == -1) continue;
	        	var key = pairs[i].substring(0, pos);
		        if(cid)
		            if(key.indexOf(cid)<0)
		                key=key+cid;
        		var value = pairs[i].substring(pos + 1);
	        	args[key] = unescape(value);
    	    }
    	}
    }
	return args;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = getPageName()+name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = getPageName()+name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function getPageName()
{
    var sPath = window.location.pathname.replace(new RegExp('.aspx','gi'),'');
    var sPage = sPath.replace(new RegExp('/','gi'),'_');
    return sPage.substring(1, sPage.length);
}