/**
*
* ANIMATED CARDS PREV NEXT 
* IMPLEMENTATION OF THE AJAX CLASS/TOOLKIT  [ajax_api.js]

* Implementing AJAX ToolKit
*
*/

/* GLOBAL VARIABLES */
var _nDataArray = new Array();
var _nObjArray = new Array();
var _nFormFieldNames = new Array('quick','flloader','bigimagetype','musstr','newbgpath','html_file','embedmusic','newmuspath','music','mus_exclusive','bg','tcolor','tface','tsize','step','Backurl','fla','q1','image','blue_bar','blue_url','redline','greenline','activex_fix','title','message','bg1','flash_details','label','tsize_ori','tcolor_ori');
var _nPointer = 0; // points to _nDataArray
var _nCurrent = -1; //  adjusts according to position/ position index
var recInPage = 8; // there are 8 records per XML page
var _loading = false; 
var _isPreloaded = false;
var _pageToRead = ''; 
var _nextPageToRead = '';
var _previewImages = new Array();
var _ImageServerPath = 'http://img.123greetings.com/';
var _thumbPath = _ImageServerPath + 'thumbs/';
var _newImagePath = _ImageServerPath + 'eventsnew/';
var showPopUp = false; // preview pop-up flag


/*
*
* Get card poisition in the card category
*
*/
function getPosition() {
	return position;
}


/*
* sets the XML page to read
*
*/
function setXMLpage() {
	var pos;	
	var pageNum = 0;
	
	if (_nCurrent == 0) {
		pos = parseInt(getPosition());
		_nCurrent = pos + 1;
	}else {
	    pos = _nCurrent;
		_nPointer = 0;
	}	
	
	// get the page number
	pageNum = Math.ceil(pos/recInPage);	

	// set current index
	_nPointer = recInPage * (pageNum - 1);
	
	// set current page to read
	_pageToRead = 'page' + pageNum + '.xml';

	// check whether there is a new page or not
	if (_pageToRead != _nextPageToRead) {
	    _nextPageToRead = _pageToRead;
		main(true);
	}else {
	    main(false);
	}		 
}

/*
* Function when called displays a dynamically created div with loading message.
*/
function show_loading(){	
	//show loading message text
	if (!_loading) {
		var oDiv = document.createElement('div');
		oDiv.setAttribute('id','loading');
		oDiv.id = 'loading';
		oDiv.style.position = 'absolute';
		oDiv.style.zIndex = '50';		
		oDiv.style.top = 0 + parseInt(document.body.scrollTop); // add top scroll amount		
		oDiv.style.right = 0;
		oDiv.style.height = 15;
		oDiv.style.width = 80;
		oDiv.style.backgroundColor = '#00A8F9';
		oDiv.style.textAlign = 'center';
		oDiv.style.fontFamily = 'verdana, Geneva, Helvetica';
		oDiv.style.fontWeight = 'normal';
		oDiv.style.fontSize = '10';
		oDiv.style.color = '#FFFFFF';
		oDiv.style.borderBottom = 'ridge';		
		oDiv.style.borderLeft = 'ridge';
		oDiv.style.borderColor = '#DBDBDB';
		oDiv.style.borderWidth = 1;
		oDiv.style.visibility = 'visible';
		oDiv.appendChild(document.createTextNode("Loading...."));		
		document.body.insertBefore(oDiv, document.body.childNodes[0]);
		_loading = true;
	}
}
	

/*
*
* Function used to hide the loading message
*
*/
function hide_loading() {		
	// code to hide loading message	
	if (_loading) {	
		document.body.removeChild(document.getElementById('loading'));
		_loading = false;
	}	
}


/*
* function to store data into the array
*/
function insert_to_array(strHtml, pointer) {	
	// code to insert into array
	_nDataArray[pointer] = strHtml;
}


/*
* parse xml nodes from response and builds the html string
*/
function parseXML() {
	// code to parse xml	
	var elmName = 'ecard';
	var xmlDoc = arguments[0].documentElement;	

	if (xmlDoc.hasChildNodes()) {
		xmlElemArray = xmlDoc.getElementsByTagName(elmName);
		xmlElem = xmlElemArray[0];
		for (var j = 0; j < xmlElemArray.length; j++) {			
			xmlElem = xmlElemArray[j];
			var formData = parseXnode(xmlElem);			
			_nObjArray[_nPointer] = formData; //_nPointer index
			
			// stores images in preview array
			_previewImages[_nPointer] = _thumbPath + formData["image"] + '#' + formData["redline"] + '#' + formData["greenline"] + '#' + formData["label"];
			
			//change the form data
			write_form_data();			
			//change extra details
			change_extras();
			// hide loading message
			hide_loading();
			
			_nPointer++; // increment pointer
		}
		// set preview images function
		setPreviewImages(_nCurrent);
	}	
}

// convert an XML element into a JavaScript object
function parseXnode(docElem) {		
	var objArray = [];	
	var JSON = traverse(objArray, docElem);	
	
	//alert(JSON);
	// convert JSON Text String into JSON Object
	JSON = eval('(' + JSON + ')');	

	
	// get some values to perform some other calculation
	var newImagePath = JSON['newimagepath'];
	var flash_detail = JSON['flash_details'];	
	var pTitle = JSON['title'];
	var pImage = JSON['image'];
	var fcolor = JSON['tcolor'];
	var fface = JSON['tface'];
	var fsize = JSON['tsize'];
	var mp3;

	if (JSON['flloader']) {
		JSON['flloader'] = unescape(JSON['flloader']);
	}

	if (typeof(JSON['mp3']) != 'undefined') {
	    mp3 = JSON['mp3'];
	}else {
	    mp3 = '';
	}
	
	// get dyna loader
	var dyna_loader = JSON['flloader'];	
	
	pBg = JSON['bg_path'];

	pImage = (newImagePath == '') ? _newImagePath + pImage : newImagePath + pImage;	
	
	flash_detail =  (flash_detail == '') ? pImage : _ImageServerPath + flash_detail;
	
	
	// creat image array to preload
	var imgArr = [];
	imgArr[0] = pBg;
	imgArr[1] = pImage;
	//preload image
	handle_img_preload(imgArr);

	//build the HTML string
	build_Html(pBg, flash_detail, mp3, dyna_loader, pTitle, fcolor, fface, fsize);
	
	// return JSON object
	return JSON;	
}

