//var travidiaStoreStyles = {};   

var travidiaPrintElement = {

    travidiaCollection:{},
	travidiaStoreStyles:{},
    collectElements: function (q){
			for(var i=0;i<q.length;i++){
				for(k in q[i]){
					if(k=="id" && document.getElementById(q[i][k])){
						travidiaPrintElement.travidiaCollection[i+"-tagObj_id"] = document.getElementById(q[i][k]);
					}
					else if(k=="tag"){
						var tags = document.getElementsByTagName(q[i][k]);
						var re = q[i]['regex']; //alert(re);
						var nre = q[i]['nregex']; //alert(nre);
						var newTagArray = [];
						if(q[i][k]=='img'){ //matching only images for now
							for(var j=0;j<tags.length;j++){
								//because the subs are on the page, in an invisible div, we have to check their parent
								if(tags[j].parentNode.style.visibility!='hidden'){
									if(re && (tags[j].src).match(re) && (tags[j]).style.visibility!='hidden'){
										//alert("matched "+(tags[j].src).match(re) +" to " + tags[j].src);
										newTagArray.push(tags[j].src);
										//alert(newTagArray[newTagArray.length-1]);
										if(nre && (tags[j].src).match(nre) && (tags[j]).style.visibility!='hidden'){
											//alert("neg matched "+(tags[j].src).match(nre) +" to " + tags[j].src);
											newTagArray.pop();
											//alert(newTagArray[newTagArray.length-1]);
										}							
									}
								}
							}
							//collect img tagObjects
							for(var j=0;j<newTagArray.length;j++){
								travidiaPrintElement.travidiaCollection[i+"-tagObj_img"+j] = newTagArray[j];
							}						
						} else if(q[i][k]!='img'){//match other tags here
							for(var j=0;j<tags.length;j++){
								if(re && travidiaPrintElement.getOuterHTML(tags[j]).match(re)){
									travidiaPrintElement.travidiaCollection[i+"-tagObj_tag"+j] = tags[j];
								}
							
							}
												
						}
						

					}
					else if(k=="$$"){if(typeof Prototype != 'undefined'){alert(Prototype.Version);}}
				}
			}
	},
	printAd: function (els){
			travidiaPrintElement.collectElements(els);
			var allel = document.getElementsByTagName("body")[0].getElementsByTagName("*");    
			storeObjects = {};
			//copy or clone
			for(var i=0;i<els.length;i++){
				
				for(k in travidiaPrintElement.travidiaCollection){
					if(k.split("-")[0]==i){
						if(k.indexOf('tagObj_img')==-1 && els[i]['clone']){
							if(els[i]['clone']=='deep'){
								storeObjects[k] = travidiaPrintElement.travidiaCollection[k].cloneNode(true);
							}else{
								storeObjects[k] = travidiaPrintElement.travidiaCollection[k].cloneNode(false);
							}
						} else if(k.indexOf('tagObj_img')!=-1){
							
							var newimage = document.createElement("img");
							newimage.src = travidiaPrintElement.travidiaCollection[k] + "-1000x750";
							newimage.style.margin = "0 auto";
							storeObjects[k] = newimage;
						}
					}
				}
			
			}			
			
			for(var i=0;i<allel.length;i++){
                              if(!allel[i].style){
                                    travidiaPrintElement.travidiaStoreStyles[i] = "nostyle";
                              } else if(allel[i].style.display) {
                                    travidiaPrintElement.travidiaStoreStyles[i] = allel[i].style.display ;
                              } else {travidiaPrintElement.travidiaStoreStyles[i] = "nodisplaystyle";}
                              allel[i].style.display = "none";                
            }

			travidiaPrintElement.travidiaStoreStyles['bgstyle'] = document.getElementsByTagName("body")[0].style.background;
			travidiaPrintElement.travidiaStoreStyles['bgimgstyle'] = document.getElementsByTagName("body")[0].style.backgroundImage;
			travidiaPrintElement.travidiaStoreStyles['bgcolstyle'] = document.getElementsByTagName("body")[0].style.backgroundColor;

			document.getElementsByTagName("body")[0].style.background = "none";
		    document.getElementsByTagName("body")[0].style.backgroundColor = "#ffffff";
			
			travidiaPrintElement.travidiaStoreStyles['htmlstyle'] = document.getElementsByTagName("html")[0].style.background;
			travidiaPrintElement.travidiaStoreStyles['htmlimgstyle'] = document.getElementsByTagName("html")[0].style.backgroundImage;
			travidiaPrintElement.travidiaStoreStyles['htmlcolstyle'] = document.getElementsByTagName("html")[0].style.backgroundColor;
						
			document.getElementsByTagName("html")[0].style.background = "none";	
			document.getElementsByTagName("html")[0].style.backgroundColor = "#ffffff";			
			
                  //create the wrapping div for all elements
				  var printwrapper = document.createElement("div");
				  printwrapper.id = "printwrapper";
				  
				  //create the div to hold the 'print ad' and 'return to ads' links
                  var printlinks = document.createElement("div");
                  printlinks.id = "printlinkwrapper";

                  //create the link to return to ads
                  var returnlink = document.createElement("a");
                  returnlink.style.cursor = "pointer";
                  returnlink.id = "returntoads";
                  returnlink.onclick = function(){travidiaPrintElement.restoreAd();};
                  returnlink.appendChild(document.createTextNode("Return to Previous View"));

                  //create the link to print the ad
                  var plink = document.createElement("a");
                  plink.style.cursor = "pointer";
                  plink.style.float = "left";
                  plink.id = "plink";
                  plink.onclick = function(){print();};
                  plink.appendChild(document.createTextNode("Print this Item"));     
                  printlinks.appendChild(plink);
                  printlinks.appendChild(returnlink);                 

                  printwrapper.appendChild(printlinks);				
			
			
			//append the collected objects
			for(i in storeObjects){
				printwrapper.appendChild(storeObjects[i]);
			}		
			document.getElementsByTagName("body")[0].appendChild(printwrapper);
			
			return;
			
			
            
   
      },
      
      restoreAd: function() {
                        //clean up the new elements
                var allel = document.getElementsByTagName("body")[0].getElementsByTagName("*");                       
                  //document.getElementsByTagName("body")[0].removeChild(document.getElementById('printlinkwrapper'));
                  document.getElementsByTagName("body")[0].removeChild(document.getElementsByTagName("body")[0].lastChild);

                  for(var i=0;i<allel.length;i++){
                              if(travidiaPrintElement.travidiaStoreStyles[i] == "nostyle"){
                                    allel[i].removeAttribute("style");
                              } else if(travidiaPrintElement.travidiaStoreStyles[i] == "nodisplaystyle") {
                                    allel[i].style.display = "";
                              } else {allel[i].style.display = travidiaPrintElement.travidiaStoreStyles[i];}
                  }
                //restore background to body, html -- IE needs the image and color explicitly
                document.getElementsByTagName("body")[0].style.background = travidiaPrintElement.travidiaStoreStyles['bgstyle'];
                document.getElementsByTagName("html")[0].style.background = travidiaPrintElement.travidiaStoreStyles['htmlstyle'];
                document.getElementsByTagName("body")[0].style.backgroundImage = travidiaPrintElement.travidiaStoreStyles['bgimgstyle'];
                document.getElementsByTagName("html")[0].style.backgroundImage = travidiaPrintElement.travidiaStoreStyles['htmlimgstyle'];
                document.getElementsByTagName("body")[0].style.backgroundColor = travidiaPrintElement.travidiaStoreStyles['bgcolstyle'];
                document.getElementsByTagName("html")[0].style.backgroundColor = travidiaPrintElement.travidiaStoreStyles['htmlcolstyle'];
      },
	  getOuterHTML: function(node){
				if(node.outerHTML){return node.outerHTML;}
				else{
				var emptyElements = {
					HR: true, BR: true, IMG: true, INPUT: true
				};
				var specialElements = {
				  TEXTAREA: true
				};
			  var html = '';
			  switch (node.nodeType) {
			    case Node.ELEMENT_NODE:
			      html += '<';
			      html += node.nodeName;
			      if (!specialElements[node.nodeName]) {
			        for (var a = 0; a < node.attributes.length; a++)
			          html += ' ' + node.attributes[a].nodeName.toUpperCase() +
			                  '="' + node.attributes[a].nodeValue + '"';
			        html += '>';
			        if (!emptyElements[node.nodeName]) {
			          html += node.innerHTML;
			          html += '<\/' + node.nodeName + '>';
			        }
			      }
			      else switch (node.nodeName) {
			        case 'TEXTAREA':
			          for (var a = 0; a < node.attributes.length; a++)
			            if (node.attributes[a].nodeName.toLowerCase() != 'value')
			              html += ' ' + node.attributes[a].nodeName.toUpperCase() +
			                      '="' + node.attributes[a].nodeValue + '"';
			            else
			              var content = node.attributes[a].nodeValue;
			          html += '>';
			          html += content;
			          html += '<\/' + node.nodeName + '>';
			          break;
			      }
			      break;
			    case Node.TEXT_NODE:
			      html += node.nodeValue;
			      break;
			    case Node.COMMENT_NODE:
			      html += '<!' + '--' + node.nodeValue + '--' + '>';
			      break;
			  }
			  return html;
			  }
			}

}      
      