/* extract XML node values */
function traverse(obj, node) {
	var p;
	var JSONobj = ['{'];
	if (node.childNodes.length > 0) {			
		for (var i = 0; i < node.childNodes.length; i++) {				
			
			if (node.childNodes[i].nodeType == 1 && node.childNodes[i].firstChild) {					
				// If node has only one child
				// set the obj property to the value of the node
				if(node.childNodes[i].childNodes.length == 1) {					
					obj[node.childNodes[i].tagName] = node.childNodes[i].firstChild.nodeValue;
					//alert(node.childNodes[i].tagName + '--' + node.childNodes[i].firstChild.nodeValue);
					// create JSON object
					if(p) JSONobj[JSONobj.length] = ',';
					// a special check for midfile_list tag in XML
					if (node.childNodes[i].tagName == 'midfile_list') {
						JSONobj.push(stringify(node.childNodes[i].tagName),':','[' + node.childNodes[i].firstChild.nodeValue + ']');
					}else{
						JSONobj.push(stringify(node.childNodes[i].tagName),':',stringify(node.childNodes[i].firstChild.nodeValue));
					}
					p = true;
				}
				// Otherwise this obj property is an array
				// Recurse to set its multiple properties
				else {					
					obj[node.childNodes[i].tagName] = [];
					// Call recursively -- rinse and repeat
					// ==============
					traverse(obj[node.childNodes[i].tagName], node.childNodes[i]);
				}
			}else {
					// code to handle empty tags
					// in this case it creates one JSON variable with empty value
				     if(typeof(node.childNodes[i].tagName) != 'undefined') {
						 //alert(node.childNodes[i].tagName);
						 if(p) JSONobj[JSONobj.length] = ',';						 
						 JSONobj.push(stringify(node.childNodes[i].tagName),':',stringify('')); 						 
						 p = true;
					 }
			}
		}
	}
	// return JSON string
	JSONobj[JSONobj.length] = '}';
	return JSONobj.join('');
}



/* stringify a JSON object */
function stringify(str) {
	//escape double quote
	var regex = /\"/g;
	if (regex.test(str)) {
	    str = str.replace(regex, '\\"');		
	}	
	return '"' + String(str) + '"';
}



/*
* Initialize AJAX object
*
*/
function initAJAX(pageURL, params, response_type, req_method, callback) {
	var aJax = new AJAX();	
	aJax.init('true',req_method,response_type,pageURL,params,callback);	
	aJax = null;
}

/*
* build html string
* @param bgImage			string		background image path
* @param flash_detail		string		Card details (path, type and others)
* @param title				string		card title
* Other params are self-explanatory
*/
function build_Html(bgImage, flash_detail, mp3, dyna_loader, title, font_color, font_face, font_size) {
	// code to build html	
	var strHtml = new Array();
	strHtml.push('<table border=0 cellspacing=0 cellpadding=0 width="88%"><tr><td align=CENTER><table width=100% cellspacing=0 cellpadding=0 border=0><tr><td align=center>');
	strHtml.push('<table border=0 width="100%" cellspacing=5 cellpadding=0 background="' + bgImage + '" id=td1><tr>');
	strHtml.push('<td><font id=drfrnd color=238E23 face="Comic Sans Ms" size=5></font><center><br><br><br><br>');
	
	// check whether the card is Flash/Animated	
	var f_dtl = flash_detail.split("#");
	
	// add mp3 value to the URL
	if (mp3 != '' && mp3.length > 0) {
	    f_dtl[0] = f_dtl[0] + '&mp3=' + mp3;
	}

	fLen = f_dtl.length;// get the length of the splited array		
	
	switch(fLen) {
		case 2:	// Old Click Cards
			strHtml.push('<a name="img0"><img src="' + f_dtl[0] + '" alt=""></a>');
			strHtml.push('<br><a href="#img1"><img src="http://img.123greetings.com/images/click.gif" border=0 alt="click"></a>');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<a name="img1"><img src="' + _ImageServerPath + f_dtl[1] + '" alt=""></a>');
			break;
		case 3:	// Flash Cards
			if (dyna_loader != '' && dyna_loader.length > 0) {
			    f_dtl[0] = dyna_loader + ((mp3 != '' && mp3.length > 0) ? '&mp3=' + mp3 :'');
				//alert(f_dtl[0]);
			}

			strHtml.push('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=' + f_dtl[1] + ' HEIGHT=' + f_dtl[2] + ' id="sw_mv"><PARAM NAME=movie VALUE="' + f_dtl[0] + '"> <PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE="transparent"><PARAM NAME=bgcolor VALUE=""><PARAM NAME=menu VALUE=false><EMBED id="sw_mv" src="' + f_dtl[0] + '" quality=high WIDTH=' + f_dtl[1] + ' HEIGHT=' + f_dtl[2] + ' bgcolor="" menu=false wmode=Transparent TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed></object>');			
			strHtml.push('<br><font face=arial color=' + font_color + ' size=2>');
			strHtml.push('Can\'t view this greeting? <a href="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">');
			strHtml.push('<font color=' + font_color + ' size=2>Download Flash Player !</font></a></font><br>');
			//alert(strHtml.join(''));
			break;

		case 4:	// Click Cards
			strHtml.push('<map name="dollar">');
			strHtml.push('<area shape="' + f_dtl[2] + '" coords="' + f_dtl[3] + '" href="#img1" ></map>');
			strHtml.push('<img border="0" src="' + f_dtl[0] + '" usemap="#dollar">');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p> ');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<a name="img1"><img border="0" src="' + _ImageServerPath + f_dtl[1] + '"></a>');
			break;
		case 7: // 3 part click cards
			strHtml.push('<map name="FPMap0">');
			strHtml.push('<area href="#img1" shape="' + f_dtl[2] + '" coords="' + f_dtl[3] + '">');
			strHtml.push('</map><img border="0" src="' + f_dtl[0] + '" usemap="#FPMap0" >');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<p><map name="FPMap1">');
			strHtml.push('<area href="#img2" shape="' + f_dtl[5] + '" coords="' + f_dtl[6] + '"></map>');
			strHtml.push('<A name=img1></A><img border="0" src="' + _ImageServerPath + f_dtl[1] + '" usemap="#FPMap1" ></p>');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;');
			strHtml.push('<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>&nbsp;<p>');
			strHtml.push('<A name=img2></A><img border="0" src="' + _ImageServerPath + f_dtl[4] + '" ></p>');
			break;
		default:	// others
			strHtml.push('<br><br><br>');
			strHtml.push('<img src="' + flash_detail + '">');
	}
	
	strHtml.push('<br><br><font id=msg color="#' + font_color + '" face="' + font_face + '" size=' + font_size + '>');
	strHtml.push('Your message will appear here.<br>Feel free to express yourself in as many words as you like.</font></center>');
	strHtml.push('<p align=right><font id=luvadm color=' + font_color + ' face="' + font_face + '" size=' + font_size + '></font><br><br></td></tr></table></td></tr>');
	// add message for Flash Object activex compatibility
	if(fLen == 3) {
		strHtml.push('<tr><TD align=center bgcolor=FFFFCC style="font-family:verdana;font-size: 11px;background-color:#FFFFE6;border:1px solid black;padding:2px;"><img src="http://img.123greetings.com/images/information.gif" width=17 height=16 align=absmiddle border=0><A href="javascript:activex_compat();" style="text-decoration:none;color:black;"> We are currently testing a new browser feature. If you are not able to view this ecard. Please click here to view in its original format</A></TD></tr>');
	}
	strHtml.push('</table></td><td width=5 rowspan=2 valign=TOP bgcolor=cccccc><img src=http://img.123greetings.com/images/space.jpg width=5 height=5 align=BOTTOM border=0></td></tr>');
	strHtml.push('<tr><td bgcolor=cccccc><img src=http://img.123greetings.com/images/space.jpg width=5 height=5 align=BOTTOM border=0></td></tr></table>');

	//insert string into array index denoted by _nPointer
	insert_to_array(strHtml.join(''), _nPointer);
	//write to page
	write_html(strHtml.join(''));
}

/* writes HTML to page */
function write_html() {
	//get card position according to array position	
	if (_nPointer == (_nCurrent - 1)) {
		// delete embed object if any
		if (document.getElementById('container')) {
			var cont = document.getElementById('container');
			while (cont.hasChildNodes()) {
				cont.removeChild(cont.childNodes[0]);	
			}			
			cont = null;
		}		
	    document.getElementById('container').innerHTML = arguments[0];		
	}
}

/*
* function to embed sound in page if available
*
* Read it carefully it has become buggy and full of redundant code
* I didn't find time to make it clean, hope I'll do it later
*/

function embedSound(pointer) {
	// code to embed sound
	//var midfile = document.getElementById('music').value;		
	//now check for drop down box and others
	var embedmusic = _nObjArray[pointer]['embedmusic'];
	var mus_exclusive = _nObjArray[pointer]['mus_exclusive'];
	var music = _nObjArray[pointer]['music'];	

	// if there is any bgsound then remove it
	var arr = document.getElementsByTagName('bgsound');	
	if (arr.length > 0) {		
		var node = arr[0];
		node.parentNode.removeChild(node);		
	}
	// if there is any bgsound then remove it
	var arr = document.getElementsByTagName('embed');	
	if (arr.length > 0) {	
		for (var i=0; i < arr.length; i++ ) {
			var node = arr[i];
			if(isIE()) {
				node.src = '';
				try {
					node.stop();    
				}
				catch (e){
					try {
					    node.doStop();
					}
					catch (e){}
				}				
				node.parentNode.removeChild(node);
			}						
		}		
	}
	
	
	// check			
	if ((mus_exclusive == '' || mus_exclusive == 0) && music == '' && embedmusic == 'yes') {
		
		// field is hidden no drop down, FLASH card 
		// delete the drop down if present
		if (document.getElementById('music_box')) {
			document.getElementById('music_box').innerHTML = '';
		}
		if (document.getElementById('music_cont')) {
			// remove music control
			while (document.getElementById('music_cont').hasChildNodes()) {
				document.getElementById('music_cont').removeChild(document.getElementById('music_cont').childNodes[0]);
			}
			document.getElementById('music_cont').innerHTML = '';
		}
		if (document.getElementById('music')) {
			// delete the element
			document.getElementById('music').parentNode.removeChild(document.getElementById('music'));
		}		
	}else if (mus_exclusive == 1 && music == '') {
		
		if (document.getElementById('music_box')) {
			document.getElementById('music_box').innerHTML = '';
		}
		if (document.getElementById('music_cont')) {
			// remove music control
			while (document.getElementById('music_cont').hasChildNodes()) {
				document.getElementById('music_cont').removeChild(document.getElementById('music_cont').childNodes[0]);
			}
			document.getElementById('music_cont').innerHTML = '';
		}
		if (document.getElementById('music')) {
			// delete the element
			document.getElementById('music').parentNode.removeChild(document.getElementById('music'));
		}
		var html = '<input type="hidden" name="music" id="music" value="">';
		document.getElementById('dummyspan').innerHTML += html;		
	
	}else if (mus_exclusive == 1 && music != '') {
		//var sImage = new Image(5,5);
		//sImage.src = music;

		// field is hidden no drop down, POSTCARD or CLICK cards, embeded sound
		var html = '<input type="hidden" name="music" id="music" value="' + music + '">';
		
		try {
		    if (document.cFORM.music.parentNode != null && typeof(document.cFORM.music.parentNode) != 'undefined') {
				document.cFORM.music.parentNode.removeChild(document.cFORM.music);
			}
		}
		catch (e){}
		
		if (document.getElementById('music_cont')) {
			// remove element if any
			while (document.getElementById('music_cont').hasChildNodes()) {
				document.getElementById('music_cont').removeChild(document.getElementById('music_cont').childNodes[0]);
			}
		}
		if (document.getElementById('music')) {
			// delete the element first
			document.getElementById('music').parentNode.removeChild(document.getElementById('music'));
			document.getElementById('dummyspan').innerHTML += html;
			// write control in the page
			var str2write = '';
			str2write = '<BR><EMBED id="mPlayer" SRC="' + _ImageServerPath + music + '" WIDTH=120 HEIGHT=45 AUTOSTART=true LOOP=true HIDDEN=false TYPE="' + getMimeType() + '" MASTERSOUND>';		
			str2write += '<br><font face=verdana size=1 color=000080>Can\'t hear the music? <a href="javascript:;" onClick="window.open(\'/tips/listen_to_music.html\', \'Greetings7\',\'width=500,height=225,scrollbars=0,left=150,top=80\')">Click here</a></font>';
			
			if (document.getElementById('music_cont')) {				
				document.getElementById('music_cont').innerHTML = str2write;
				try {
					document.getElementById('mPlayer').stop();
				}catch (e){
					try {
					    document.getElementById('mPlayer').doStop();
					}
					catch (e){}				
				}			
			}
			
			window.setTimeout(function () {
				try{
					document.getElementById('mPlayer').play();
				}catch(e){
					try {
					    document.getElementById('mPlayer').doPlay();
					}
					catch (e){}	
				}
			},200);			
			
		}else {			
			document.getElementById('dummyspan').innerHTML += html;

			if (document.getElementById('music_cont')) {
				while (document.getElementById('music_cont').hasChildNodes()) {
					document.getElementById('music_cont').removeChild(document.getElementById('music_cont').childNodes[0]);
				}				
			}

			// write control in the page
			var str2write = '';
			str2write = '<BR><EMBED id="mPlayer" SRC="' + _ImageServerPath + music + '" WIDTH=120 HEIGHT=45 AUTOSTART=true LOOP=true HIDDEN=false TYPE="' + getMimeType() + '" MASTERSOUND>';		
			str2write += '<br><font face=verdana size=1 color=000080>Can\'t hear the music? <a href="javascript:;" onClick="window.open(\'/tips/listen_to_music.html\', \'Greetings7\',\'width=500,height=225,scrollbars=0,left=150,top=80\')">Click here</a></font>';
			
			if (document.getElementById('music_cont')) {			
				document.getElementById('music_cont').innerHTML = str2write;
				try {
					document.getElementById('mPlayer').stop();
				}catch (e){
					try {
					    document.getElementById('mPlayer').doStop();
					}
					catch (e){}					
				}			
			}
			
			window.setTimeout(function () {
				try{
					document.getElementById('mPlayer').play();
				}catch(e){
					try {
					    document.getElementById('mPlayer').doPlay();
					}
					catch (e){}					
				}
			},200);
		}

	}else if ((mus_exclusive == '' || mus_exclusive == 0) && music == '' && embedmusic == '') {
		
		// field is select box drop down
		document.getElementById('music_cont').innerHTML = '';
		
		// first remove the hidden form field
		if (document.getElementById('music')) {
			// delete the element
			document.getElementById('music').parentNode.removeChild(document.getElementById('music'));
		}
		if (document.getElementById('music_cont')) {
			while (document.getElementById('music_cont').hasChildNodes()) {
				document.getElementById('music_cont').removeChild(document.getElementById('music_cont').childNodes[0]);
			}			
		}
		
		// now create the drop down
		var len = _nObjArray[pointer]['midfile_list'].length;
		var music_list = _nObjArray[pointer]['midfile_list'];
		// get the music name that is to be selected
		var music_selected = _nObjArray[pointer]['music_selected'];

		var musicbox_html = new Array();
		musicbox_html.push('<table border=0 width=100% cellspacing=0 cellpadding=3><tr>');
		musicbox_html.push('<td width=70% bordercolor=E6E6FF bgcolor=E6E6FF>');
		musicbox_html.push('<b><font face=Verdana size=2 color=000080>Music</font></b> &nbsp; ');
		musicbox_html.push('<font face=verdana size=1 color=000080>[ <a href="javascript:;" ');
		musicbox_html.push("onClick=\"window.open('/tips/remove_music.html', 'Greetings8','width=500,height=260,scrollbars=0,left=150,top=80')\">");
		musicbox_html.push('<font color=000080>What is this?</font></a> ]</font></td></tr><tr><td width=100% valign=top>');
		musicbox_html.push('<select name=music id="music" onChange="ChangeMusic();">');
		
		// insert data to select box
		for (var x = 0; x < len; x++ ) {
			musicbox_html.push('<option value="' + music_list[x].value + '"' + ((music_list[x].value == music_selected)? 'selected' : '') + '>' + music_list[x].caption + '</option>');	
		}
		musicbox_html.push('</select></td></tr></table>');

		document.getElementById('music_box').innerHTML = musicbox_html.join('');
		
		musicbox_html = null // destroy object

		// now insert the embed tag
		var str2write = '';
		str2write = '<BR><EMBED id="mPlayer" SRC="' + _ImageServerPath + music_selected + '" WIDTH=120 HEIGHT=45 AUTOSTART=true LOOP=true HIDDEN=false TYPE="' + getMimeType() + '">';		
		str2write += '<br><font face=verdana size=1 color=000080>Can\'t hear the music? <a href="javascript:;" onClick="window.open(\'/tips/listen_to_music.html\', \'Greetings7\',\'width=500,height=225,scrollbars=0,left=150,top=80\')">Click here</a></font>';

		if (document.getElementById('music_cont')) {			
			document.getElementById('music_cont').innerHTML = str2write;
			try {
			    document.getElementById('mPlayer').stop();
			}
			catch (e){
				try {
					    document.getElementById('mPlayer').doStop();
				}catch (e){}	
			}			
		}

		window.setTimeout(function () {
			try{
				document.getElementById('mPlayer').play();
			}catch(e){
				try {
					    document.getElementById('mPlayer').doPlay();
				}catch (e){}	
			}
		},200);

		str2write = null;
	}else {
		if (document.getElementById('music_cont')) {
			while (document.getElementById('music_cont').hasChildNodes()) {
				document.getElementById('music_cont').removeChild(document.getElementById('music_cont').childNodes[0]);
			}
			document.getElementById('music_cont').innerHTML = '';
		}
		if (document.getElementById('music')) {
			document.getElementById('music').parentNode.removeChild(document.getElementById('music'));
		}
		var html = '<input type="hidden" name="music" id="music" value="">';
		document.getElementById('dummyspan').innerHTML += html;			
	}		
	
}




/*
* get the mime-type
*/
function getMimeType(){
	var  mimeType = "application/x-mplayer2"; //default	
	var agt = navigator.userAgent.toLowerCase();
	var is_mac = (agt.indexOf("mac")!=-1);

	with (navigator){
		if (mimeTypes && !(agt.indexOf("windows")!=-1 && agt.indexOf("windows 3.1")==-1)) {
		 //non-IE, no Windows
			var plugin = mimeTypes["audio/mpeg"].enabledPlugin;			
			if (plugin) mimeType = "audio/mpeg"	 //mac/Safari mimeType = "audio/mpeg"
			else {
				plugin = mimeTypes["audio/mpeg-url"].enabledPlugin;				
				if (plugin) mimeType = "audio/mpeg-url" // non-IE 2nd favorite (Linux/FF) 
			}			
		}//end no-Windows 
	}//end with (navigator)	
	//alert(mimeType);
	return mimeType;
}


/*
*
* function change form values from the _nFormDataObj object
*
*/
function write_form_data() {

	if (_nPointer == (_nCurrent - 1)) {
		// code to write form data	
		var fObj = _nObjArray[_nPointer];
		
		var len2 = _nFormFieldNames.length;
		var fname = '';
		var obj;
		var objName='';
		var form_obj = document.cFORM;
		
		// check for 'special' named form tag, likely value 'PC'
		if (typeof(_nObjArray[_nPointer]['special']) != 'undefined') {	
			if (document.getElementById('dummyspan')) {	
				try {
					form_obj['special'].parentNode.removeChild(form_obj['special']);					
				}catch (e){}

				try {
				    document.getElementById('special').parentNode.removeChild(document.getElementById('special'));
				}
				catch (e){}
				 
				var html = '<input type="hidden" name="special" id="special" value="' + _nObjArray[_nPointer]['special'] + '">';
				document.getElementById('dummyspan').innerHTML += html;				
			}			
		}else {				
			//remove element
			try {
				form_obj['special'].parentNode.removeChild(form_obj['special']);
			}
			catch (e){}
			
			try {
				document.getElementById('special').parentNode.removeChild(document.getElementById('special'));
			}
			catch (e){}				
		}

		// check for 'MP3' named form tag, likely value mp3 file name
		if (typeof(_nObjArray[_nPointer]['mp3']) != 'undefined') {	
			if (document.getElementById('dummyspan')) {	
				try {
					form_obj['mp3'].parentNode.removeChild(form_obj['mp3']);					
				}catch (e){}

				try {
				    document.getElementById('mp3').parentNode.removeChild(document.getElementById('mp3'));
				}
				catch (e){}
				 
				var html = '<input type="hidden" name="mp3" id="mp3" value="' + _nObjArray[_nPointer]['mp3'] + '">';
				document.getElementById('dummyspan').innerHTML += html;				
			}			
		}else {				
			//remove element
			try {
				form_obj['mp3'].parentNode.removeChild(form_obj['mp3']);
			}
			catch (e){}
			
			try {
				document.getElementById('mp3').parentNode.removeChild(document.getElementById('mp3'));
			}
			catch (e){}				
		}
		

		for (var i=0; i < len2; i++) {	
			fname = _nFormFieldNames[i];	
			if (fname != 'music') {
				//if form field doesn't exist then create it
				if (typeof(form_obj[fname]) != 'undefined') {				
					obj = form_obj[fname]; //eval("document.cFORM."+fname);				
				}else {					
					var html = '<input type="hidden" id="' + fname + '" value="' + fObj[fname] + '" name="' + fname + '">';						
					
					if (document.getElementById('dummyspan')) {					
						document.getElementById('dummyspan').innerHTML += html;					
						// get field object					
						obj = document.getElementById(fname);					
					}				
				}
				
				//alert(fname);
				objName = fObj[fname];
				
				// replace http://img.123greetings.com
				if (fname == 'flloader' && objName != '') {
				    objName = objName.replace(/http:\/\/img.123greetings.com/gi,'')
				}

				if (typeof(obj.length) != 'undefined' && obj.length > 0) {								
					var elemArr = obj;
					var len = elemArr.length;				
					for (var j = 0; j < len; j++ ) {					
						if (elemArr[j].checked == true && elemArr[j].type != 'button') {								
							elemArr[j].value = objName;								
						}
					}					
				}else {
					obj.value = (typeof(objName) == 'undefined' || objName == 'undefined') ? "": objName;					
				}
				obj = null;
			}			
		}
		obj = null; // prevent memory leak
		fObj = null; // prevent memory leak
		// call sound embed if available
		embedSound(_nPointer);
	}
}



/* check user agent */
function isIE() {	
	if(navigator.userAgent.indexOf("MSIE") > -1 && ! window.opera){
		return true;
	}else {
	    return false;
	}
}

/*
* function to handle image preloading
*/
function handle_img_preload(imgArr) {	
	// code to handle image preloading
	_isPreloaded = false;
	var img = new ImagePreloader(imgArr, imgPreloadCallback);
}

/*
* funciton to handle image preload callbacking
*/
function imgPreloadCallback() {
	_isPreloaded = true;	
}

/*
*
* function to change title and navbar links and text
*
*/
function change_extras() {
	if (_nPointer == (_nCurrent - 1)) {
		// change title from Bread-Crumb
		document.getElementById('bread_crumb').innerHTML = document.cFORM.redline.value;
		//change page title
		document.title = document.cFORM.title.value;

		//document	
		document['bg1'].src = _nObjArray[_nPointer]['bg_path'];
		
		document.getElementById('b1').checked = true;
		document.getElementById('fcl0').checked = true;
		document.getElementById('fn1').checked = true;
		document.getElementById('sz3').checked = true;
		
		// change background color
		document.getElementById('tcolor1').style.backgroundColor = '#' + document.getElementById('fcl0').value;	

		// change value of the predefined variables
		/*
		var background="";
		var fontcolor="";
		var fontface="";
		var fontsz=5;
		*/
		
		background = _nObjArray[_nPointer]['bg_path'];
		fontcolor = _nObjArray[_nPointer]['tcolor'];
		fontface = _nObjArray[_nPointer]['tface'];
		fontsz = _nObjArray[_nPointer]['tsize'];
		
		// change copyright notice
		var copyright = _nObjArray[_nPointer]['music_copyright'];	
		
		if (copyright != '' && document.getElementById('copyright')) {
			var arr = copyright.split('#');
			document.getElementById('copyright').innerHTML = 'Music sequenced by <a href="' + arr[1] + '">' + arr[0] + '</a>.';			
			arr = null; // destroy
		}else if (copyright == '' && document.getElementById('copyright')) {
		    document.getElementById('copyright').innerHTML = copyright;
		}
		// reload last card viewed iframe
		reload_last_card();		
	}
} 

// reloads the last card viewed iframe
function reload_last_card() {	
	var text = _nObjArray[_nCurrent-1]['redline'] ? _nObjArray[_nCurrent-1]['redline'] : '';
	var link = _nObjArray[_nCurrent-1]['thumblink'] ? _nObjArray[_nCurrent-1]['thumblink'] : '';
	var image = _nObjArray[_nCurrent-1]['image'] ? _nObjArray[_nCurrent-1]['image'] : '';
	var final_url = '/cgi-bin/newcreate/last_viewed.pl?text=' + text.replace(/\s+/g,'+') + '&link=' + link + '&image=' + image;
	//if (frames["last_view"].location.href)
		frames["last_view"].location.href = final_url;
}

/* hides the prev or next link*/
function hide(current) {
	//alert(current);

	if (--current >= 1) {
		document.getElementById('previous').style.visibility = 'visible';		
	}else { 
		document.getElementById('previous').style.visibility = 'hidden';		
	}
	
	if (++current < total_rec) {
		document.getElementById('next').style.visibility = 'visible';		
	}else {
	    document.getElementById('next').style.visibility = 'hidden';		
	}
		
}


/**
*
* Sets/displays Preview Images
*/
function setPreviewImages(current) {	
	var nextIndex = current + 1;
	var prevIndex = current - 1;
	
	var prevImage = _previewImages[prevIndex - 1];		
	
	if (! prevImage) {		
		var pageNum = Math.ceil(prevIndex/recInPage);
		pageName = 'page' + pageNum + '.xml';		
		var parse = function () {			
			//alert('callback prev called....');
			var image = arguments[0].getElementsByTagName('image');
			var greenline = arguments[0].getElementsByTagName('greenline');
			var redline = arguments[0].getElementsByTagName('redline');
			var label = arguments[0].getElementsByTagName('label');

			// all the above array will be of same size if not then there is a BUG
			var len = image.length;		
			var index = prevIndex - 1;
			
			for (var i = (len-1); i >= 0; i-- ) {
				xmlNode = image[i];
				xmlNode1 = redline[i];
				xmlNode2 = greenline[i];
				xmlNode3 = label[i];

				if (index >= 0) {
					if(typeof(_previewImages[index]) == 'undefined') {
						_previewImages[index] = _thumbPath + xmlNode.childNodes[0].nodeValue + '#' + xmlNode1.childNodes[0].nodeValue + '#' + xmlNode2.childNodes[0].nodeValue + '#' + xmlNode3.childNodes[0].nodeValue;
						index--;
					}
				}				
			}
			window.previous_thumb = _previewImages[prevIndex - 1];	
			
			if (document.getElementById('previous').disabled == true) {
				document.getElementById('previous').disabled = false;
			}
		}
		if(pageNum > 0) {	
			// call ajax
			initAJAX(pageName, '', 'XML', 'GET', parse);				
		}
	}else {
		 window.previous_thumb = _previewImages[prevIndex - 1];		
		 if (document.getElementById('previous').disabled == true) {
			document.getElementById('previous').disabled = false;
		}
	}
	
	
	// next image	
	var nextImage = _previewImages[nextIndex - 1];
	
	if (! nextImage) {
		var pageNum = Math.ceil(nextIndex/recInPage);			
		pageName = 'page' + pageNum + '.xml';
		var parse = function () {		
			//alert('callback next called....');
			var image = arguments[0].getElementsByTagName('image');
			var greenline = arguments[0].getElementsByTagName('greenline');
			var redline = arguments[0].getElementsByTagName('redline');
			var label = arguments[0].getElementsByTagName('label');

			// all the above array will be of same size if not then there is a BUG
			var len = image.length;		
			var index = nextIndex - 1;			
			for (var i = 0; i < len; i++ ) {
				xmlNode = image[i];
				xmlNode1 = redline[i];
				xmlNode2 = greenline[i];
				xmlNode3 = label[i];

				if(_previewImages.length < total_rec) {							
					if(typeof(_previewImages[index]) == 'undefined') {
						_previewImages[index] = _thumbPath + xmlNode.childNodes[0].nodeValue + '#' + xmlNode1.childNodes[0].nodeValue + '#' + xmlNode2.childNodes[0].nodeValue + '#' + xmlNode3.childNodes[0].nodeValue;							
						index++;					
					}
				}					
			}
			window.next_thumb = _previewImages[nextIndex - 1];	
			if (document.getElementById('next').disabled == true) {
				document.getElementById('next').disabled = false;
			}
		}
		// call ajax
		initAJAX(pageName, '', 'XML', 'GET', parse);			
	}else {
		window.next_thumb = _previewImages[nextIndex - 1];		
		if (document.getElementById('next').disabled == true) {
			document.getElementById('next').disabled = false;
		}
	}		
}

/**
* returns the mouse XY position
*/
function getMouseXY(e) {
	//alert('called');
	var IE = document.all?true:false;
	if (!IE) document.captureEvents(Event.MOUSEMOVE)
	
	if(!IE){
		mouseX = e.pageX;
		mouseY = e.pageY;
	}else {
		mouseX = event.clientX + document.body.scrollLeft;
		mouseY = event.clientY + document.body.scrollTop;
	}
	// return JSON object
	return '{' + stringify('x') + ':' + stringify(mouseX) + ',' + stringify('y') + ':' + stringify(mouseY) + '}';
}


/*
* Display preview box
*/
function showPreview(flag, imageSrc, event) {		
	if(! showPopUp) {		
		if (typeof(imageSrc) != 'undefined' || imageSrc != '') {			
			//parse imageSrc get the other data such as redline,greenline and type
			//alert(imageSrc);
			var arr = imageSrc.split('#');
			var image = arr[0]; // 0 --> image path
			var rLine = arr[1]; // 1 --> redline text
			var gLine = arr[2]; // 2 --> greenline text
			var cType = getType(arr[3]); // 3 --> card type

			// create DIV
			var oDiv = document.createElement('div');
			oDiv.id = 'pic';
			oDiv.setAttribute('id','pic');
			oDiv.style.position = 'absolute';
			oDiv.style.top = 0;
			oDiv.style.left = 0;
			oDiv.style.display = 'block';
			oDiv.style.height = 140;
			oDiv.style.width = 300;
			oDiv.style.borderWidth = 0;			
			oDiv.style.zIndex = '50';
			oDiv.style.backgroundColor = '#FFFFFF';
			oDiv.style.textAlign = 'center';
			oDiv.style.visibility = 'hidden';
			oDiv.style.fontFamily = 'verdana';
			oDiv.style.fontWeight = 'normal';
			oDiv.style.fontSize = '8px';
			oDiv.style.cursor = 'default';
			
			
			oDiv.onclick = function () {				
				return false;
			}
			
			// onmouseout handler
			var func = function () {
				hidePreview(event, ((flag=='prev')?'previous':'next'));
			}
			
			try {
				oDiv.onmouseout = hidePreview(event, ((flag=='prev')?'previous':'next'));
			} catch(e) {				
				oDiv.attachEvent('onmouseout',func);
			}

			// create table
			var table = document.createElement('table');			
			table.setAttribute('id','preview');
			table.id='preview';
			table.setAttribute('border',1);
			table.setAttribute('cellspacing',4);
			table.setAttribute('cellpadding',0);
			table.setAttribute('bordercolor','black');
			table.setAttribute('width',300);
			table.style.borderStyle = 'solid';
			table.style.borderWidth = 1;
			table.style.borderColor = 'black';
			table.style.backgroundColor = '#FFFFFF';
			table.style.cursor = 'default';
			
			table.onclick = function () {
				return false;
			}
			//create TBODY
			var tbody = document.createElement('tbody');
			// create TR
			var tr = document.createElement('tr');
			//create TD
			var td_img = document.createElement('td');
			td_img.style.verticalAlign = 'middle';
			td_img.style.textAlign = 'center';
			td_img.style.borderStyle = 'solid';
			td_img.style.borderWidth = 1;
			td_img.style.borderColor = 'black';
			td_img.style.width = 138;
			td_img.style.height = 140;
			td_img.style.backgroundImage = "url('http://img.123greetings.com/images/imgback_thumb.gif')";
			td_img.style.cursor = 'default';
			td_img.onclick = function () {
				return false;
			}

			//create TD
			var td_txt = document.createElement('td');
			td_txt.style.borderStyle = 'solid';
			td_txt.style.borderWidth = 1;
			td_txt.style.borderColor = 'black';
			td_txt.style.verticalAlign = 'middle';
			td_txt.style.textAlign= 'center';
			td_txt.style.cursor = 'default';
			td_txt.onclick = function () {
				return false;
			}
			//now append text child
			var oSpan = document.createElement('span');
			oSpan.style.fontFamily = 'Ms Sans Serif';
			oSpan.style.fontWeight = 'bold';
			oSpan.style.fontSize = '14';
			oSpan.style.color = '#cc0000';
			oSpan.style.textDecoration = 'underline';
			oSpan.style.cursor = 'pointer';
			oSpan.innerHTML = rLine;

			// create instance of another abject
			var oSpan1 = document.createElement('span');
			oSpan1.style.fontFamily = 'Ms Sans Serif';
			oSpan1.style.fontWeight = 'normal';
			oSpan1.style.fontSize = '12';
			oSpan1.style.color = 'green';
			oSpan1.style.textDecoration = 'underline';
			oSpan1.style.cursor = 'pointer';
			oSpan1.innerHTML = gLine;

			var oSpan2 = document.createElement('span');
			oSpan2.style.fontFamily = 'Ms Sans Serif';
			oSpan2.style.fontWeight = 'bold';
			oSpan2.style.fontSize = '12';
			oSpan2.style.color = 'green';
			oSpan2.style.textDecoration = 'underline';
			oSpan2.style.cursor = 'pointer';
			oSpan2.innerHTML = cType;

			// create img element
			var img = document.createElement('img');
			img.src = image;
			img.setAttribute('src',image);
			img.style.width = 115;
			img.style.height = 115;
			img.style.border = 0;
			img.style.align = 'absmiddle';
			img.style.cursor = 'pointer';
			
			
			// append childs
			td_txt.appendChild(oSpan);		
			td_txt.appendChild(document.createElement('br'));
			td_txt.appendChild(oSpan1);		
			td_txt.appendChild(document.createElement('br'));
			td_txt.appendChild(oSpan2);
			

			// now append img to its parent
			td_img.appendChild(img);
			//now append TDs to its parent TR
			tr.appendChild(td_img);
			tr.appendChild(td_txt);
			//append TR to TBODY
			tbody.appendChild(tr);
			// append TBODY to TABLE
			table.appendChild(tbody);
			// append table to div	
			oDiv.appendChild(table);

			// now append Div to its parent
			if (flag.toUpperCase() == 'PREV') {							
				document.getElementById('previous').appendChild(oDiv);			
			}else if (flag.toUpperCase() == 'NEXT') {							
				document.getElementById('next').appendChild(oDiv);
			}

			// now position the div
			if (document.getElementById('pic')) {
				var divObj = document.getElementById('pic');
				var mCoord = eval('(' + getMouseXY(event) + ')');
				//get parent span height
				var winW, newPos= 0;
				// get window size adjusted for scrollbars
				if (window.innerWidth) {
					winW = window.innerWidth-16;
				}
				if (document.body.offsetWidth) {
					winW = document.body.offsetWidth-20;
				}
				// get parent node width
				parentWidth = divObj.parentNode.offsetWidth;
				parentHeight = divObj.parentNode.offsetHeight;
				parentTop = findPosY(divObj.parentNode);
				if(!parentWidth) parentWidth = 40; // fixed size
				newPos = (winW <= 800)? Math.round((300/2) + parentWidth): (300/2);
				newPos = ((mCoord.x - newPos) <= 0) ? parentWidth/2 + 50: newPos;
				//alert(parseInt(parentTop + '---' + parentHeight));
				divObj.style.top = parseInt(parentTop) + parseInt(parentHeight);				
				divObj.style.left = parseInt(mCoord.x) - parseInt(newPos); // 300 is DIV width
				divObj.style.visibility = 'visible';
				

				showPopUp = true;		
				divObj = null; // prevent memory leak
			}
			
			oDiv = null;// prevent memory leak
			img = null; // prevent memory leak
			imageSrc = null;
		}
	}	
}

/* Find a Top position of an element in the page */
function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


/*
* Implements the hide preview box technique
*
*/
function hidePreview(e) {
	
	try {
		baseTarget = document.getElementById(arguments[1]);
		var show = false;
		var relTarg;	
		if (!e) var e = window.event;
		if (e.relatedTarget) relTarg = e.relatedTarget;
		else if (e.toElement) relTarg = e.toElement;
		
		while(relTarg != baseTarget && relTarg.nodeName != 'BODY') {
			relTarg = relTarg.parentNode;
			if (relTarg == baseTarget) {
				show = true;
				break;
			}		
		}
		if (! show) {
			removePreview();
		}
	}catch(e) {}
}


/*
* removes preview box
*/
function removePreview() {
	try{
		if (document.getElementById('pic')) {
			var parent = document.getElementById('pic').parentNode;
			if (parent) {
				parent.removeChild(document.getElementById('pic'));   
			}
			parent = null; // prevent memory leak
			showPopUp = false;
		}
		showPopUp = false;
	}catch(e) {}
}


/* function to determine the card type like Postcard, Flash, Animated etc. */
function getType(type) {
	var card_type = '';
	switch (type.toUpperCase()) {
		case 'F':
			card_type = '[ Flash ]';
			break;
		case 'I':
			card_type = '[ Interactive ]';
			break;
		case 'A':
			card_type = '[ Animated ]';
			break;
		case 'P':
			card_type = '[ Postcard ]';
			break;
		case 'O':
			card_type = '[ Clickcard ]';
			break;
	}

	return card_type;
}



/*
* function to move previous
*/
function movePrev() {	
	document.getElementById('previous').disabled = true;
	if (_nCurrent == -1) {
	    _nCurrent = getPosition();
	}
	if (_nCurrent > 1) {
	    _nCurrent--;
		hide(_nCurrent);		
		setXMLpage();				
	}		
}

/*
*
* function to move previous
*
*/
function moveNext() {	
	document.getElementById('next').disabled = true;
	if (_nCurrent == -1) {
	    _nCurrent = getPosition();
	}

	if (_nCurrent < total_rec) {
	    _nCurrent++;
		hide(_nCurrent);		
		setXMLpage();				
	}
}

/*
*
* this function controls the flow of this program
*
*/
function main() {
	// sets the total records
	if (arguments[0]) {			
		// as arguments is false so there is new page, now show loading message		
		show_loading();
		//initialize AJAX call
		initAJAX(_pageToRead,'','XML','GET',parseXML);	
	}else {
	    _nPointer = _nCurrent - 1;		
	    write_html(_nDataArray[_nPointer]);
		write_form_data();
		change_extras();
		setPreviewImages(_nCurrent);
	}
}
